| @@ -64,13 +64,13 @@ void MX_GPIO_Init(void) | |||
| /*Configure GPIO pin : PtPin */ | |||
| GPIO_InitStruct.Pin = X5_Pin; | |||
| GPIO_InitStruct.Mode = GPIO_MODE_INPUT; | |||
| GPIO_InitStruct.Pull = GPIO_PULLUP; | |||
| GPIO_InitStruct.Pull = GPIO_PULLDOWN; | |||
| HAL_GPIO_Init(X5_GPIO_Port, &GPIO_InitStruct); | |||
| /*Configure GPIO pin : PtPin */ | |||
| GPIO_InitStruct.Pin = X4_Pin; | |||
| GPIO_InitStruct.Mode = GPIO_MODE_INPUT; | |||
| GPIO_InitStruct.Pull = GPIO_PULLUP; | |||
| GPIO_InitStruct.Pull = GPIO_PULLDOWN; | |||
| HAL_GPIO_Init(X4_GPIO_Port, &GPIO_InitStruct); | |||
| } | |||
| @@ -160,14 +160,14 @@ int main(void) | |||
| CPU_CRITICAL_ENTER();///进入临界区 | |||
| /* 任务1 */ | |||
| OSTaskCreate((OS_TCB * )&Y1Direction_Tsk, /* 任务控制块 */ | |||
| (CPU_CHAR* )"Y1Direction", /* 任务名字 */ | |||
| (OS_TASK_PTR)Y1Direction, /* 任务函数 */ | |||
| (void * )0, /* 传递给任务函数的参数 */ | |||
| (OS_PRIO )TASK_Y1Direction, /* 任务优先级 */ | |||
| (CPU_STK * )&Task_Y1Direction_STK[0], /* 任务堆栈基地址 */ | |||
| OSTaskCreate((OS_TCB * )&Y1Direction_Tsk, /* 任务控制块 */ | |||
| (CPU_CHAR* )"Y1Direction", /* 任务名字 */ | |||
| (OS_TASK_PTR)Y1Direction, /* 任务函数 */ | |||
| (void * )0, /* 传递给任务函数的参数 */ | |||
| (OS_PRIO )TASK_Y1Direction, /* 任务优先级 */ | |||
| (CPU_STK * )&Task_Y1Direction_STK[0], /* 任务堆栈基地址 */ | |||
| (CPU_STK_SIZE)Task_Y1Direction_SIZE/10, /* 任务堆栈深度限位 */ | |||
| (CPU_STK_SIZE)Task_Y1Direction_SIZE, /* 任务堆栈大小 */ | |||
| (CPU_STK_SIZE)Task_Y1Direction_SIZE, /* 任务堆栈大小 */ | |||
| (OS_MSG_QTY)0, /* 任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息 */ | |||
| (OS_TICK )0, /* 当使能时间片轮转时的时间片长度,为0时为默认长度 */ | |||
| (void * )0, /* 用户补充的存储区 */ | |||
| @@ -425,8 +425,7 @@ void PulseGetCount(void *p_arg) | |||
| { | |||
| Options.Dir = 0; | |||
| } | |||
| if(TIM2->CNT != 0) | |||
| if (TIM2->CNT != 0) | |||
| { | |||
| if (Options.Dir == 1) | |||
| { | |||
| @@ -466,10 +465,10 @@ void EXTSet(void *p_arg) | |||
| X4_Sta = 1; | |||
| } | |||
| } | |||
| if(HAL_GPIO_ReadPin(GPIOB, X5_Pin) == GPIO_PIN_RESET) | |||
| if(HAL_GPIO_ReadPin(GPIOG, X5_Pin) == GPIO_PIN_SET) | |||
| { | |||
| OSTimeDly(10, OS_OPT_TIME_DLY, &err); | |||
| if(HAL_GPIO_ReadPin(GPIOB, X5_Pin) == GPIO_PIN_RESET) | |||
| if(HAL_GPIO_ReadPin(GPIOG, X5_Pin) == GPIO_PIN_SET) | |||
| { | |||
| X5_Sta = 1; | |||
| } | |||
| @@ -219,18 +219,17 @@ void TIM2_IRQHandler(void) | |||
| /* USER CODE BEGIN TIM2_IRQn 1 */ | |||
| __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE); | |||
| //HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||
| TIM2->CNT = 0; | |||
| PulseNum ++; /* 脉冲段数增加 */ | |||
| if (Options.RunMod == 0) | |||
| if (Options.RunMod == 0) /* 相对模式 */ | |||
| { | |||
| /* 如果之后还有脉冲 */ | |||
| if(Options.AllPulse - PulseNum > 0) | |||
| { | |||
| PrePulse = NowPulse; /* 保存之前的脉冲段 */ | |||
| if(PulseOutput[NowPulse].NextPulse == 0) | |||
| if (PulseOutput[NowPulse].NextPulse == 0) | |||
| { | |||
| NowPulse = NowPulse + 1; /* 进入下一段脉冲 */ | |||
| } | |||
| @@ -263,20 +262,22 @@ void TIM2_IRQHandler(void) | |||
| HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||
| } | |||
| } | |||
| if(Options.RunMod == 1) | |||
| if (Options.RunMod == 1) /* 绝对模式 */ | |||
| { | |||
| if(AllPulseCNT >= MAX_Pulse) | |||
| { | |||
| PulseCount = 0; | |||
| HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||
| } | |||
| else | |||
| /* 如果之后还有脉冲 */ | |||
| if (Options.AllPulse - PulseNum > 0) | |||
| { | |||
| /* 如果之后还有脉冲 */ | |||
| if(Options.AllPulse - PulseNum > 0) | |||
| if (TIM2->ARR < PulseOutput[PulseOutput[NowPulse].NextPulse].PulseCount) /* 如果已经达到了设定的最大脉冲数 */ | |||
| { | |||
| PulseCount = 0; | |||
| HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||
| } | |||
| else | |||
| { | |||
| PrePulse = NowPulse; /* 保存之前的脉冲段 */ | |||
| if(PulseOutput[NowPulse].NextPulse == 0) | |||
| if (PulseOutput[NowPulse].NextPulse == 0) | |||
| { | |||
| NowPulse = NowPulse + 1; /* 进入下一段脉冲 */ | |||
| } | |||
| @@ -284,24 +285,31 @@ void TIM2_IRQHandler(void) | |||
| { | |||
| NowPulse = PulseOutput[NowPulse].NextPulse - 1; /* 进入下一段脉冲 */ | |||
| } | |||
| /* 准备加减速 */ | |||
| Acc = GetAcc(PulseOutput[PrePulse].Frequency, | |||
| PulseOutput[NowPulse].Frequency, Options.AccUpTime); /* 计算加速度 */ | |||
| ArrFlag = 1; | |||
| SetNextPulse();/* 设置下一次进入中断的脉冲数 */ | |||
| } | |||
| /* 如果之后没有脉冲 */ | |||
| else | |||
| { | |||
| PulseCount = 0; | |||
| HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||
| if (PulseOutput[PrePulse].Frequency <= PulseOutput[NowPulse].Frequency) | |||
| { | |||
| Acc = GetAcc(PulseOutput[PrePulse].Frequency, | |||
| PulseOutput[NowPulse].Frequency, Options.AccUpTime); /* 计算加速度 */ | |||
| } | |||
| else | |||
| { | |||
| Acc = GetAcc(PulseOutput[PrePulse].Frequency, | |||
| PulseOutput[NowPulse].Frequency, Options.AccDownTime); /* 计算加速度 */ | |||
| } | |||
| ArrFlag = 1; | |||
| SetNextPulse();/* 设置下一次进入中断的脉冲数 */ | |||
| HAL_TIM_Base_Start_IT(&htim3); /* 启动定时器3和中断 */ | |||
| } | |||
| } | |||
| /* 如果之后没有脉冲 */ | |||
| else | |||
| { | |||
| PulseCount = 0; | |||
| ArrFlag = 0; | |||
| HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||
| } | |||
| } | |||
| /* USER CODE END TIM2_IRQn 1 */ | |||
| } | |||
| @@ -20,7 +20,7 @@ | |||
| <LeaveTargetRunning>_ 0</LeaveTargetRunning> | |||
| </StLinkDriver> | |||
| <DebugChecksum> | |||
| <Checksum>3780237782</Checksum> | |||
| <Checksum>1642237281</Checksum> | |||
| </DebugChecksum> | |||
| <Exceptions> | |||
| <StopOnUncaught>_ 0</StopOnUncaught> | |||
| @@ -59,6 +59,8 @@ | |||
| <Registers> | |||
| <regBase0>TIM2_CNT 10</regBase0> | |||
| <regBase1>TIM2_ARR 10</regBase1> | |||
| <regBase2>TIM10_CNT 10</regBase2> | |||
| <regBase3>TIM10_ARR 10</regBase3> | |||
| </Registers> | |||
| <struct_types> | |||
| <Fmt0>Option-AccDownTime 3 0</Fmt0> | |||
| @@ -32,7 +32,7 @@ void SetFrequency(uint8_t SentPost, uint32_t Frequency) | |||
| { | |||
| CalculatePSCARR(Frequency, 72000000, 65535, &psc, &arr); | |||
| //printf("Fre=%d,",Frequency); | |||
| switch(SentPost) | |||
| switch (SentPost) | |||
| { | |||
| case 0: TIM10->ARR = arr, TIM10->PSC = psc, TIM10->CCR1 = arr / 2; break; | |||
| case 1: TIM11->ARR = arr, TIM11->PSC = psc, TIM11->CCR1 = arr / 2; break; | |||
| @@ -49,7 +49,7 @@ void SetFrequency(uint8_t SentPost, uint32_t Frequency) | |||
| */ | |||
| void PulseStart(void) | |||
| { | |||
| if(PulseOutput[NowPulse].PulseCount >= 0) | |||
| if (PulseOutput[NowPulse].PulseCount >= 0) | |||
| { | |||
| TIM2->ARR = PulseOutput[NowPulse].PulseCount; | |||
| } | |||
| @@ -87,7 +87,7 @@ float GetAcc(int32_t Start, int32_t End, int32_t AccCount) | |||
| */ | |||
| void MAXPulseSet(int32_t PulseCount) | |||
| { | |||
| if(NowPulse == 0) | |||
| if (NowPulse == 0) | |||
| { | |||
| NowMAXPulse = PulseOutput[NowPulse].PulseCount; | |||
| } | |||
| @@ -103,11 +103,10 @@ void MAXPulseSet(int32_t PulseCount) | |||
| */ | |||
| void SetNextPulse(void) | |||
| { | |||
| MAXPulseSet(PulseOutput[NowPulse].PulseCount); /* 更改结果脉冲数 */ | |||
| if(Options.RunMod == 0) /* 如果是相对模式 */ | |||
| int32_t temp; | |||
| if (Options.RunMod == 0) /* 如果是相对模式 */ | |||
| { | |||
| if(PulseOutput[NowPulse].PulseCount > 0) | |||
| if (PulseOutput[NowPulse].PulseCount > 0) | |||
| { | |||
| TIM2->ARR = PulseOutput[NowPulse].PulseCount; | |||
| } | |||
| @@ -117,15 +116,23 @@ void SetNextPulse(void) | |||
| } | |||
| } | |||
| else /* 如果是绝对模式 */ | |||
| else if (Options.RunMod == 1)/* 如果是绝对模式 */ | |||
| { | |||
| if(NowMAXPulse >= MAX_Pulse) /* 如果超出了上限 */ | |||
| if (PulseOutput[NowPulse].PulseCount * PulseOutput[PrePulse].PulseCount >= 0) | |||
| { | |||
| TIM2->ARR = - (MAX_Pulse - NowMAXPulse); | |||
| temp = PulseOutput[NowPulse].PulseCount - PulseOutput[PrePulse].PulseCount; | |||
| } | |||
| else | |||
| { | |||
| TIM2->ARR = PulseOutput[NowPulse].PulseCount; | |||
| temp = PulseOutput[NowPulse].PulseCount + PulseOutput[PrePulse].PulseCount; | |||
| } | |||
| if(temp >= 0) | |||
| { | |||
| TIM2->ARR = temp; | |||
| } | |||
| else | |||
| { | |||
| TIM2->ARR = - temp; | |||
| } | |||
| } | |||
| } | |||
| @@ -103,7 +103,7 @@ PA9.Mode=Asynchronous | |||
| PA9.Signal=USART1_TX | |||
| PB5.GPIOParameters=GPIO_PuPd,GPIO_Label | |||
| PB5.GPIO_Label=X4 | |||
| PB5.GPIO_PuPd=GPIO_PULLUP | |||
| PB5.GPIO_PuPd=GPIO_PULLDOWN | |||
| PB5.Locked=true | |||
| PB5.Signal=GPIO_Input | |||
| PF6.Locked=true | |||
| @@ -116,7 +116,7 @@ PF9.Locked=true | |||
| PF9.Signal=S_TIM14_CH1 | |||
| PG12.GPIOParameters=GPIO_PuPd,GPIO_Label | |||
| PG12.GPIO_Label=X5 | |||
| PG12.GPIO_PuPd=GPIO_PULLUP | |||
| PG12.GPIO_PuPd=GPIO_PULLDOWN | |||
| PG12.Locked=true | |||
| PG12.Signal=GPIO_Input | |||
| PH0-OSC_IN.Mode=HSE-External-Oscillator | |||
| @@ -168,7 +168,7 @@ ProjectManager.StackSize=0x400 | |||
| ProjectManager.TargetToolchain=EWARM V8 | |||
| ProjectManager.ToolChainLocation= | |||
| ProjectManager.UnderRoot=false | |||
| ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM10_Init-TIM10-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_TIM11_Init-TIM11-false-HAL-true,8-MX_TIM13_Init-TIM13-false-HAL-true,9-MX_TIM14_Init-TIM14-false-HAL-true | |||
| ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM10_Init-TIM10-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_TIM11_Init-TIM11-false-HAL-true,8-MX_TIM13_Init-TIM13-false-HAL-true,9-MX_TIM14_Init-TIM14-false-HAL-true,10-MX_TIM3_Init-TIM3-false-HAL-true | |||
| RCC.48MHZClocksFreq_Value=36000000 | |||
| RCC.AHBFreq_Value=72000000 | |||
| RCC.APB1CLKDivider=RCC_HCLK_DIV2 | |||
| @@ -216,10 +216,11 @@ SH.S_TIM2_CH1_ETR.0=TIM2_ETR,ClockSourceETR_Mode2 | |||
| SH.S_TIM2_CH1_ETR.ConfNb=1 | |||
| TIM10.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE | |||
| TIM10.Channel=TIM_CHANNEL_1 | |||
| TIM10.IPParameters=Channel,Prescaler,AutoReloadPreload,Pulse,OCPolarity_1 | |||
| TIM10.IPParameters=Channel,Prescaler,AutoReloadPreload,Pulse,OCPolarity_1,Period | |||
| TIM10.OCPolarity_1=TIM_OCPOLARITY_LOW | |||
| TIM10.Prescaler=72 | |||
| TIM10.Pulse=32767 | |||
| TIM10.Period=1 | |||
| TIM10.Prescaler=1 | |||
| TIM10.Pulse=0 | |||
| TIM11.Channel=TIM_CHANNEL_1 | |||
| TIM11.IPParameters=Channel | |||
| TIM13.Channel=TIM_CHANNEL_1 | |||