STM32的TIMx中Prescaler和ClockDivision的区别

        Prescaler预分频,以笔者目前的学习程度来说,这个参数,一般来说是对主时钟进行分频后的计数器时钟。这个预分频后的时钟主要是用于的计数的。

        这个主时钟,对于时基单元来说可以是内部时钟,也可以是外部时钟。一般来说我们的内部时钟是72MHZ的,经过预分频比如    Prescaler = 72-1;那么现在的计数时钟是1MHZ。

        对于外部时钟来说,首先这个外部时钟是通过GPIO口输入来作为时基单元的主时钟的,那么这个时候设置的PSC参数就是对外部时钟分频,举个例子:比如我们把对射式光耦的触发频率作为主时钟频率,显然这个时钟是一个不稳定的偶发性时钟,完全取决于它的光耦触发频率。然后呢我们再设置时基单元的PSC = 2-1;那么现在的时钟频率就是feq_CK_CNT = 光耦触发频率 / (2-1)+1; 相当于光耦触发两次,计数器就会加1.

        那么对于CLockDivision,这个主要是对定时器的主时钟进行分频主要用于滤波,一般来说这个时钟就是内部时钟72MHZ,所以定时器滤波的采样时钟(目前笔者认为是针对外部触发或者输入捕获的)可以直接是这个主时钟频率72MHZ也可以是分频后的频率比如2分频是36MHZ,这个分频后的频率写为fDTS。

        举个例子,假设主时钟频率是 72MHz,CKD 设置为分频因子 2,那么 fDTS 的频率就是 36MHz。此时,如果数字滤波器使用这个 fDTS 作为采样时钟,每个采样周期的时间是 1/36MHz≈27.78ns。如果设置滤波器的采样次数为 4 次,那么有效的滤波时间就是 4*27.78≈111ns,即只有信号稳定超过这个时间才会被确认。如果 CKD 设置为分频因子 4,fDTS 为 18MHz,采样周期为 55.56ns,四次采样就是 222ns,这样滤波时间更长,可以滤除更宽的脉冲噪声,但信号变化的检测会有更大的延迟。

STM32 定时器的外部时钟输入(如 ETR 引脚)最大频率为 APB 时钟的 1/4。若 APB 时钟为 72MHz,则外部输入信号最高为 18MHz

看一下手册上相关的部分的说明:

其实这个图笔者看不太懂,如果这个tDTS代表频率的话好像和上文的陈述相反的,如果tDTS代表的是采样时间的话那确实是正确的,比如10:代表4分频,4分频后的采样时间是不分频的4倍。

这个主要是针对ETR设置的,具体操作库函数是:

        TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, 
   uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);第二个参数是PSC的设置联系上下文,这个参数我们设置为2即TIM_ExtTRGPSC_DIV2,那代表光耦工作两次计数器加1.

        这个最后一项的参数就是寄存器ETF的相关设置,设置的就是外部触发滤波的方式共16种,这里说明一下这个框图里的描述“它记录到N个事件后会产生一个输出的跳变”,这里的N个事件指代的是什么意思?一开始笔者把它和PSC能混了,以为这个事件是指光耦的跳变电平信号,N个事件就是指N个跳变电平信号。其实不然,如果触发电平是上升沿,那么N个事件就是说在上升沿往后的N个采样周期内采样到的电平都是高电平,同理如果触发电平是下降沿,那么N个事件就是说在下降沿往后的N个采样周期内采样到的电平都是低电平。

        0000的采样频率是fDTS,这个是分频后的频率。

        0001的采用频率是fCK_INT这个频率应该是内部时钟的频率,一般来说是72MHZ

       0100的采样频率是fDTS/2这个是分频后的频率再分频,它的采样频率更低了。这个fDTS笔者认为应该是在时基单元的结构体中设置了。

上图的两个PSC都可以对ETR的输入时钟分频,但是建议用时基单元里的PSC预分频,外部时钟函数配置的预分频,它的第一个触发信号就会使计数器加1(4分频也是如此),但是后续的还是按照分频倍数触发的。时基单元设置的PSC就不会有这个问题。 具体原因不清楚。


对于输入信号的处理,区别分辩不同场景输入信号的处理方式(下文来着deepseek)

一、功能对比

功能模块ETR 外部触发通道定时器输入通道(CH1-CH4)外部中断(EXTI)
核心用途外部时钟同步或触发定时器操作输入捕获(频率、脉宽测量)、PWM 输入快速响应外部电平 / 边沿变化
信号处理能力支持高频信号(最高 APB/4)支持高频信号(受定时器时钟限制)低频信号(依赖中断响应速度)
硬件资源定时器专用引脚(如 TIMx_ETR)定时器复用引脚(TIMx_CH1~CH4)任意 GPIO(需配置为 EXTI)
信号滤波可配置数字滤波器(基于 tDTS)可配置数字滤波器(基于 tDTS)无硬件滤波,依赖软件去抖
分频 / 预分频支持外部时钟预分频(ETRPSC)支持输入捕获分频(ICPSC)无分频,直接响应边沿
触发事件类型上升沿、下降沿、双边沿上升沿、下降沿、双边沿上升沿、下降沿、双边沿
中断 / DMA 支持支持触发中断或 DMA 请求支持输入捕获中断或 DMA仅支持中断

二、应用场景对比

1. ETR 外部触发通道

  • 适用场景
    • 高频外部时钟输入(如外部晶振、高速脉冲计数)。
    • 定时器级联(主从模式,同步多个定时器)。
    • 精确触发 ADC/DAC 等外设(通过定时器触发输出)。
  • 示例
    使用 ETR 引脚接收 18MHz 外部时钟,驱动定时器计数(PSC=0),实现高精度计时。

2. 定时器输入通道(CH1-CH4)

  • 适用场景
    • PWM 输入模式测量占空比和频率(如电机控制)。
    • 编码器接口(正交编码信号解码)。
    • 输入捕获测量脉冲宽度(超声波测距、红外通信)。
  • 示例
    配置 TIMx_CH1 为输入捕获模式,测量 10kHz PWM 信号的上升沿和下降沿时间差,计算占空比。

3. 外部中断(EXTI)

  • 适用场景
    • 按键检测(低频率、非精确时序需求)。
    • 快速响应外部事件(如紧急停止信号)。
    • 简单电平状态监控(如传感器触发)。
  • 示例
    配置 EXTI13(连接按键 GPIO)为下降沿触发,检测按键按下事件并唤醒 MCU。

    

三、关键差异总结

  1. 信号处理能力

    • ETR:专为高频信号设计,支持外部时钟输入和复杂触发逻辑。
    • 定时器输入通道:适合中高频信号的时间参数测量(如脉宽、频率)。
    • EXTI:仅适合低频事件响应,无法处理高频或精确时序需求。
  2. 硬件集成度

    • ETR / 定时器通道:与定时器深度集成,支持滤波、分频等硬件预处理。
    • EXTI:独立于定时器,依赖软件处理信号抖动和事件响应。
  3. 中断响应速度

    • ETR / 定时器通道:通过硬件自动记录时间戳,中断延迟对测量精度无影响。
    • EXTI:中断延迟(通常 1~2μs)直接影响事件响应实时性。

四、替代性分析

1. 何时可以互相替代?

  • 低频事件检测(如按键检测):
    EXTI 和定时器输入通道均可实现,但 EXTI 更节省资源。
  • 边沿触发计数
    ETR 和输入通道均可实现,但 ETR 适合高频,输入通道适合带时间戳的计数。

2. 何时不可替代?

  • 高频信号处理(>100kHz):必须使用 ETR 或定时器输入通道。
  • 精确时间测量(如超声波测距):必须使用定时器输入捕获。
  • 硬件级信号同步(如 ADC 触发):必须使用 ETR 或定时器触发输出。

5、配置建议

  1. 高频信号(>1MHz)

    • 首选 ETR 外部时钟模式,配合预分频器(ETRPSC)降低频率至 APB/4 以内。
    • 例:144MHz 信号 → 外部分频 8 倍 → 18MHz → ETR 输入。
    • 这个其实外部搞一个分频功能的芯片,把144MHZ的频率降低到18MHZ再接入单片机
  2. 中频信号(10kHz~1MHz)

    • 使用定时器输入捕获通道,开启数字滤波(ICF)抗噪声。
    • 例:测量 100kHz PWM 占空比,配置 ICPSC 分频和双边沿捕获。
  3. 低频事件(<10kHz)

    • 使用 EXTI,配合软件去抖(如定时器轮询或二次检测)。
    • 例:检测按键按下,EXTI 触发中断后启动防抖延时。


然后对这个滤波器笔者自己的一些猜想和看法,首先由DEEPSEEK指出,高频信号适用的是ETR端口,但是ETR端口最大采样频率是18MHZ,为什么会这样呢?

从滤波逻辑来说,72M的每个周期都用于检测信号的话最大也只能能检测72MHZ的外源波形 ,如果我们极端点外源信号是144MHZ,那么可见的无论你怎么挑选检测周期,72M的每个周期内必然检测到边沿信号,一旦检测到边沿跳变信号,信号就会被滤波器认为不稳定而过滤掉,因此它就不会输出任何信号。所以不同频率的信号要采用合适的频率滤波。

(笔者觉得滤波功能起码包括三个阶段,开始滤波,检测信号,结束滤波,三部分最少要三个周期  。如果加上等待周期什么的,因此72MHZ的主频只能检测18MHZ的信号是可以理解的,因为极限也就24MHZ。)这是根据I2C,UART,SPI通讯逻辑的时序联想,没有其它的依据额。

         

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

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

相关文章

前端性能指标及优化策略——从加载、渲染和交互阶段分别解读详解并以Webpack+Vue项目为例进行解读

按照加载阶段、渲染阶段和交互阶段三个维度进行系统性阐述&#xff1a; 在现代 Web 开发中&#xff0c;性能不再是锦上添花&#xff0c;而是决定用户体验与业务成败的关键因素。为了全面监控与优化网页性能&#xff0c;我们可以将性能指标划分为加载阶段、渲染阶段、和交互阶段…

MySQL——1、数据库基础

数据库基础 1、安装MySQL2、什么是数据库3、数据库使用案例4、MySQL架构与SQL分类5、存储引擎 1、安装MySQL 1、更新软件包列表 sudo apt update2、查看MySQL安装包 apt list | grep mysql-server3、安装MySQL # 默认安装最新版 sudo apt install -y mysql-server4、启动My…

ET MailBoxComponent类(实体) 分析

MailBoxComponent 作用是&#xff0c;用来接收Actor消息&#xff0c;处理Actor消息。这个没有存储能&#xff0c;收到消息后立即就处理了。ParentInstanceId 是MailBox所在的实体InstanceIdMailBoxType MailBox类型MailBoxInvoker 分发消息的包装Add 方法&#xff0c;看名字是…

Weblogic SSRF漏洞复现(CVE-2014-4210)【vulhub靶场】

漏洞概述&#xff1a; Weblogic中存在一个SSRF漏洞&#xff0c;利用该漏洞可以发送任意HTTP请求&#xff0c;进而攻击内网中redis、fastcgi等脆弱组件。 漏洞形成原因&#xff1a; WebLogic Server 的 UDDI 组件&#xff08;uddiexplorer.war&#xff09;中的 SearchPublicR…

js应用opencv

思路&#xff1a; 第一步&#xff1a;直方图 第二步&#xff1a;获得直方图的波峰 第三步&#xff1a;波峰胜负10&#xff0c;高于或低于变红色 1.引用import cv from ‘techstark/opencv-js’; 2.vue代码 <div class"historyLeft2"><div style"relat…

用Python代码绘制动态3D爱心效果

引言 介绍Python在创意编程中的应用&#xff0c;特别是如何通过简单的代码实现视觉上的美感。引出本文将分享的爱心代码&#xff0c;并简要说明其实现原理。 爱心代码的基本实现 展示一个简单的Python代码示例&#xff0c;使用字符画的方式在控制台中绘制一个爱心图案。 pr…

使用Python开发经典俄罗斯方块游戏

使用Python开发经典俄罗斯方块游戏 在这篇教程中&#xff0c;我们将学习如何使用Python和Pygame库开发一个经典的俄罗斯方块游戏。这个项目将帮助你理解游戏开发的基本概念&#xff0c;包括图形界面、用户输入处理、碰撞检测等重要内容。 项目概述 我们将实现以下功能&…

兼顾长、短视频任务的无人机具身理解!AirVista-II:面向动态场景语义理解的无人机具身智能体系统

作者&#xff1a;Fei Lin 1 ^{1} 1, Yonglin Tian 2 ^{2} 2, Tengchao Zhang 1 ^{1} 1, Jun Huang 1 ^{1} 1, Sangtian Guan 1 ^{1} 1, and Fei-Yue Wang 2 , 1 ^{2,1} 2,1单位&#xff1a; 1 ^{1} 1澳门科技大学创新工程学院工程科学系&#xff0c; 2 ^{2} 2中科院自动化研究所…

【蓝桥杯省赛真题49】python偶数 第十五届蓝桥杯青少组Python编程省赛真题解析

python偶数 第十五届蓝桥杯青少组python比赛省赛真题详细解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解

鸿蒙(HarmonyOS)应用开发入门教程

目录 第一章:鸿蒙系统简介 1.1 什么是鸿蒙系统? 1.2 鸿蒙系统架构 第二章:开发环境搭建 2.1 安装DevEco Studio 步骤1:下载与安装 步骤2:首次配置 步骤3:设备准备 2.2 创建第一个项目 第三章:鸿蒙应用开发基础 3.1 核心概念:Ability与AbilitySlice 示例代码…

VM中 ubuntu 网卡不显示

1.添加网卡配置 #sudo nano /etc/netplan/01-netcfg.yaml network:version: 2renderer: networkdethernets:ens33:dhcp4: trueens37:dhcp4: trueens38:dhcp4: true#保存后 sudo netplan apply2.查看网络状态 sudo systemctl start systemd-networkd sudo systemctl status sy…

阿克曼-幻宇机器人系列教程3- 机器人交互实践(Message)

上一篇文章介绍了如何通过topic操作命令实现与机器人的交互&#xff0c;本篇我们介绍如何通过Message&#xff08;即topic的下一级&#xff09;实现与机器人的交互。 和topic一样&#xff0c;首先在一个终端通过ssh命令登录机器人、启动机器人&#xff0c;然后打开另外一个终端…

Python 调试扩展版本兼容问题解决纪实

在 Python 开发中&#xff0c;调试工具的正常使用对效率至关重要。近期在公司项目中&#xff0c;便遇到了 Python 调试扩展与版本不兼容的问题。公司 ERP 服务器采用 Ubuntu 18.04 系统&#xff0c;其标配 Python 版本为 3.6&#xff0c;而常用的 Python Debugger 扩展对版本有…

React 第四十二节 Router 中useLoaderData的用途详解

一、前言 useLoaderData&#xff0c;用于在组件中获取路由预加载的数据。它通常与路由配置中的 loader 函数配合使用&#xff0c;用于在页面渲染前异步获取数据&#xff08;如 API 请求&#xff09;&#xff0c;并将数据直接注入组件&#xff0c;从而简化数据流管理。 二、us…

Linux——mysql主从复制与读写分离

目录 一&#xff0c;理解什么是mysql主从复制 1&#xff0c;mysql支持的复制类型 2&#xff0c;mysql主从复制的工作流程 二&#xff0c;配置mysql主从复制 三&#xff0c;配置mysql主主复制 四&#xff0c;mysql读写分离 1&#xff0c;了解什么是mysql读写分离 2&…

MongoDB数据库深度解析:架构、特性与应用场景

在现代应用程序开发中&#xff0c;数据存储技术的选择至关重要。在众多的数据库管理系统中&#xff0c;MongoDB以其灵活性和强大的功能迅速崛起&#xff0c;成为NoSQL数据库中的佼佼者。本文将深入解析MongoDB的架构、核心特性、性能优化及其在实际应用中的最佳实践&#xff0c…

3D曲面上的TSP问题(一):曲面上点集距离求解

3D曲面上&#xff0c;两点的距离求解不能采用欧式距离&#xff0c;而需要计算测地线距离。 代码使用CGAL 5.6.2 OpenCV 4.11.0 版本实现 #include "cgal_utils.h" #include <CGAL/AABB_tree.h> #include <CGAL/AABB_traits.h> #include <CGAL/AABB_…

【歌曲结构】2:小节与歌曲结构信息整合

歌曲小节与结构信息整合 我将为您整合小节信息与歌曲结构,创建一个更加详细的JSON数据结构。 处理方法 将小节时间与歌曲结构段落进行匹配为每个小节添加所属段落信息为小节添加格式化的时间戳为小节添加对应时间范围内的歌词{"song_title": "财神庙前许三亿…

C语言:深入理解指针(3)

目录 一、数组名的理解 二、用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组模拟二维数组 八、结语 一、数组名的理解 数组名其实就是首元素的地址 int arr[3] {1,2,3}; printf("arr :%p\n" ,arr); printf(…

Spring MVC 接口的访问方法如何设置

RequestMapping 是 Spring 框架中用于映射 HTTP 请求到控制器方法的注解。它支持以下 HTTP 方法访问类型&#xff0c;通过 method 属性指定&#xff1a; GET&#xff1a;用于获取资源POST&#xff1a;用于提交数据PUT&#xff1a;用于更新资源DELETE&#xff1a;用于删除资源PA…