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

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

    关注

    12

    文章

    2928

    浏览量

    80397
  • STM32芯片
    +关注

    关注

    0

    文章

    38

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LM555QML定时器:功能特性、应用及设计要点

    了解一下它。 文件下载: lm555qml.pdf 一、LM555QML简介 LM555QML是一款可直接替代SE555/NE555的定时器,能实现从微秒到数小时的定时,支持单稳态和无稳态两种工作
    的头像 发表于 02-10 15:40 285次阅读

    探索xx555系列精密定时器:特性、应用与设计要点

    的特性、应用以及设计要点。 文件下载: se555.pdf 一、产品概述 xx555系列定时器是一款经典的精密定时电路,能够产生精确的时间延迟或振荡。它具有从微秒到数小时的定时能力,支持单稳态和无稳态
    的头像 发表于 02-10 14:45 259次阅读

    CW32定时器及其中断介绍

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

    LAT1183+高精度定时器中 single-shot 计数模式不工作应用笔记

    PWM 输出,在调试模式下发现该子定时器的计数一直为 0,即计数一直没有启动,但如果将计数方式修改为continuous 模式,其他保
    发表于 01-11 17:28 0次下载

    CW32L083的基本定时器

    CW32L083 内部集成 3 个基本定时器 (BTIM),每个 BTIM 完全独立且功能完全相同,各包含一个 16bit 自动重装 载计数并由一个可编程预分频驱动。BTIM 支持定时器
    发表于 12-15 06:23

    什么是自动唤醒定时器

    CW32F030 内部集成 1 个自动唤醒定时器 (AWT),AWT 包含一个 16bit 向下计数,并由一个可编程预分频驱动。AWT 可选 5 计数时钟源,可工作于
    发表于 12-11 07:24

    实现一个嵌入式的软件定时器

    ,一般可分为两种:数组结构和链表结构。什么意思呢?这是(多个)软件定时器在内存中的存储方式,可以用数组来存,也可以用链表来存。 者的优劣之分就是两种数据结构的特性之分:数组方式的
    发表于 12-10 08:29

    CW32A030微控制定时器

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

    CW32定时器及中断介绍

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

    单片机定时器中断

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

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

    本文深入介绍GMSL技术,重点说明用于视频数据传输的像素模式和隧道模式之间的差异。文章将阐明这两种模式之间的主要区别,并探讨成功实施需要注意的具体事项。
    的头像 发表于 10-10 13:49 2616次阅读
    ADI GMSL技术<b class='flag-5'>两种</b>视频数据传输<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 1752次阅读
    ‌TPL5010-Q1 纳米功耗系统<b class='flag-5'>定时器</b>(带看门狗功能)技术文档摘要

    MCU定时器/计数

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