您的位置 首页 方案

STM32在定时器中操控步进电机

写WEB程序的时候,发现如果加上步进电机控制的话,就会出现问题。原因是如果把电机控制放在uip循环中处理的话,因为控制电机涉及到时间问题…

写WEB程序的时分,发现假如加上步进电机操控的话,就会出现问题。原因是假如把电机操控放在uip循环中处理的话,由于操控电机涉及到时间问题。所以有必要处理,想到的办法便是多任务的思维。把步进电机的处理放在守时器中止里边。这样的话就能防止问题了。趁便学习了库函数操作守时器。这儿用到的守时器功用简略,只需要发生更新中止。

下面是守时器初始化代码

  1. //守时器3初始化
  2. //arr:守时重装值
  3. //psc:分频值
  4. voidTIM3_Init(uint16_tarr,uint16_tpsc)
  5. {
  6. TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
  7. NVIC_InitTypeDefNVIC_InitStructure;
  8. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//敞开TIM3时钟
  9. //守时器3装备,重载值、分频值、分频系数、计数模
  10. TIM_TimeBaseStructure.TIM_Period=arr;
  11. TIM_TimeBaseStructure.TIM_Prescaler=psc;
  12. TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
  13. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  14. TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
  15. TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//答应守时更新中止
  16. //中止装备
  17. NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
  18. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  19. NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
  20. NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  21. NVIC_Init(&NVIC_InitStructure);
  22. TIM_Cmd(TIM3,ENABLE);//使能守时器3
  23. }

守时器中止处理函数

  1. voidTIM3_IRQHandler(void)
  2. {
  3. staticuint8_ti;//相序计数器
  4. if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
  5. {
  6. TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
  7. Motorcw(i);//电机正转
  8. i++;
  9. if(i==4)
  10. i=0;
  11. }
  12. }

电机正传代码函数

  1. voidMotorcw(uint8_ti)
  2. {
  3. GPIO_Write(GPIOC,phasecw[i]);
  4. }

这样的话就不能搅扰到uip的正常事情处理了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/262594.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部