前言
本系列文章统一围绕STM32F103C8T6最小系统开发板进行记录,如涉及其他开发板将会特别说明。
基本概念
- 主要功能
- 嵌入式领域中广泛应用, 主要通过计时、计数的方式,周期性执行某件工作,如检测、响应、控制等。
- 应用场合:输入捕获、输出波形、计时等。
- 类型
- 硬件定时器
- 由硬件资源决定,其精度主要由硬件时钟决定
- 单个硬件定时器可以扩充出多个软件定时器
- 软件定时器:由软件实现 – 循环延时
- 硬件定时器
- 工作原理:本质上是一个计数器,当计数器计满溢出时,代表着一次事件,即完成一次计时。
STM32F1x定时器
8个Timer定时器+1个系统嘀嗒定时器(SysTick)+2个看门狗定时器
-
Timer定时器
- 基本定时器:2个,TIM6/7
- 16位(计数器分辨率),只能向上计数,只能定时,没有外部IO
- 通用定时器:4个,Timer2/3/4/5
- 16位,可向上/下计数,可以定时、输出比较、输入捕捉
- 每个定时器有4个外部IO
- 高级定时器:2个,TIM1/8
- 16 位,可向上/下计数的定时器,可定时、输出比较、输入捕捉,还有三相电机互补输出信号,
- 每个定时器有8个外部IO
- 基本定时器:2个,TIM6/7
-
SysTick定时器
- ARM Cortex-M3
内核
的处理器内部包含了一个 SysTick 定时器,它是一个24 位的倒计数定时器。 - 时钟来源为处理器时钟或外部时钟。
- 考虑到MCU的资源有限,通常延时功能通过systick定时器来实现,而通用定时器更多地用于输入捕获、PWM输出等功能。
- ARM Cortex-M3
-
看门狗定时器
- 用于检测程序是否运行正常,当计时超过某个设定的数值时,将会判断程序异常,并强制复位。
时基单元
- 作用:计数,可向上计数、向下计数或者向上向下双向计数。
- 组成
- 计数器寄存器(TIMx_CNT)
- 预分频器寄存器 (TIMx_PSC)
- 自动装载寄存器 (TIMx_ARR)
- 计数模式
-
向上计数模式(0—ARR)。
- 计数器从0计数到自动加载值(自动装载寄存器中的值)。
- 重新从0开始计数并产生一个计数器溢出事件。
-
向下计数模式(ARR—0)
- 计数器从自动加载值(自动装载寄存器中的值)到0。
- 从自动加载值重新开始并且产生一个计数器向下溢出事件。
-
中央对齐模式(向上向下计数)(0—(ARR-1)—ARR—1)
- 计数器从0开始计数到自动加载值,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件,然后再从0开始重新计数。
-
定时器时钟源
SYSCLK = 72MHz
AHB = 72MHz
APB1 = AHP / 2 = 36MHz,APB1的分频系数为2
所以通用定时器的时钟为APB1 * 2 = 72MHz
定时器时钟源
定时器计时原理
定时器时钟源每tick一次,预分频器计数器值+1,直到达到预分频器的设定值,然后再tick一次后计数器归零,同时,CNT计数器值+1。
定时器计时原理
- 预分频器计一个数的时间为:
- 定时器溢出时间则为:
- 根据定时器时钟频率,选择合适的psc和arr数值进行定时器时间设置:
如TIM_CLK = 72MHz,设置psc = 1,arr = 35999,则溢出时间为1ms。