@@ -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 | |||