一、定时器有哪些?
定时器分为三大类:基本定时器、通用定时器和高级定时器。
二、每个定时器的功能以及使用场景
1. 基本定时器(Basic Timers):
功能: 基本定时器具有较为简单的功能,通常用于基本的计时和触发任务。
用途场景:它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它
们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。
2. 通用定时器(General-Purpose Timers):
功能: 通用定时器提供了更多的功能和配置选项,包括PWM生成、脉冲计数、输入捕获、输出比较等功能。
用途场景: 适用于需要更复杂的定时功能的应用,如PWM控制、频率测量、脉冲计数等。测量输入信号的脉冲长度(输入捕获)或者 产生输出波形 ( 输出比较 和 PWM )等。
3. 高级定时器(Advanced Timers):
功能: 高级定时器除了通用定时器的功能外,还支持更高级的特性,如相位锁定回路(PLL)、编码器接口、三角波生成等。
用途场景: 适用于需要更高级、复杂计时功能的应用,例如音频处理、电机控制、编码器接口等。重复计数器、死区生成、互补输出、刹车输入等功能
三、定时器功能详表
以STM32F103系列为例,具体开发板请查看开发手册。
类别 | 定时器 | 总线 | 位数 | 计数方向 | 预分频系数 | 是否可以产生DMA | 捕获/比较通道 | 互补输出 |
---|---|---|---|---|---|---|---|---|
基本定时器 | TIM6 / TIM7 | APB2 | 16位 | 向上 | 1~65535 | 可以 | 0 | 无 |
通用定时器 | TIM2 /TIM3 /TIM4/ TIM5 | APB1 | 16位 | 向上/向下/中央对齐 | 1~65535 | 可以 | 4 | 无 |
高级定时器 | TIM1 /TIM8 | APB1 | 16位 | 向上/向下/中央对齐 | 1~65535 | 可以 | 4 | 有 |
四、定时器知识点
1.影子寄存器:
简介以及功能:
实际功能上的值都是参考的影子寄存器而不是原寄存器,比如预分频寄存器,这个分频数看的是预分频寄存器影子寄存器上的,而不是预分频寄存器上的。又比如重载值寄存器,那个重载值是看的影子寄存器上的值,而不是原寄存器上的值。影子寄存器主要有一个缓冲的作用。
2. 寄存器缓冲作用:
未设置缓冲:在原寄存器上用户设定的值->影子寄存器->work。
设置缓冲: 在原寄存器上用户设定的值->等待更新事件U发生->影子寄存器->work。
下面举个例子来更加通俗的理解缓冲作用!!
如:(1)未设置缓冲作用情况:
设置LED灯1s亮,1s灭。假如定时器的计数方式为向上计数,且ARR重载值为99时正好定时为1s。当CNT=ARR值时定时时间1s到,灯亮。我们不需要重新修改ARR寄存器的值,继续重装载为99,即可继续定时1s,灯灭。这时就算不设置缓冲作用也没问题。
设置为LED灯1s亮,2s灭,不设置缓冲作用就会出现误差。如当CNT=ARR值时定时时间1s到,灯亮,但是后续要定时2s,所以要修改ARR寄存器的值为199,修改后立刻生效,开始计时。但是操作寄存器这个过程是需要时间的,即使时间很短,也是存在误差的。这种情况下所以就需要设置缓冲。
(2)设置缓冲作用的情况:
如果设置了缓冲作用后,我们就可以提前将199写入ARR寄存器中,因为有缓冲作用,并不会立刻生效。会等到更新时间U发生后生效,更新时间u是在上一段定时时间到之后产生。
寄存器缓冲作用通过控制寄存器位7来设置。
注意:具体实现看下篇文章!!!