1.1 软件定时器原理
1.2 定时器定时原理
1.3 STM32定时器分类
定时器种类 | 位数 | 计数器模式 | 产生DMA请求 | 捕获/比较通道 | 互补输出 | 特殊应用场景 |
高级定时器 (TIM1,TIM8) |
16 |
向上,向下 向上/向下 |
可以 | 4 | 有 | 带可编程死区互补输出 |
通用定时器 (TIM2,TIM5) |
32 |
向上,向下 向上/向下 |
可以 | 4 | 没有 |
定时计数、PWM输出、 输入捕获、输出比较 |
通用定时器 (TIM3,TIM4) |
16 |
向上,向下 向上/向下 |
可以 | 4 | 没有 |
定时计数、PWM输出、 输入捕获、输出比较 |
通用定时器 (TIM9~TIM14) |
16 |
向上 |
没有 | 2 | 没有 |
定时计数、PWM输出、 输入捕获、输出比较 |
基本定时器 (TIM6,TIM7) |
16 |
向上,向下 向上/向下 |
可以 | 0 | 没有 | 主要应用于驱动DAC |
各种定时器的结构框图
1、基本定时器
2、通用定时器
3、高级定时器
SysTick系统定时器
一、SysTick概念
1. 概念
SysTick 是 Cortex-M 内核中的一个系统定时器,经常被用作系统中断控制器的基础,或者作为操作系统的时间片轮转机制的基准。
SysTick可以取系统时钟(72M),还可以把系统时钟8分频后(9M)获取。
2. 工作过程
SysTick 会定时产生中断请求,当计数器达到设定值时,SysTick会触发一个SysTick定时器中断,向NVIC发出中断请求。
NVIC负责中断的优先级管理、中断处理函数的调用和中断嵌套等工作 。 当SysTick定时器中断发生时,NVIC会对中断进行处理。
SysTick 和NVIC组成了典型的生产者-消费者关系。
二、SysTick 使用
1.初始化 SysTick 寄存器
在使用 SysTick 之前,需要通过配置 SysTick 寄存器来初始化它,包括设置:
- 计数器初值、
- 选择时钟源
- 使能 SysTick 定时器。
2.计数器开始计数
SysTick 定时器被使能后,计数器就开始从初始值开始递减。
3.生成中断请求
当 SysTick 定时器的计数器值减为零时,会触发一个 SysTick 中断请求,向 NVIC 发送中断请求信号。
4.中断处理
SysTick 中断请求被 NVIC 捕获,并根据其优先级和其他中断请求的优先级进行调度。如果 SysTick 中断被选为最高优先级的中断,系统会立即响应并执行 SysTick 中断服务程序。
5.中断服务程序执行
SysTick 中断服务程序会执行用户定义的操作,例如更新系统时间、处理定时任务或执行周期性的操作。
6.重复周期
一旦 SysTick 中断服务程序执行完毕,SysTick 定时器会自动重置并重新开始计数,进入下一个周期,继续循环上述过程。
三、SysTick寄存器
1.SysTick 控制和状态寄存器 (CTRL)
用于配置 SysTick 定时器的工作模式、使能定时器和中断,并提供定时器当前状态的查询功能。具体的控制位包括:
2.SysTick 重装载值寄存器 (LOAD)
用于设置 SysTick 定时器的重装载值,即定时器计数器的初始值。当计数器减到零时,会触发中断请求,并根据加载寄存器的值重新装载计数器。
3.SysTick 当前值寄存器 (VAL)
用于读取或写入当前 SysTick 定时器的计数器值。
- 在读取该寄存器时,会返回当前计数器的剩余值;
- 在写入该寄存器时,可以清零计数器的值。
4.SysTick 校准值寄存器 (CALIB):
用于读取 SysTick 定时器的校准值,包括重装载值 (TENMS) 和时钟源的准确度 (SKEW、NOREF)。这些值用于校准定时器的溢出时间,以保证其在不同系统上的准确性。