news 2026/9/30 2:48:18

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【嵌入式学习】嵌入式原理知识-定时器(六)

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的更新。
然后根据这个延迟来判断延迟时间是否达到。

代码实现:

voidApp_Delay(uint32_tms){uint32_texpireTime=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分频就是出现两个上升沿触发事件;
以此类推

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 2:47:43

跨境电商必备:批量图片翻译+视频字幕+智能抠图一站式搞定

跨境电商必备&#xff1a;批量图片翻译视频字幕智能抠图一站式搞定一、问题引入&#xff1a;跨境卖家的日常困境做跨境电商&#xff0c;尤其是亚马逊、Shopee、TikTok Shop的卖家&#xff0c;每天都会遇到这样的场景&#xff1a;新选品上架&#xff0c;采购了一批产品&#xff…

作者头像 李华
网站建设 2026/9/30 2:47:12

Python根据货单自动分类海关编码

根据货单自动分类海关编码的实现方案以下提供一套可运行的代码实现&#xff0c;核心思路是&#xff1a;以HS编码描述库为基准&#xff0c;通过文本相似度匹配将货单中的商品描述映射到对应的海关编码&#xff0c;并输出置信度与候选结果供人工复核。方案架构货单条目&#xff0…

作者头像 李华
网站建设 2026/9/30 2:47:12

Python实现报关商品与海关编码是否匹配

这用于审核报关单商品与海关编码是否匹配&#xff0c;并给出修改建议。它通过名称相似度、关键词命中率和申报要素完整度三个维度打分&#xff0c;输出匹配结论和候选编码。python#!/usr/bin/env python# -*- coding: utf-8 -*-"""报关单商品 —— 海关编码&…

作者头像 李华
网站建设 2026/9/30 2:46:40

计算机毕业设计之基于uniapp的《一麓有礼》文创小程序

随着新经济的需求和新技术的发展&#xff0c;特别是网络技术的发展&#xff0c;如果可以建立起《一麓有礼》文创小程序&#xff0c;可以改变传统线下管理方式&#xff0c;在过去的时代里都使用传统的方式实行&#xff0c;既花费了时间&#xff0c;又浪费了精力。在信息如此发达…

作者头像 李华