stm32 滴答定时器延时失效、时序混乱问题
1 、 stm32裸机程序运行时的滴答定时器问题
当裸机运行大量程序时,滴答定时器很容易出现程序崩溃的问题。如:滴答延时失效或者变短、或者是时序混乱。
1.1
之前用裸机做小车时,遇到了定时器中断里陀螺仪更新姿态和滴答定时器冲突的问题。嘀嗒定时器延时在此程序中失效,延时时间变得极短,结果整个程序就崩溃了。
后来发现,如果在定时器中断里调用滴答定时器延时会存在扰乱时序的情况,因为嘀嗒定时器的中断等级默认为最低,在中断中再次调用嘀嗒定时器(可能)会把值赋给中断前被打断的滴答定时器。
1.2
在用直流电机和乐拍索尔舵机控制板进行机械臂控制时,出现了串口1和陀螺仪紊乱的情况,经排查,也是出现了嘀嗒定时器导致程序时序崩溃的问题。
2 解决办法
针对这类问题,以我的见识和能力来说,我只能提供三种解决办法。
2.1、 采用for循环进行软件延时(缺点是延时不是很准确)
2.2 采用定时器延时,把配置定时器配置成固定的时间进行中断,中断中设置一个自增变量。然后延时函数里调用定时器+循环语句进行延时。(比第一种延时方式精确)
2.3 在操作系统上编写代码 如 ucosiii 和ucosiii