当前位置: 首页 > news >正文

STM32 高级定时器(2)

重点内容
输入捕获和输出比较功能

一、输入捕获功能图:
输入捕获功能图

输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用的有测量输
入信号的脉宽和测量 PWM 输入信号的频率和占空比这两种。输入捕获的大概的原理就是,当捕获到信号的跳变沿的时候,把计数器 CNT 的值锁存到捕获寄存器 CCR 中,把前后两次捕获到的 CCR 寄存器中的值相减,就可以算出脉宽或零死角玩转 者频率。如果捕获的脉宽的时间长度超过你的捕获定时器的周期,就会发生溢出,这个我们需要做额外的处理。

1、输入通道
需要被测量的信号从定时器的外部引脚 TIMx_CH1/2/3/4 进入,通常叫 TI1/2/3/4

2、输入滤波器和边沿检测器
输入的信号存在高频干扰的时候,我们需要对输入信号进行滤波,即进行重新采样,采样频率 fSAMPLE可以由 fCK_INT和 fDTS分频后的时钟提供,其中是 fCK_INT内部时钟, fDTS 是 fCK_INT 经过分频后得到的频率
边沿检测器用来设置信号在捕获的时候是什么边沿有效,可以是上升沿,下降沿,或者是双边沿

3、捕获通道
输入通道是用来输入信号的,捕获通道是用来捕获输入信号的通道,一个输入通道的信号可以同时输入给两个捕获通道。
当发生捕获的时候,计数器 CNT 的值就会被锁存到捕获寄存器中。

4、预分频器
ICx 的输出信号会经过一个预分频器,用于决定发生多少个事件时进行一次捕获。具
体的由寄存器 CCMRx 的位 ICxPSC 配置,如果希望捕获信号的每一个边沿,则不分频。

5、捕获寄存器
经过预分频器的信号 ICxPS 是最终被捕获的信号,当发生捕获时(第一次),计数器
CNT 的值会被锁存到捕获寄存器 CCR 中,还会产生 CCxI 中断,相应的中断位 CCxIF(在
SR寄存器中)会被置位,通过软件或者读取 CCR中的值可以将 CCxIF清 0。如果发生第二
次捕获(即重复捕获: CCR 寄存器中已捕获到计数器值且 CCxIF 标志已置 1),则捕获溢
出标志位 CCxOF(在 SR 寄存器中)会被置位, CCxOF 只能通过软件清零。

信号的走势:****TIx(输入信号)->ICx->ICxPS(最终被捕获的信号)

二、输出比较
输出比较就是通过定时器的外部引脚对外输出控制信号
输出比较的功能图:
这里写图片描述

1、比较寄存器:
**当计数器 CNT 的值跟比较寄存器 CCR 的值相等的时候,输出参考信号 OCxREF 的信
号的极性就会改变**,其中 OCxREF=1(高电平)称之为有效电平, OCxREF=0(低电平)
称之为无效电平,并且会产生比较中断 CCxI,相应的标志位 CCxIF(SR 寄存器中) 会置
位。然后 OCxREF 再经过一系列的控制之后就成为真正的输出信号 OCx/OCxN。

2、死区发生器
在输出比较的输出控制中,参考信号 OCxREF 在经过死区发生器之后会产生两路带死
区的互补信号 OCx_DT 和 OCxN_DT(通道 1~3 才有互补信号,通道 4 没有,其余跟通道
1~3 一样),这两路带死区的互补信号然后就进入输出控制电路,如果没有加入死区控制,
那么进入输出控制电路的信号就直接是 OCxREF。

3、输出控制
进入输出控制电路的信号会被分成两路,一路是原始信号,一路是被反向的信号,具
体的由寄存器 CCER 的位 CCxP 和 CCxNP 控制。经过极性选择的信号是否由 OCx 引脚输出
到外部引脚 CHx/CHxN 则由寄存器 CCER 的位 CxE/CxNE 配置

4、输出引脚:
输出比较的输出信号最终是通过定时器的外部 IO 来输出的,分别为 CH1/2/3/4,其中
前面三个通道还有互补的输出通道 CH1/2/3N。更加详细的 IO 说明还请查阅相关的数据手
册。

相关文章:

  • C语言指针基础
  • 指针与二维数组
  • 单链表的学习
  • 单链表的排序+手机通讯录源码
  • QT模式对话框
  • Qlable显示文本和图片
  • 工具按钮QToolButton
  • 组合框
  • 单行文本框+按钮实现用户登录
  • 勾选复选框后执行某一个操作
  • 点击按钮显示hello world
  • 文件对话框---做一个简单的文本编译器(1)
  • 系统调用与用户接口API
  • 完美解决QT+VS2013中文显示乱码
  • 字符串,QT字符串类,c++字符串类之间的转换
  • Git 使用集
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java 内存分配及垃圾回收机制初探
  • Linux gpio口使用方法
  • maven工程打包jar以及java jar命令的classpath使用
  • PHP CLI应用的调试原理
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 后端_MYSQL
  • 开发基于以太坊智能合约的DApp
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 事件委托的小应用
  • Java数据解析之JSON
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • # Maven错误Error executing Maven
  • #etcd#安装时出错
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $(selector).each()和$.each()的区别
  • (pytorch进阶之路)扩散概率模型
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)ssm高校实验室 毕业设计 800008
  • (简单) HDU 2612 Find a way,BFS。
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)程序员疫苗:代码注入
  • ... 是什么 ?... 有什么用处?
  • .NET DataGridView数据绑定说明
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET处理HTTP请求
  • .NET框架
  • /usr/bin/env: node: No such file or directory
  • @Query中countQuery的介绍
  • @Validated和@Valid校验参数区别
  • [2016.7.Test1] T1 三进制异或
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [Bada开发]初步入口函数介绍
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [C/C++]数据结构 堆的详解