0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

统计信号连接到定时器的两种模式

lhl545545 来源:ST MCU 信息交流 作者:ST MCU 信息交流 2020-06-08 09:18 次阅读

有人使用STM32芯片开发产品,其中有个功能就是统计某外部信号脉冲个数。他采用外部中断方式,来一个信号触发一次中断,在中断程序里实现计数累加。但由于被统计的信号频率较高,而中断本身也是需要时间的,往往导致有些脉冲没被统计而发生丢数的问题。况且,CPU这样频繁地去响应中断还会衍生出其它系统性问题。

他咨询是否可以将该信号作为定时器时钟源,每来一个脉冲信号计数器就自动加1。这样的话,用户适时去读取计数器的值即可。若有,如何实现?

对于这种情况,我们可以将被统计信号连接到定时器的ETR脚,并作为定时器的计数时钟。开启定时器更新中断对溢出次数进行统计,择时读取计数器的值和溢出次数即可。这样既避免了CPU频繁进中断而无法应对别的事情的困境,也避免了因CPU优先忙于别的事情而来不及响应外部中断导致计数出错的麻烦。

对于STM32来讲,从ETR脚引入时钟信号,可以有两种模式。

统计信号连接到定时器的两种模式

第一种模式,即外部时钟1模式,此时来自ETR脚的信号经过滤波、边沿检测和极性选择后,以触发信号的角色连接到从模式控制器,并作为定时器的时钟源,即上图中的1路。

第二种模式,即外部时钟2模式,来自ETR脚的时钟信号经过极性选择、分频、滤波后不经过从模式控制器,而是像内部时钟源一样直接为计数器提供计数时钟,即上图中的2路。

现在分别以上面提到的两种模式演示定时器对来自ETR脚的时钟信号进行计数的过程。这里以STM32F411 Nucleo开发板来进行实验。

TIM1_CH1模拟产生某频率的PWM脉冲信号,将其通过跳线连接到ETR脚。为便于测量和演示,让TIM1工作在单脉冲PWM模式,结合RCR寄存器输出指定个数的脉冲。使用TIM3对来自ETR脚的时钟信号进行计数,同时开启TIM3更新中断对溢出次数进行统计。

让TIM1-CH1启动后输出248个脉冲后停下来,而TIM3每统计200个脉冲就产生溢出,即令TIM3_ARR值等于199。

现在使用STM32CUBEMX进行基本的配置。

先对用来模拟产生外来脉冲信号的TIM1进行配置。做些基本的时基配置即可。

然后对TIM3进行配置,时钟来自ETR脚,工作在外部时钟模式2。

将时钟、NVIC等配置完毕后即可生成初始化代码。

定义变量CNT_Update记录TIM3的溢出次数。基于STM32Cube 库稍加组织代码即可查看结果。

统计信号连接到定时器的两种模式

统计信号连接到定时器的两种模式

编译运行查看结果:

TIM3发生溢出1次,结合上面配置可知其对应的脉冲个数为200,此时计数器里的值为0x30,即48,总共248个脉冲,跟TIM1_CH1输出的248个脉冲数相同。

上面的实验是基于TIM3工作在ETR外部时钟模式2,我们不妨再看看基于外部时钟模式1的情况。现在只需对TIM3的时钟配置稍作调整,其它参数不动。

生成初始化代码后,基于前面组织的用户代码不做任何调整即可编译运行验证。

统计信号连接到定时器的两种模式

上面验证结果与外部时钟模式2完全相同,跟TIM1_CH1输出的脉冲数完全吻合。

从上面示例来看,当时钟信号来自ETR脚时,不论使用外部时钟模式1还是外部时钟模式2,都可以实现完全相同的结果。那么基于同一个时钟源,为什么弄出2个时钟模式呢?

首先,定时器本身支持多钟时钟模式,其中包括外部时钟模式1与外部时钟模式2。只不过来自ETR脚的时钟信号既可以工作外部时钟模式1,也可以工作在外部时钟模式2。

外部时钟模式1的主要特点是时钟信号还同时兼具触发信号的角色,此时定时器也一定工作在从模式,这个从模式就是外设时钟模式1从模式。STM32参考手册关于这个模式,在讲解定时器主从连接的相关实例时进行过介绍,但没有将其跟复位从模式、触发从模式等从模式一起单列出来进行介绍。我们在用STM32CubeMX进行配置时也可以发现有个从模式选项就是外部时钟1从模式。

前面也提到了,外部时钟模式1下的时钟除了做时钟外,还做触发信号。基于这个触发信号可以产生触发事件,从而触发中断或产生DMA请求。而外部时钟模式2就是特指来自ETR脚的时钟,只是个纯粹的时钟,不具备触发功能。但是,选择外部时钟模式2的定时器,既可以工作在主模式,也可以工作在诸如复位/触发/门控等从模式。

另外,作为外部时钟模式1的时钟,它可以有多个来源,除了ETR脚外,还可以是TI1、TI2输入脚或者其它定时器的触发输出,而工作在外部时钟模式2的时钟只能来自ETR脚。显然,基于开篇的客户需求,它的被测信号还可以接到别的特定管脚上来处理。

最后做点提醒。基于上面应用,弄清实现原理后,自行组织用户代码应该说非常简单了。不过,即使这样,可能还是会有不少人在有个地方出问题,就是没有下图中那句对TIM3的更新事件标志进行清零的代码。很多场景,这行代码可有可无。当遇到目前这种应用时,就不能可有可无了。

统计信号连接到定时器的两种模式

基于上面的程序逻辑,如果没有这句代码会发生统计所得的溢出次数与实际溢出次数多1的状况。以上面应用为例,我什么都不改动,只将那行代码注释掉,运行结果会变成下面的样子。计数器里的值虽然还是48,但溢出次数变成2了!

统计信号连接到定时器的两种模式

像这种需要统计精确数据的情形,发生这种问题往往就难以接受。为什么要加这句代码呢?如果不加这句代码怎么会导致统计到的溢出次数平白无故多1次呢?

关于这点可以自行思考下,在此不延申解释了。也可以参考下面文章《STM32定时器中的更新操作与更新事件》的结尾部分,那里有就该问题做些分析。
责任编辑:pj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 信号
    +关注

    关注

    11

    文章

    2628

    浏览量

    75304
  • STM32芯片
    +关注

    关注

    0

    文章

    38

    浏览量

    4304
收藏 人收藏

    评论

    相关推荐

    stm32主从定时器门控模式,怎么控制在不产生PWM时从定时器cnt不要计数?

    stm32主从定时器,采用门控模式,主定时器用单脉冲模式控制输出。但是我在实验的时候发现其从定时器cnt在主
    发表于 03-12 07:08

    变频两种无速度传感矢量控制模式有什么区别?

    在变频控制模式中,有无速度矢量传感模式,该模式又分为两种,无感矢量0和无感矢量1,这
    发表于 02-22 21:45

    国产嵌入式教学实验箱操作教程:2-13 定时器控制实验

    计数的count,如果用作定时就是先输入一个数字,然后在来了一个时钟之后count自动减一。如果用成计数就是在一个脉冲到来之后count自动加一。 (3)看门狗 一些定时器设计有信号连接到
    发表于 02-21 14:09

    51单片机定时器定时1秒程序流水灯结果分析

    流水灯的设计原理、实现步骤和结果分析。 一、设计原理 在51单片机中,定时器常用的工作方式有两种定时器模式和计数器模式
    的头像 发表于 12-26 14:57 767次阅读

    定时器会阻塞线程吗 定时器指令有哪几种

    指令: 一、硬件定时器指令: 1. 初始化定时器:用于配置和初始化定时器的各个参数和寄存器。可以设置定时器的时钟源、时钟分频比、计数模式等。
    的头像 发表于 12-19 14:03 401次阅读

    c51中定时器工作时如何使用T0脚输入脉冲信号

    c51中定时器工作时如何使用T0脚输入脉冲信号? 嵌入式系统中,定时器是一种常用的设备,可以实现各种时间控制功能,如计时、计数、产生中断等。8051单片机中有两个定时器:T0和T1,其
    的头像 发表于 10-25 11:50 444次阅读

    定时器定时启动信号特点

    定时器定时启动信号特点  定时器是一种常用的计时器,可以在指定的时间后发出信号。它们在各种电器、仪器和控制系统中被广泛应用。
    的头像 发表于 10-24 11:49 340次阅读

    555定时器的工作模式

    555定时器的工作模式  555定时器是一种非常经典的集成电路,由Signetics公司于1972年推出,被广泛应用于各种电子设备中。555定时器主要有
    的头像 发表于 10-24 10:10 642次阅读

    同一个定时器个通道怎样设置为不同的PWM模式

    同一个定时器个通道怎样设置为不同的PWM模式
    发表于 10-17 06:13

    555定时器多谐振荡器的振荡周期为多少?

    定时器多谐振荡器的振荡周期问题。 一、555定时器多谐振荡器的基本原理 首先,我们需要了解到555定时器基本上有两种工作模式,分别为单稳态
    的头像 发表于 09-02 16:10 3240次阅读

    定时器中断程序怎么写

    达到预定的定时时间时,它会产生一个中断信号,称为定时器中断。在本文中,我们将详细了解如何编写定时器中断程序。 #1. 硬件配置 在开始编写定时器
    的头像 发表于 09-01 10:17 1037次阅读

    ARM双定时器模块(SP804)技术参考手册

    ARM双定时器模块是一先进的微控制总线结构(AMBA)兼容的片上系统(SoC)外围设备由开发、测试和许可ARM有限公司。 该模块是AMBA从模块,连接到高级外围总线(APB)。双
    发表于 08-02 08:47

    总结一下定时器的几种输出比较模式

    最近有接触到通过可控硅的方式来控制交流风机或者电烙铁功率,STM32的定时器输出比较模式,刚好可以满足这种需求,借此机会总结一下定时器的几种输出模式
    的头像 发表于 07-21 16:17 3711次阅读
    总结一下<b class='flag-5'>定时器</b>的几种输出比较<b class='flag-5'>模式</b>

    请问定时器控制有哪些操作模式?

    定时器控制提供单周期模式、周期模式、双态模式与连续计数模式,还提供由外部脚位来对事件计数功能,
    发表于 06-26 08:05

    分享一个不错的自动关断定时器电路

    该放大器定时器电路的工作原理很简单,当15分钟没有输入信号时,则连接到开关继电器的电源或其他设备将关闭。
    的头像 发表于 05-13 17:00 597次阅读
    分享一个不错的自动关断<b class='flag-5'>定时器</b>电路