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

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

3天内不再提示

STM32定时器所支持的三种计数模式及计数过程

茶话MCU 来源:未知 作者:李倩 2018-11-19 19:18 次阅读

STM32常规定时器主要包括基本定时器、通用定时器和高级定时器。不论哪一类定时器,都有个共同的计数定时单元,我们把它称之为时基单元。

该单元主要由三部分组成:

分频模块、计数模块、自动重装载模块‍。

分频模块用来对外来的计数时钟进行分频,这里有个分频计数器,通过它来实现对时钟的分频功能。与之对应的有个分频器寄存器TIMx_PSC,用来配置和存放分频比、分频系数。

计数模块用来对来自分频器输出的计数脉冲进行计数。相应的这里有个寄存器—计数器寄存器TIMx_CNT,为了把该计数器跟别的计数器区别开来,不妨称它为核心计数器。

自动重装载模块用来配合计数器溢出,当计数器溢出时为之赋予初始计数值的功能单元。与之相应的有个自动重装载寄存器TIMx_ARR.当自动重装载寄存器TIMx_ARR修改生效后就可以自动地作为计数器的计数边界或重装值。

关于自动重装及自动重装载寄存器TIMx_ARR是个相对比较难理解的地方,尤其关于ARR寄存器数据的含义。我们在看STM32参考手册时,很难一下子理解得很到位,往往需要结合上下文内容反复阅读后去领会。关于计数器的溢出与重装,在手册里只有些零散且并不算清晰的介绍,这里尽力跟大家做些交流,以供参考。

当计数器溢出时,自动重装载器为计数器重装计数初始值。自动重装寄存器【ARR】为计数器设置计数边界或初始值,决定计数脉冲的多少或计时周期长短。比如:计数器向上计数时,计到多少发生溢出;向下计数时从多少开始往下计数。平常我们泛泛地说ARR寄存器为计数器提供计数边界或重装值,但它的具体含义及使用需要结合计数器的计数模式才能确定。

那一起看看STM32定时器所支持的三种计数模式及计数过程。

【文中图片可以点击放大观看】

从上面三种计数模式下的计数动作来看,不同模式下计数器的溢出点并不一样,溢出后重装值也不一样。显然,ARR寄存器里的数据扮演的角色也因不同的计数模式而有所不同。我这里特地就三种计数模式下的溢出与重装汇总成一个表格,以便观察和比较。不难看出,重装值并不一定等于ARR,有时重装值就是0.

根据上面的介绍和分析,我们要弄清楚几点:

1、对时钟脉冲进行计数以及溢出是计数器的事;

2、当计数器发生溢出时对计数器重装初始值是自动重装载器的事;

3、ARR寄存器里数据的含义会因计数模式的不同而有所不同;

我们弄个实例来看看,以加深对这个溢出与重装的理解。

我们来看一个通过高级定时器使用比较输出功能输出指定个数脉冲的实例。假设使用PWM输出的单脉冲模式,借助高级定时器的RCR【重复计数器寄存器】来输出指定个数的PWM脉冲。

单脉冲模式:计数器启动后,对于高级定时器,发生第RCR+1次溢出时触发更新事件,同时计数器停止计数。对于通用定时器,没有RCR寄存器,即每次溢出都可以产生更新事件,然后停止计数。

首先,我们需选择合适的计数模式与PWM输出模式来完成该任务。

条件1:向上计数模式 + PWM1模式;RCR=2; 极性选择高有效。

基于这个条件,当CCR大于计数器CNT时,OCx端输出高电平,反之输出低电平。

RCR=2,意味着计数器在发生第3次溢出时产生更新事件。

经验证测试,基于上面条件的输出波形是下面的样子。

【图一、向上计数模式+ PWM1模式RCR=2;极性选择高有效】

一眼就可以看出,输出波形后面多了高电平尾巴,如果是自己期望的倒还好。如果希望最后电平停在低电平,显然就不合适了。

我们先不管合不合适,看看为什么会这样。最后发生溢出时计数器的值不等于ARR吗?结合上面图形,不难看出ARR的值显然比CCR要大得多,即最后时刻计数器的值比CCR要大,那根据上面PWM1模式和极性选择条件,不是该输出低电平吗?怎么会输出高电平呢?奇怪!哪里不对劲呢?

那我们换个PWM输出模式,保持其它条件不变,看看使用PWM2模式结果如何?

条件2:向上计数模式 + PWM2模式;RCR=2; 极性选择高有效。

基于上面条件,当CCR大于计数器CNT时,OCx端输出低电平,反之输出高电平‍【即跟PWM1模式时的输出是相反的】。

RCR=2,同样意味着计数器在发生第3次溢出时产生更新事件。

经验证测试,基于上述条件输出波形变成了下面的样子。

【图二、向上计数模式+ PWM2模式RCR=2;极性选择高有效】

3个脉冲输出倒是漂亮。细心的人是否还是发现了最后结尾那个地方有点不对劲呢?第三次发生溢出【CNT==ARR】产生更新事件后,计数器停止计数了,如果此时计数器的值等于ARR的值,根据刚才PWM2模式和极性选择的条件,那输出应该保持为高电平才合理怎么这又变成低了呢?

那问题出在哪里呢?似乎哪一副图都存在着原理上说不过去的地方。结合前面的溢出与重装的的介绍与分析,或许有人看出端倪了。

其实,这两副图中,最后发生溢出的时刻都是在CNT等于ARR的时候,溢出的同时触发了更新事件。加上定时器工作在单脉冲PWM输出模式,计数器被停止计数。但计数器停止计数,并不妨碍计数器溢出时自动重装载器对其做初始值的重装。那么这个重装值是多少呢?结合这里的计数模式,这个重装值正好是0,即计数器的值变为0了,并停在这个位置。既然溢出后计数器值变为0了,对于PWM1模式+高有效极性选择的话,相应的比较输出结果就是高电平;对于PWM2模式+高有效极性选择的话,相应的比较输出结果就是低电平。经这样分析所得结论,正好跟我们的实测结果一致。

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

    关注

    30

    文章

    5020

    浏览量

    117630
  • STM32
    +关注

    关注

    2239

    文章

    10665

    浏览量

    348518
  • 定时器
    +关注

    关注

    23

    文章

    3144

    浏览量

    112006

原文标题:STM32定时器的溢出与重装

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机定时器/计数器的结构

     每来一个脉冲计数器加1,当加到计数器为全1(即FFFFH)时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(
    发表于 06-17 09:57 7028次阅读
    单片机<b class='flag-5'>定时器</b>/<b class='flag-5'>计数</b>器的结构

    STM32定时器的分频模块、计数模块、自动重装载模块‍

    生溢出;向下计数时从多少开始往下计数。平常我们泛泛地说ARR寄存计数器提供计数边界或重装值,但它的具体含义及使用需要结合
    发表于 05-27 08:00

    stm32中的通用定时器计数时钟有几种

    ,我们都知道,stm32中的通用定时器计数时钟有三种,内部时钟(CK_INT)、外部时钟源(包括外部时钟模式1:外部输入脚(TIx) 和外
    发表于 08-05 06:42

    STM32的通用定时器和高级定时器

    STM32的通用定时器和高级定时器除了支持单向的向上或向下计数模式外,还支持中心对齐
    发表于 08-11 08:51

    三种STM32定时器区别通用定时器功能特点描述

    三种STM32定时器区别通用定时器功能特点描述  1、STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能特
    发表于 08-13 08:47

    三种STM32定时器区别

    STM32F10x系列总共最多有8个定时器三种STM32定时器区别:通用定时器功能特点描述:①
    发表于 08-18 06:03

    STM32定时器简介

    有14个定时器分为三种定时器在这三种定时器里面,我们最常用的就是通用定时器,而通用
    发表于 08-18 06:48

    STM32F10ZET6内部三种定时器区别

    STM32F10ZET6内部有三种定时器,分别是:高级定时器,通用定时器,基本定时器。他们的区别
    发表于 08-18 08:28

    STM32F1xx系列三种定时器的区别

    目录三种定时器的区别通用定时器的特点描述计数器模式通用定时器工作
    发表于 08-18 07:09

    HT48 MCU定时器/计数器的应用

    HT48 MCU定时器/计数器的应用 本文以 HT48R10A-1 为例,分别介绍HT48RXA-1 系列中定时器/计数器的内部计时模式
    发表于 03-25 09:53 24次下载

    STM32F103的11个定时器详解

    3个组;TIM1和TIM8是高级定时器TIM2-TIM5是通用定时器TIM6和TIM7是基本的定时器定时器都是16位的,它们的计数器的类型除
    发表于 11-26 17:06 14次下载
    <b class='flag-5'>STM32</b>F103的11个<b class='flag-5'>定时器</b>详解

    STM32定时器三种中心对齐计数模式简介

    STM32的通用定时器和高级定时器除了支持单向的向上或向下计数模式外,还支持中心对齐
    发表于 12-08 20:51 31次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b><b class='flag-5'>三种</b>中心对齐<b class='flag-5'>计数模式</b>简介

    STM32F103-定时器

    )基本定时器只具有16位计数器功能,并且只能向上计数。通用定时器计数器输入捕获输出比较生成pwm计数
    发表于 12-31 19:14 11次下载
    <b class='flag-5'>STM32</b>F103-<b class='flag-5'>定时器</b>

    简述STM32定时器计数模式

    STM32的向上计数模式是指定时器计数器从0开始计数,直到达到自动加载值(TIMx_ARR),然后重新从0开始
    的头像 发表于 12-13 10:09 1501次阅读

    STM32的向上计数模式如何产生计数器溢出事件?

    STM32的向上计数模式的自动加载值是指定时器计数器的最大计数值。当计数器达到这个值时,它会回滚
    的头像 发表于 12-13 10:22 534次阅读