【嵌入式学习】嵌入式原理知识-定时器(六)

1. 时基单元

1.1 定时器简介

定时器也属于片上外设 ,具体最高频率为多少需要参考挂载的总线:

分为高级定时器 ,通用定时器 和基本定时器。

定时器内部结构图:

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

1.2 时基单元的基本结构

时基单元主要可以分为如下的五个部分:

  1. 时钟来源:经过复用器选择 主要有时钟树来源和从模式
  2. 分频器: 分频上述的时钟
  3. 计数器:每个时钟脉冲计数加1
  4. 定时周期:到达多少的时候会出现溢出
  5. 重复计数的次数:若没有此,那么每次计数器溢出就会更新,但是有了之后,需要达到重复计数器要求后才会溢出。

    计数方式:
    可参照图示:
    主要就是上计数是达到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分频就是出现两个上升沿触发事件;

以此类推

相关推荐
\光辉岁月/2 小时前
1.mybatis学习-基础
学习·mybatis
へ蟲児.2 小时前
2026三大自带完整体系的英语学习App深度测评:哪款更适合儿童启蒙?
学习
苦猿的大模型日记3 小时前
Day64|从0学习 Claude Code(十四):MCP,给 Agent 装个工具插座
学习
m4Rk_3 小时前
【论文阅读】Agent 记忆机制(82):ReasoningBank——从成功与失败经验中沉淀可复用的推理记忆
论文阅读·人工智能·学习·开源·github
旖旎夜光4 小时前
LeetCode 137 : 只出现一次的数字 II(位运算) —— 题解
c++·笔记·学习·算法·leetcode·力控
凉、介4 小时前
深入理解 ARM SCP Firmware 的 Event 与 Notification 机制
学习·scp·嵌入式·arm
minglie15 小时前
几何变换群矩阵表示与埃尔朗根纲领
学习
dadaobusi5 小时前
学习: ARM SMMU stream id
arm开发·学习
FelixZhang0285 小时前
量化求真10|回测通过以后,策略就能上场吗?
人工智能·python·深度学习·学习·机器学习·金融·lstm