STM32 CCR寄存器

 ​1. CCR寄存器在输入捕获模式下的特性

  • 只读属性​:
    当定时器通道配置为输入捕获模式(如捕获上升沿/下降沿)时,CCR寄存器硬件自动变为只读​。软件写入操作无效,只能在捕获事件发生时由硬件自动更新为当前CNT值。
  • 硬件自动装载​:
    当指定的边沿(如PA8下降沿)触发捕获时,硬件自动将当前计数器值(CNT)写入CCR寄存器,并置位中断标志位(如TIM_IT_CC1)。

⚙️ ​2. 清零机制:硬件复位CNT计数器

用户代码中通过主从模式实现了间接清零效果:

TIM_SelectInputTrigger(TIM1, TIM_TS_TI1FP1);   // 选择PA8作为触发源
TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Reset); // 复位模式:PA8下降沿复位CNT
  • 工作流程​:
    1. PA8下降沿​ → 触发硬件复位信号 → CNT计数器立即清零并重启计数。
    2. CCR1的值​:在中断中读取TIM1->CCR1时,实际是复位前CNT的值​(即信号周期)。
    3. CCR2的值​:在PA9下降沿触发时,硬件捕获当前CNT值​(即PA9与PA8的时间差)。

✅ ​关键点​:CCR寄存器存储的是捕获瞬间的CNT值,而CNT的清零由硬件自动完成,与CCR无关。


📥 ​3. 中断服务中的操作

在中断函数中,​只需读取CCR值并清除中断标志,无需操作CCR寄存器:

void TIM1_CC_IRQHandler(void) {if (TIM_GetITStatus(TIM1, TIM_IT_CC1) != RESET) {Cycle = TIM1->CCR1;  // 读取周期值(CNT复位前的值)TIM_ClearITPendingBit(TIM1, TIM_IT_CC1); // 清除中断标志}if (TIM_GetITStatus(TIM1, TIM_IT_CC2) != RESET) {Phase = TIM1->CCR2;  // 读取相位差(PA9下降沿时的CNT值)TIM_ClearITPendingBit(TIM1, TIM_IT_CC2); // 清除中断标志}
}
  • 中断标志的作用​:
    仅表示“捕获事件已发生”,清除后等待下次事件。
  • CCR值更新​:
    下一次捕获事件发生时,硬件自动覆盖CCR寄存器的值。

⚠️ ​4. 常见误区与注意事项

误区正确理解
手动写CCR1=0❌ 输入捕获模式下无效,CCR只读。
CNT复位=CCR清零❌ CNT清零由硬件完成,CCR存储的是复位前的值。
不清除中断标志❌ 导致中断持续触发,CPU被阻塞。

💎 ​总结

  • CCR清零机制​:通过TIM_SlaveMode_Reset在PA8下降沿硬件自动复位CNT,实现计数器的周期性清零。
  • CCR寄存器角色​:只读存储单元,记录捕获瞬间的CNT值(周期或相位差)。
  • 软件操作​:仅需在中断中读取CCR值 + 清除中断标志,无需操作CCR寄存器。

🔍 ​验证方法​:在调试时监控TIM1->CNTTIM1->CCR1,可观察到PA8下降沿时CNT被清零,而CCR1的值保持不变直至下次捕获。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86967.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JS-6-ES6中的let和const】深入理解ES6中的let和const:块级作用域与变量声明的新范式

在ES6(ECMAScript 2015)之前,JavaScript中只有var一种变量声明方式,这导致了许多作用域相关的问题。ES6引入了let和const两种新的变量声明方式,彻底改变了JavaScript的作用域规则。本文将深入探讨let和const的特性、优势以及它们与var的区别。…

[C语言]数据类型关键字详解

基本数据类型 关键字说明存储大小(通常)取值范围(通常)示例int声明整型变量4字节(32位系统)-2,147,483,648 到 2,147,483,647int count 100;char声明字符型变量1字节-128 到 127 或 0 到 255char grade ‘A’;float声明单精度浮点数4字节1.2e-38 到 3.4e38 (约6-7位有效数字…

黑马python(二十二)

目录: 1.Python操作Mysql基础使用 2.Python操作Mysql数据插入 3.综合案例 1.Python操作Mysql基础使用 2.Python操作Mysql数据插入 3.综合案例 代码复用 黑马python(二十一)章节的的代码,读取文件内容

课堂笔记:吴恩达的AI课(AI FOR EVERYONE)-W1 深度学习的非技术性解释

深度学习的非技术性解释 (1)示例1:以商场为主买T恤为例,价格和需求的关系怎么样? 一般来说,价格越高,需求越少 这里输入A是 价格,输出B是需求,其中的映射关系是神经元&a…

dlib检测视频中的人脸并裁剪为图片保存

环境要求 找个带有基本cv配置的虚拟环境安装上dlib依赖的人脸检测的基础环境即可,主要是: pip install boost dlib opencv-python缺的按提示安装。 demo 设置好视频路径和图像保存路径,裁剪尺寸(默认256)以及裁剪帧…

真的!ToDesk远程控制已上线原生鸿蒙系统!

2025年5月,ToDesk远程控制正式宣布完成对PC鸿蒙系统的适配,成为业界首批原生支持HarmonyOS OS的跨端远控工具。 作为国内支持上亿设备的远程控制软件,ToDesk以无缝互联、快速响应、安全无界为核心,重新定义了跨设备远程协作的界限…

Java-58 深入浅出 分布式服务 ACID 三阶段提交3PC 对比2PC

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月16日更新到: AI炼丹日志-29 - 字节…

matplotlib 绘制饼图

1、功能介绍: 使用 python 的 matplotlib 库来创建一个简单的饼图。 2、代码部分: import matplotlib.pyplot as plt# 示例数据 labels [A, B, C, D, E] # 类别标签 sizes [15, 30, 45, 5, 5] # 每个类别对应的数值(百分比&#xff09…

用Rust写平衡三进制除法器

1、除法的本质 除法的本质是减法,也就是一个大的数减去一个小的数,比如:10/2,也就是10-2-2-2-2-20,所以商5余0,10/3,也就是10-3-3-31,所以商3余1,这也是很常见的方法,但如…

深入探索WordPress Multisite:构建与管理多站点网络

随着互联网的快速发展,越来越多的企业和个人开始使用内容管理系统来搭建和维护自己的网站。WordPress作为全球最受欢迎的CMS之一,因其强大的功能和灵活性,成为了许多网站管理员的首选平台。而在一些特定需求的场景下,WordPress Mu…

.Net Core 获取文件路径

在 .NET Core 中获取文件路径的方法取决于你要获取的文件的位置和上下文。这里将介绍几种常见的方式来获取文件路径。 1. 获取当前工作目录 你可以使用 Directory.GetCurrentDirectory() 方法来获取当前工作目录的路径: using System; using System.IO; class P…

顺序表整理和单项链表01 day20

二:各个主要函数 一:CreatSeqList SeqList *CreateSeqList(int len); -------------------------------------------------------------/*** brief Create a Seq List object 创建一个顺序表** param n 是顺序表的大小* return SeqList* 指向顺序表的…

电商导购app平台的缓存策略与性能优化方案:架构师的实践经验

电商导购app平台的缓存策略与性能优化方案:架构师的实践经验 大家好,我是阿可,微赚淘客系统及省赚客APP创始人,是个冬天不穿秋裤,天冷也要风度的程序猿! 缓存策略的重要性 在电商导购APP平台中&#xff…

学习C++、QT---12(C++的继承、权限对继承的影响)

每日一言 你的价值,由你自己定义,无需他人评判。 C的继承 直接上案例 继承是什么意思呢,就是我本来这个类我叫他基类、我希望创建我的下一个类有我这之前的类的属性和方法,那么我如果不用继承的话,就需要多写很多一样…

(6)Wireshark的TCP包详解-上篇

1.简介 上一篇中通过介绍和讲解,应该知道要讲解和介绍的内容在哪里了吧,没错就是介绍OSI七层模型的传输层。因为只有它建立主机端到端的连接如:TCP、UDP。 2.TCP是什么? tcp是工作在传输层,也就是网络层上一层的协议。 它是面…

太极八卦罗盘JS绘制

LeaferJS 是一款好用的 Canvas 引擎,通过LeaferJS绘制罗盘案例. https://www.leaferjs.com/ui/guide/ 示例 太极八卦罗盘 直接上代码 <template><div id"LuoPan"></div><div id"info"><p>屏幕宽度: {{ screenWidth }}px<…

Python开源项目月排行 2025年5月

#2025年5月2025年6月1日1scrapy一个开源的、基于 Python 的高性能网络爬虫和数据抓取框架。Scrapy 项目最初由伦敦的网络聚合和电子商务公司 Mydeco 的员工以及乌拉圭蒙得维的亚的网络咨询公司 Insophia 的开发者共同创建。目前&#xff0c;Scrapy 由 Zyte&#xff08;原名 Scr…

Debezium日常分享系列之:在 Kubernetes 中使用 Debezium 的 CDC

Debezium日常分享系列之&#xff1a;在 Kubernetes 中使用 Debezium 的 CDC 架构源数据库创建数据库凭证密钥Debezium 自定义镜像构建并推送镜像Kafka Connect 集群Debezium Postgres 连接器Debezium 创建的 Kafka 主题 Debezium 是一个开源的分布式变更数据捕获 (CDC) 平台。D…

tf serving和torch serve哪个耗时更低

TensorFlow Serving&#xff08;TF Serving&#xff09;和 TorchServe 的耗时对比需结合具体场景&#xff08;如硬件配置、模型类型、优化策略等&#xff09;&#xff0c;以下从多维度分析两者的性能差异及适用场景。 ⏱️ 1. 标准性能基准对比 根据公开压测数据&#xff08;…

Java面试宝典:基础六

133. 二进制小数点位移 答案:C(乘以2) 解析: 原理:二进制小数点右移一位等价于乘以 (2^1)(左移则除以 (2))。示例: 101.1(5.5)右移 → 1011(11)验证:(5.5 \times 2 = 11)说明:位移前:1 0 1 . 1 (值 = 2+2⁰+2⁻ = 5.5) 位移后:1 0 1 1 . (值 = 2+2+2⁰ =…