×
单片机 > 单片机程序设计 > 详情

STM32高级定时器用于普通定时,定时周期变长

发布时间:2020-08-26 发布时间:
|

最近在用stm32定时器控制步进电机,由于普通定时器不够用,只能把TIM1当普通定时器用,我随手就把普通定时器的代码搬过去。


  1. void cs_Timer_Init(void)              //TIM1           us级  

  2. {  

  3.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;                                                   

  4.   

  5.   /* Time base configuration */  

  6.   TIM_TimeBaseStructure.TIM_Period = 1000;  

  7.   TIM_TimeBaseStructure.TIM_Prescaler = 71;  

  8.   TIM_TimeBaseStructure.TIM_ClockDivision = 0;  

  9.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  

  10.   

  11.   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);  

  12.   

  13.   TIM_ClearITPendingBit(TIM1, TIM_IT_Update);  

  14.   

  15.   TIM_ITConfig(TIM1, TIM_IT_Update , ENABLE);  

  16. }  



编译下载后,发现步进电机转的很慢,和原先预计的不一样,第一反应是怀疑拷贝过来的代码有问题,核对了一边发现没问题,用逻辑分析仪测试了,发现真是定时器慢了,在检查代码,发现 TIM_TimeBaseInitTypeDef 结构体中的一个参数 TIM_RepetitionCounter 一直没用,查查资料,这个值是计数值满溢出几次才进入中断,就试着把这个值也初始化为0,发现步进电机变快了,测量波形,定时器OK。


  1. void cs_Timer_Init(void)              //TIM1           us级  

  2. {  

  3.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;                                                   

  4.   

  5.   /* Time base configuration */  

  6.   TIM_TimeBaseStructure.TIM_Period = 1000;  

  7.   TIM_TimeBaseStructure.TIM_Prescaler = 71;  

  8.   TIM_TimeBaseStructure.TIM_ClockDivision = 0;  

  9.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  

  10.   TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;    //修改此处  

  11.   

  12.   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);  

  13.   

  14.   TIM_ClearITPendingBit(TIM1, TIM_IT_Update);  

  15.   

  16.   TIM_ITConfig(TIM1, TIM_IT_Update , ENABLE);  

  17. }  


关键字:STM32  高级定时器  普通定时  定时周期 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项