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

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分频就是出现两个上升沿触发事件;

以此类推

相关推荐
坤坤子吖1 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
蒸蒸yyyyzwd3 小时前
后端相关学习笔记。
笔记·学习
旖旎夜光4 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
橙橙笔记6 小时前
QT的学习第四部分
linux·qt·学习·音视频
叼烟扛炮6 小时前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习
在猴站学算法6 小时前
(《统计学习方法》(第2版) 李航)第2章 感知机算法
学习·算法·机器学习·统计学习
旖旎夜光7 小时前
【C++ 基础入门】C++ 继承(上):概念、切片、隐藏、默认成员函数与友元
c++·笔记·学习
Godspeed Zhao7 小时前
从零开始学AI24——无监督学习之K均值
学习·机器学习
叼烟扛炮7 小时前
[LangChain] 学习笔记(05):提示词模板(Prompt)与少样本注入(Few-Shot)实战
linux·人工智能·笔记·学习·langchain·prompt
La Pulga20 小时前
【FreeRTOS源码学习笔记】任务延时列表
笔记·mcu·学习·嵌入式·freertos·实时操作系统