weixin_42550330 2019-06-11 20:22 采纳率: 0%
浏览 797

在进行STM32F4进行PWM调速,编码器测速时,进行减速操作时,串口调试助手不显示接收数据了,为什么

如果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);    这个程序,串口调试助手显示的脉冲数值特别小,加上后数值变大,但是进行减速操作时,串口调试助手不显示接收数据了,为什么
  • 写回答

1条回答 默认 最新

  • gaohuabinjiang 2019-06-18 16:24
    关注

    有可能是数据溢出了吧!

    评论

报告相同问题?

悬赏问题

  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常