@@ -64,13 +64,13 @@ void MX_GPIO_Init(void) | |||||
/*Configure GPIO pin : PtPin */ | /*Configure GPIO pin : PtPin */ | ||||
GPIO_InitStruct.Pin = X5_Pin; | GPIO_InitStruct.Pin = X5_Pin; | ||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; | GPIO_InitStruct.Mode = GPIO_MODE_INPUT; | ||||
GPIO_InitStruct.Pull = GPIO_PULLUP; | |||||
GPIO_InitStruct.Pull = GPIO_PULLDOWN; | |||||
HAL_GPIO_Init(X5_GPIO_Port, &GPIO_InitStruct); | HAL_GPIO_Init(X5_GPIO_Port, &GPIO_InitStruct); | ||||
/*Configure GPIO pin : PtPin */ | /*Configure GPIO pin : PtPin */ | ||||
GPIO_InitStruct.Pin = X4_Pin; | GPIO_InitStruct.Pin = X4_Pin; | ||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; | GPIO_InitStruct.Mode = GPIO_MODE_INPUT; | ||||
GPIO_InitStruct.Pull = GPIO_PULLUP; | |||||
GPIO_InitStruct.Pull = GPIO_PULLDOWN; | |||||
HAL_GPIO_Init(X4_GPIO_Port, &GPIO_InitStruct); | HAL_GPIO_Init(X4_GPIO_Port, &GPIO_InitStruct); | ||||
} | } | ||||
@@ -160,14 +160,14 @@ int main(void) | |||||
CPU_CRITICAL_ENTER();///进入临界区 | CPU_CRITICAL_ENTER();///进入临界区 | ||||
/* 任务1 */ | /* 任务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/10, /* 任务堆栈深度限位 */ | ||||
(CPU_STK_SIZE)Task_Y1Direction_SIZE, /* 任务堆栈大小 */ | |||||
(CPU_STK_SIZE)Task_Y1Direction_SIZE, /* 任务堆栈大小 */ | |||||
(OS_MSG_QTY)0, /* 任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息 */ | (OS_MSG_QTY)0, /* 任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息 */ | ||||
(OS_TICK )0, /* 当使能时间片轮转时的时间片长度,为0时为默认长度 */ | (OS_TICK )0, /* 当使能时间片轮转时的时间片长度,为0时为默认长度 */ | ||||
(void * )0, /* 用户补充的存储区 */ | (void * )0, /* 用户补充的存储区 */ | ||||
@@ -425,8 +425,7 @@ void PulseGetCount(void *p_arg) | |||||
{ | { | ||||
Options.Dir = 0; | Options.Dir = 0; | ||||
} | } | ||||
if(TIM2->CNT != 0) | |||||
if (TIM2->CNT != 0) | |||||
{ | { | ||||
if (Options.Dir == 1) | if (Options.Dir == 1) | ||||
{ | { | ||||
@@ -466,10 +465,10 @@ void EXTSet(void *p_arg) | |||||
X4_Sta = 1; | 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); | 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; | X5_Sta = 1; | ||||
} | } | ||||
@@ -219,18 +219,17 @@ void TIM2_IRQHandler(void) | |||||
/* USER CODE BEGIN TIM2_IRQn 1 */ | /* USER CODE BEGIN TIM2_IRQn 1 */ | ||||
__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE); | __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE); | ||||
//HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | |||||
TIM2->CNT = 0; | TIM2->CNT = 0; | ||||
PulseNum ++; /* 脉冲段数增加 */ | PulseNum ++; /* 脉冲段数增加 */ | ||||
if (Options.RunMod == 0) | |||||
if (Options.RunMod == 0) /* 相对模式 */ | |||||
{ | { | ||||
/* 如果之后还有脉冲 */ | /* 如果之后还有脉冲 */ | ||||
if(Options.AllPulse - PulseNum > 0) | if(Options.AllPulse - PulseNum > 0) | ||||
{ | { | ||||
PrePulse = NowPulse; /* 保存之前的脉冲段 */ | PrePulse = NowPulse; /* 保存之前的脉冲段 */ | ||||
if(PulseOutput[NowPulse].NextPulse == 0) | |||||
if (PulseOutput[NowPulse].NextPulse == 0) | |||||
{ | { | ||||
NowPulse = NowPulse + 1; /* 进入下一段脉冲 */ | NowPulse = NowPulse + 1; /* 进入下一段脉冲 */ | ||||
} | } | ||||
@@ -263,20 +262,22 @@ void TIM2_IRQHandler(void) | |||||
HAL_TIM_PWM_Stop_IT(&htim10,TIM_CHANNEL_1); /* 停止PWM输出 */ | 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; /* 保存之前的脉冲段 */ | PrePulse = NowPulse; /* 保存之前的脉冲段 */ | ||||
if(PulseOutput[NowPulse].NextPulse == 0) | |||||
if (PulseOutput[NowPulse].NextPulse == 0) | |||||
{ | { | ||||
NowPulse = NowPulse + 1; /* 进入下一段脉冲 */ | NowPulse = NowPulse + 1; /* 进入下一段脉冲 */ | ||||
} | } | ||||
@@ -284,24 +285,31 @@ void TIM2_IRQHandler(void) | |||||
{ | { | ||||
NowPulse = PulseOutput[NowPulse].NextPulse - 1; /* 进入下一段脉冲 */ | 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 */ | /* USER CODE END TIM2_IRQn 1 */ | ||||
} | } | ||||
@@ -20,7 +20,7 @@ | |||||
<LeaveTargetRunning>_ 0</LeaveTargetRunning> | <LeaveTargetRunning>_ 0</LeaveTargetRunning> | ||||
</StLinkDriver> | </StLinkDriver> | ||||
<DebugChecksum> | <DebugChecksum> | ||||
<Checksum>3780237782</Checksum> | |||||
<Checksum>1642237281</Checksum> | |||||
</DebugChecksum> | </DebugChecksum> | ||||
<Exceptions> | <Exceptions> | ||||
<StopOnUncaught>_ 0</StopOnUncaught> | <StopOnUncaught>_ 0</StopOnUncaught> | ||||
@@ -59,6 +59,8 @@ | |||||
<Registers> | <Registers> | ||||
<regBase0>TIM2_CNT 10</regBase0> | <regBase0>TIM2_CNT 10</regBase0> | ||||
<regBase1>TIM2_ARR 10</regBase1> | <regBase1>TIM2_ARR 10</regBase1> | ||||
<regBase2>TIM10_CNT 10</regBase2> | |||||
<regBase3>TIM10_ARR 10</regBase3> | |||||
</Registers> | </Registers> | ||||
<struct_types> | <struct_types> | ||||
<Fmt0>Option-AccDownTime 3 0</Fmt0> | <Fmt0>Option-AccDownTime 3 0</Fmt0> | ||||
@@ -32,7 +32,7 @@ void SetFrequency(uint8_t SentPost, uint32_t Frequency) | |||||
{ | { | ||||
CalculatePSCARR(Frequency, 72000000, 65535, &psc, &arr); | CalculatePSCARR(Frequency, 72000000, 65535, &psc, &arr); | ||||
//printf("Fre=%d,",Frequency); | //printf("Fre=%d,",Frequency); | ||||
switch(SentPost) | |||||
switch (SentPost) | |||||
{ | { | ||||
case 0: TIM10->ARR = arr, TIM10->PSC = psc, TIM10->CCR1 = arr / 2; break; | 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; | 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) | void PulseStart(void) | ||||
{ | { | ||||
if(PulseOutput[NowPulse].PulseCount >= 0) | |||||
if (PulseOutput[NowPulse].PulseCount >= 0) | |||||
{ | { | ||||
TIM2->ARR = PulseOutput[NowPulse].PulseCount; | 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) | void MAXPulseSet(int32_t PulseCount) | ||||
{ | { | ||||
if(NowPulse == 0) | |||||
if (NowPulse == 0) | |||||
{ | { | ||||
NowMAXPulse = PulseOutput[NowPulse].PulseCount; | NowMAXPulse = PulseOutput[NowPulse].PulseCount; | ||||
} | } | ||||
@@ -103,11 +103,10 @@ void MAXPulseSet(int32_t PulseCount) | |||||
*/ | */ | ||||
void SetNextPulse(void) | 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; | 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 | 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 | PA9.Signal=USART1_TX | ||||
PB5.GPIOParameters=GPIO_PuPd,GPIO_Label | PB5.GPIOParameters=GPIO_PuPd,GPIO_Label | ||||
PB5.GPIO_Label=X4 | PB5.GPIO_Label=X4 | ||||
PB5.GPIO_PuPd=GPIO_PULLUP | |||||
PB5.GPIO_PuPd=GPIO_PULLDOWN | |||||
PB5.Locked=true | PB5.Locked=true | ||||
PB5.Signal=GPIO_Input | PB5.Signal=GPIO_Input | ||||
PF6.Locked=true | PF6.Locked=true | ||||
@@ -116,7 +116,7 @@ PF9.Locked=true | |||||
PF9.Signal=S_TIM14_CH1 | PF9.Signal=S_TIM14_CH1 | ||||
PG12.GPIOParameters=GPIO_PuPd,GPIO_Label | PG12.GPIOParameters=GPIO_PuPd,GPIO_Label | ||||
PG12.GPIO_Label=X5 | PG12.GPIO_Label=X5 | ||||
PG12.GPIO_PuPd=GPIO_PULLUP | |||||
PG12.GPIO_PuPd=GPIO_PULLDOWN | |||||
PG12.Locked=true | PG12.Locked=true | ||||
PG12.Signal=GPIO_Input | PG12.Signal=GPIO_Input | ||||
PH0-OSC_IN.Mode=HSE-External-Oscillator | PH0-OSC_IN.Mode=HSE-External-Oscillator | ||||
@@ -168,7 +168,7 @@ ProjectManager.StackSize=0x400 | |||||
ProjectManager.TargetToolchain=EWARM V8 | ProjectManager.TargetToolchain=EWARM V8 | ||||
ProjectManager.ToolChainLocation= | ProjectManager.ToolChainLocation= | ||||
ProjectManager.UnderRoot=false | 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.48MHZClocksFreq_Value=36000000 | ||||
RCC.AHBFreq_Value=72000000 | RCC.AHBFreq_Value=72000000 | ||||
RCC.APB1CLKDivider=RCC_HCLK_DIV2 | 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 | SH.S_TIM2_CH1_ETR.ConfNb=1 | ||||
TIM10.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE | TIM10.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE | ||||
TIM10.Channel=TIM_CHANNEL_1 | 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.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.Channel=TIM_CHANNEL_1 | ||||
TIM11.IPParameters=Channel | TIM11.IPParameters=Channel | ||||
TIM13.Channel=TIM_CHANNEL_1 | TIM13.Channel=TIM_CHANNEL_1 | ||||