1. 时基单元
1.1 定时器简介
定时器也属于片上外设 ,具体最高频率为多少需要参考挂载的总线:
分为高级定时器 ,通用定时器 和基本定时器。

定时器内部结构图:

可以将其分为如下的几个部分:

1.2 时基单元的基本结构
时基单元主要可以分为如下的五个部分:
- 时钟来源:经过复用器选择 主要有时钟树来源和从模式
- 分频器: 分频上述的时钟
- 计数器:每个时钟脉冲计数加1
- 定时周期:到达多少的时候会出现溢出
- 重复计数的次数:若没有此,那么每次计数器溢出就会更新,但是有了之后,需要达到重复计数器要求后才会溢出。

计数方式:
可参照图示:
主要就是上计数是达到ARR的时候溢出,发生更新
下计数达到0的时候更新
中心对称也是达到0的时候更新



1.3 影子寄存器
上述的预分频寄存器。自动重装载寄存器和重复计数寄存器均有影子寄存器。
也就是当我们修改对应的寄存器的时候,不会立刻生效,而是存储在影子寄存器中,当产生更新时候才会加载到活动寄存器开始生效。

作用:
如果直接改变,比如开始的时候ARR是7,后面在没有到7,但是超过3的时候将ARR改为3,此时就无论如何无法等于3,发生更新了。此时只能等待到达最大值才发生更新,这样显然不是我们想要的情况:

2. 定时器延迟函数
系统自带的定时器是通过系统滴答定时器(Systick)实现。
现在通过普通定时器实现延迟函数:
通过定时器中断,确认好1ms的更新。
然后根据这个延迟来判断延迟时间是否达到。

代码实现:
c
void App_Delay(uint32_t ms)
{
uint32_t expireTime = currentTick + ms; // 延迟结束的时间
while(currentTick < expireTime); // 等待延迟结束
}
3. 定时器输出比较
3.1 输出比较简介
定时器在不断递增计数 ,我们预先在输出比较寄存器(CCR)- Capture/Compare Register 写入一个对比值;
每当定时器计数器 CNT 的值等于 CCR 的值,就触发一次事件,这就是输出比较。
3.2 PWM
PWM- Pulse Width Modulation
脉冲宽度调制
可以通过调节占空比,等效的调节信号的输出幅度。

3.3 输出比较生成PWM
如下图所示:
通过ARR-自动重装载计数器提供周期,
通过CCR捕获比较寄存器提供高电平或低电平时间,
实现产生PWM波的功能。

3.4 输出比较的8种工作模式
输出比较功能的内部结构图如下所示:

如下共有8种 工作模式:
主要通过计数器和捕获比较寄存器的关系实现如下的效果:
- Frozen冻结- 就是默认的情况, 不会随着CCRx改变变化;
- 相等有效- 当CNT的值和CCR相等时候输出高电压;
- 相等无效- 当CNT的值和CCR相等时候输出低电压;
- 翻转- 当计数器CNT和CCR相等的时候,电平翻转;
- 强制无效- 无论CNT和CCR的值,强制输出低电平;
- 强制有效- 无论CNT和CCR的值,强制输出高电平;
常用情况:
PWM1:当CNT小于等于CCR,时候输出高电平反之为低电平;
PWM2:当CNT小于等于CCR,时候输出低电平反之为高电平;

3.5 输出比较的互补输出
若有定时器输出含有CH和CHN;
则其互补输出,也就是高低电平相反。
这个功能只有高级定时器具有。

互补输出的应用:
这个BUCK电路的SW1和SW2需要只存在一个开启,则可以通过互补输出接mos管实现。

3.6 极性选择
简单说,就是对输出信号取反,实现极性选择的功能。

4. 输出比较的应用- 呼吸灯
通过调节PWM的占空比,实现亮度的连续变化。
使用互补输出,来实现一亮一暗的效果:
对应的通道在:

5. 定时器输入捕获
5.1 输入捕获的基本原理
输入捕获主要是捕获脉冲的上升和下降沿 ,记录此时的计数器的值,后续读取即可得到对应的时间。
如图所示:
将脉冲接入CH1和CH2,此时cc1记录了上升沿对应的CNT,cc2记录了下降沿对应的CNT,此时即可得到高电平时间以及周期等相关信息。

5.2 输入捕获内部电路
通道1和2 可以交叉引用
通道3和4 可以交叉引用

可以划分为如下的部分:

5.2.1 输入滤波
主要是滤除信号中的毛刺。
其中fCK_INT:Timer Internal Clock,定时器内部主时钟
fDTS:Digital Filter Timer Sampling clock,数字滤波器采样时钟

5.2.2 边沿检测
控制检测的是上升沿还是下降沿。
5.2.3 信号选择
通过复用器选择信号的输入:
直接就是本通道 的检测值;
间接就是互补通道 的检测值;
原本要检测一个脉冲的上升沿和下降沿需要接入两个通道。
但是此时可以只接入一个通道;
本通道的上升沿-直接
接着接入下降沿-间接,此时只需要将脉冲接入一个通道即可实现,节省一个引脚。
注意要配置为互补通道:

5.2.4 分频器
就是对检测的边沿进行 汇总计算。
比如:
1分频就是每出现一个上升沿就触发事件
2分频就是出现两个上升沿触发事件;
以此类推
