定时器
在前面调试数码管时,我们使用了delay函数进行延时,延时后更新数码管上的数字。
通过delay的延时有两个特点:
- 如果要延时比较准确,需要根据主频计算芯片机器指令执行时间,根据指令周期安排delay函数中的代码。
还要考虑中断的影响。无法灵活定时,代码安排也很麻烦,吃力不讨好。
- 使用delay,是一种硬延时,也就是常说的死等。通常我们需要的是定时,而不是死等延时。
因此,只会在一些很短的死等延时才会用delay的方式。比如某个外部芯片需要一个1us的低电平复位信号,我们就可以在代码中拉低IO,硬延时1us,再拉高IO。
定时功能在程序中基本是不可避免的。例如:
- 间隔扫描按键。
- 数码管动态刷新。
- RTOS任务调度。
- 等等
定时功能是程序的基本功能,因此芯片基本都标配了定时器,奢侈的芯片甚至配套了十几个。
程序本质是流程,是时间流,是时间线。
扩展
定时,实际也可以说是计时/计数。
拥有计时能力后,我们就可以做很多事情,为了方便我们实现功能,减少开发难度,芯片进一步将我们要实现的功能集成到定时器。
比如:
- 将IO口输入的信号做位时钟,用定时器统计IO口的脉冲数,这叫做输入计数器
- 用定时器统计IO口上的脉冲宽度,这是输入捕获
- 用定时器配套IO,输出PWM。比如输出1K方波推动蜂鸣器;比如更复杂的PWM控制电机。这是定时器PWM输出
定时器的基本功能组成
STM32的定时器框图
定时器中断
中断中不能进行太多延时
定时器的应用
计算定时, 定时功能其实就是一个闹钟。
讲清楚定时器框图
我们只配置定时1S,刷新数码管
说清楚中断不能执行太多程序。
先用调试器测试能跑到定时中断, 再详细计算定时时间。
引出系统时钟设置问题。
测试增加单独的LED灯显示