当前位置:首页 > 单片机 > 单片机
[导读]最近在用stm32定时器控制步进电机,由于普通定时器不够用,只能把TIM1当普通定时器用,我随手就把普通定时器的代码搬过去。voidcs_Timer_Init(void)//TIM1us级{TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;/*Time

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


voidcs_Timer_Init(void)//TIM1us级

{

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

/*Timebaseconfiguration*/

TIM_TimeBaseStructure.TIM_Period=1000;

TIM_TimeBaseStructure.TIM_Prescaler=71;

TIM_TimeBaseStructure.TIM_ClockDivision=0;

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

TIM_ClearITPendingBit(TIM1,TIM_IT_Update);

TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);

}



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


voidcs_Timer_Init(void)//TIM1us级

{

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

/*Timebaseconfiguration*/

TIM_TimeBaseStructure.TIM_Period=1000;

TIM_TimeBaseStructure.TIM_Prescaler=71;

TIM_TimeBaseStructure.TIM_ClockDivision=0;

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

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

TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

TIM_ClearITPendingBit(TIM1,TIM_IT_Update);

TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭