如果main函数中不加SysTick_Delay_Ms(1000); 这个程序,串口调试助手显示的脉冲数值特别小,加上后数值变大,但是进行减速操作时,串口调试助手不显示接收数据了,为什么
按键中断//按K2,减小占空比,减速
void KEY2_IRQHandler(void)
{
if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE) != RESET)
{
LED_PURPLE;
BEEP_RED;
if(ChannelPulse>=4)
{
ChannelPulse-=5;
}
else
ChannelPulse=0;
TIM_SetCompare1(GENERAL_TIM,ChannelPulse);
EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);
}
}
编码器的中断
```void Enc_TIM_IRQHandler (void)//方向判断
{
if(TIM_GetITStatus(Enc_TIM,TIM_IT_Update)!=RESET)
{
if((Enc_TIM->CR1>>4&0X01)==0)//DTR=0正向
{
//Circult_count++;
Circult_count=1;
}
else if((Enc_TIM->CR1>>4&0X01)==1)//DTR=1
{
//Circult_count--;
Circult_count=3;
}
}
TIM_ClearITPendingBit(Enc_TIM,TIM_IT_Update);
}
//编码器计数程序
void TIM_Enc_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/*--------------------GPIO配置»¯-------------------------*/
RCC_AHB1PeriphClockCmd (Enc_GPIO_CLK , ENABLE); // GPIO使能
RCC_APB1PeriphClockCmd(Enc_TIM_CLK, ENABLE); //TIMÊ使能
GPIO_PinAFConfig(Enc_CLK_GPIO_PORT,Enc_CLK_PINSOURCE,Enc_CLK_AF);
GPIO_PinAFConfig(Enc_DAT_GPIO_PORT,Enc_DAT_PINSOURCE,Enc_DAT_AF);//端口复用
// GPIO配置
GPIO_InitStructure.GPIO_Pin = Enc_CLK_GPIO_PIN ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(Enc_CLK_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Enc_DAT_GPIO_PIN ;
GPIO_Init(Enc_DAT_GPIO_PORT, &GPIO_InitStructure);
TIM_DeInit(Enc_TIM);
TIM_TimeBaseStructure.TIM_Period = Enc_TIM_PERIOD ;//ARR
TIM_TimeBaseStructure.TIM_Prescaler = Enc_TIM_PSC ;//PSC
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(Enc_TIM, &TIM_TimeBaseStructure);
EncoderInterfaceConfig(Enc_TIM,TIM_EncoderMode_TI12,TIM_ICPolarity_BothEdge,TIM_ICPolarity_BothEdge);//两相计数
TIM_ICStructInit(&TIM_ICInitStructure);
TIM_ICInitStructure.TIM_ICFilter = 6;
TIM_ICInit(Enc_TIM,&TIM_ICInitStructure);
TIM_ClearFlag(Enc_TIM, TIM_FLAG_Update);
// Clear all pending interrupts
TIM_ITConfig(Enc_TIM,TIM_IT_Update,ENABLE);
TIM_SetCounter(Enc_TIM,0);//TIM3->0 //Reset counter
TIM_Cmd(Enc_TIM, ENABLE);
}
void readEncoder(void)
{
Encoder = TIM_GetCounter(Enc_TIM);
if(Circult_count==1)//DTR=0正向
{
Encoder=Encoder;
}
else if(Circult_count==3)//DTR=1反向
{
Encoder= (Enc_TIM_PERIOD+1-Encoder);
}
Speed=Encoder/1560;
TIM_SetCounter(Enc_TIM,0); //清0
}
主程序
int main(void)
{
/* 各端口初始化¯ */
LED_GPIO_Config();
EXTI_Key_Config() ;
BEEP_GPIO_Config();
MOTOR_GPIO_Config();
TIM_PWMINPUT_Config();
TIMx_NVIC_Config();
TIM_PWMOUTPUT_Config();
TIM_Enc_Config();
Debug_USART_Config();
Show_Message();
while (1)
{
MOTOR1_FORWARD;
readEncoder();
printf("占空比\n",DutyCycle);
printf("速度º%0.2fr/s\n",Speed);
printf(" 计数值º%0.2f 圈数%0.2f\n",Encoder,Circult_count);
SysTick_Delay_Ms(1000); //延时1s
}
}
如果main函数中不加SysTick_Delay_Ms(1000); 这个程序,串口调试助手显示的脉冲数值特别小,加上后数值变大,但是进行减速操作时,串口调试助手不显示接收数据了,为什么