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

    文章

    2902

    浏览量

    79666
  • STM32芯片
    +关注

    关注

    0

    文章

    38

    浏览量

    4811
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32A030微控制定时器

    16bit 自动重装载计数 并由一个可编程预分频驱动。GTIM 支持定时器模式、计数模式
    发表于 12-04 06:47

    CW32L010+定时器介绍

    :用于对时钟信号进行分频,以降低计数的计数频率。通过预分频,可以实现更长的定时周期和更细粒度的定时控制。 控制寄存
    发表于 12-01 07:53

    CW32L0开发板学习记录四,高级定时器ATIM学习

    触发输入信号(TRGI)控制定时器实现多种从模式定时器级联 ITR 和片内外设互联 ETR支持针对定位的增量(正交)编码和霍尔传感
    发表于 12-01 07:35

    CW32定时器及中断介绍

    载计数并由一个可编程预分频驱动。BTIM 支持定时器模式、计数模式、触发启动
    发表于 12-01 07:08

    单片机定时器中断

    51单片机内部共有个16位可编程的定时器/计数,即定时器T0和定时器T1。它们既有定时功能又
    发表于 11-24 06:22

    PWM、定时器、SysTick 区别及应用场景

    在单片机和嵌入式开发中,经常会遇到PWM(脉宽调制)、定时器、SysTick(系统滴答定时器)这几个词。很多初学者容易把它们混为一谈,以为都是“定时相关的东西”。其实,它们在本质和应用上有明显差别
    的头像 发表于 11-17 10:53 219次阅读
    PWM、<b class='flag-5'>定时器</b>、SysTick 区别及应用场景

    ADI GMSL技术两种视频数据传输模式的区别

    本文深入介绍GMSL技术,重点说明用于视频数据传输的像素模式和隧道模式之间的差异。文章将阐明这两种模式之间的主要区别,并探讨成功实施需要注意的具体事项。
    的头像 发表于 10-10 13:49 1759次阅读
    ADI GMSL技术<b class='flag-5'>两种</b>视频数据传输<b class='flag-5'>模式</b>的区别

    SysTick系统滴答定时器简介

    SysTick—系统定时器是属于CM33内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数,计数每计数一次的时间为 1/SYSCLK,一般我们设置系统时
    的头像 发表于 09-23 09:50 1328次阅读
    SysTick系统滴答<b class='flag-5'>定时器</b>简介

    定时器输入捕获模式

    AT32F4xx定时器输入捕获模式 支持型号: AT32F 系列 主要使用外设: TIMER、 USART 获取示例 1 快速使用方法 1.1 硬件资源 AT-START-F403A V1.0
    发表于 09-22 09:58

    定时器同步之并行模式

    事件作为 TRGOUT 源,用于触发个从定时器。TMR3 和 TMR4 作为从定时器,开启挂起模式用于与主定时器进行同步。并且使能 TMR
    发表于 09-22 09:56

    ‌TPL5010-Q1 纳米功耗系统定时器(带看门狗功能)技术文档摘要

    如果定时器睡眠电流较高, 在此睡眠中,微控制定时器最多可消耗系统总电流的 60-80% 模式。TPL5010-Q1 仅消耗 35 nA,可以取代集成 微控制
    的头像 发表于 09-13 10:01 1256次阅读
    ‌TPL5010-Q1 纳米功耗系统<b class='flag-5'>定时器</b>(带看门狗功能)技术文档摘要

    大彩讲堂:VisualHMI-LUA教程-定时器的使用指南

    定时器的使用
    的头像 发表于 08-31 16:59 848次阅读
    大彩讲堂:VisualHMI-LUA教程-<b class='flag-5'>定时器</b>的使用指南

    MCU定时器/计数

    RISC-V核低功耗MCU通过灵活的定时器架构、低功耗模式适配及硬件级中断优化,在工业控制、智能家居等场景中实现高精度计时与能耗控制的协同设计,满足复杂任务调度与实时响应的双重需求‌。 一、‌硬件
    的头像 发表于 04-27 13:54 589次阅读

    电流输出 vs 电压输出:两种传感输出模式有什么区别?

    在工业自动化和数据采集领域,传感扮演着至关重要的角色,它们将各种物理量(如温度、压力、流量等)转换为可被测量和分析的电信号。而传感的输出信号主要分为
    的头像 发表于 02-08 18:21 2063次阅读
    电流输出 vs 电压输出:<b class='flag-5'>两种</b>传感<b class='flag-5'>器</b>输出<b class='flag-5'>模式</b>有什么区别?

    ADS1292R有 \"1 ch ECG + 1 ch呼吸侦测\" 或 \"2 ch ECG\" 两种模式,是否可以在产品上实现自行切换两种使用模式?

    请问 ADS1292R 有 \"1 ch ECG + 1 ch 呼吸侦测\" 或 \"2 ch ECG\" 两种模式,是否可以在产品上实现让用户自行切换两种使用模式?
    发表于 12-13 14:43