13. 定时器

在前面调试数码管时,我们使用了delay函数进行延时,延时后更新数码管上的数字。

通过delay的延时有两个特点:

  1. 如果要延时比较准确,需要根据主频计算芯片机器指令执行时间,根据指令周期安排delay函数中的代码。

    还要考虑中断的影响。无法灵活定时,代码安排也很麻烦,吃力不讨好。

  2. 使用delay,是一种硬延时,也就是常说的死等。通常我们需要的是定时,而不是死等延时。

因此,只会在一些很短的死等延时才会用delay的方式。比如某个外部芯片需要一个1us的低电平复位信号,我们就可以在代码中拉低IO,硬延时1us,再拉高IO。

定时功能在程序中基本是不可避免的。例如:

  1. 间隔扫描按键。
  2. 数码管动态刷新。
  3. RTOS任务调度。
  4. 等等

定时功能是程序的基本功能,因此芯片基本都标配了定时器,奢侈的芯片甚至配套了十几个。

程序本质是流程,是时间流,是时间线。

扩展

定时,实际也可以说是计时/计数。

拥有计时能力后,我们就可以做很多事情,为了方便我们实现功能,减少开发难度,芯片进一步将我们要实现的功能集成到定时器。

比如:

  1. 将IO口输入的信号做位时钟,用定时器统计IO口的脉冲数,这叫做输入计数器
  2. 用定时器统计IO口上的脉冲宽度,这是输入捕获
  3. 用定时器配套IO,输出PWM。比如输出1K方波推动蜂鸣器;比如更复杂的PWM控制电机。这是定时器PWM输出

定时器的基本功能组成

STM32的定时器框图

定时器中断

中断中不能进行太多延时


定时器的应用

计算定时, 定时功能其实就是一个闹钟。

讲清楚定时器框图

我们只配置定时1S,刷新数码管

说清楚中断不能执行太多程序。

先用调试器测试能跑到定时中断, 再详细计算定时时间。

引出系统时钟设置问题。

测试增加单独的LED灯显示