历史上的今天
返回首页

历史上的今天

今天是:2025年02月03日(星期一)

2020年02月03日 | STM32定时器所支持的三种计数模式及计数过程

2020-02-03 来源:elecfans

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模式+高有效极性选择的话,相应的比较输出结果就是低电平。经这样分析所得结论,正好跟我们的实测结果一致。

推荐阅读

史海拾趣

Fairchild公司的发展小趣事

1965年,Fairchild公司的创始人之一戈登·摩尔提出了著名的“摩尔定律”。该定律预测了集成电路上晶体管数量的增长速度,即每两年翻一番。这一预测在之后的几十年里得到了惊人的验证,并成为了电子行业的重要指导原则。摩尔定律的提出不仅推动了半导体技术的快速发展,也促进了计算机和其他电子设备的不断升级换代。

蜂鸟无线公司的发展小趣事
在PWM调速电路中,需要加入过流保护、过压保护等保护措施,以防止电动机因过载而损坏。
Alliance Memory公司的发展小趣事
如汽车风扇、雨刷等汽车电子部件,通过PWM调速电路可以实现转速的自动调节,提高汽车的舒适性和安全性。
Box Enclosures公司的发展小趣事

在市场竞争日益激烈的背景下,Box Enclosures公司意识到单打独斗难以取得更大的突破。于是,公司开始积极寻求与其他企业的战略合作。通过与一家知名电子设备制造商的合作,Box Enclosures成功将其产品集成到对方的产品中,共同开拓市场。这种合作不仅提升了公司的知名度,还为其带来了更多的商业机会和合作伙伴。

FINISAR公司的发展小趣事

在快速发展的过程中,FINISAR也面临着知识产权方面的挑战。公司曾多次与其他企业发生专利纠纷,并通过法律手段维护自身的合法权益。例如,在与易飞扬的专利战中,FINISAR通过诉讼和专利复审等方式,成功维护了自己的专利权益。这一系列专利战不仅展现了FINISAR在知识产权保护方面的决心和能力,也进一步提升了公司在行业内的知名度和影响力。

FILTRONETICS Inc公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,FILTRONETICS深知技术创新的重要性。公司加大了对研发的投入力度,成立了专门的研发部门和技术中心,致力于新技术、新材料和新工艺的研发和应用。同时,公司还积极关注环保和可持续发展问题,致力于生产绿色、环保的电子产品。通过不断的技术创新和可持续发展实践,FILTRONETICS不仅保持了技术领先地位,也为社会的可持续发展做出了贡献。

问答坊 | AI 解惑

电子万年历我成功调试过

http://blog.163.com/li_j920/edit/ 还的硬件电路,你们要我会给你们的。…

查看全部问答>

求助IIC总线

在网上看了IIC总线的资料但是还是不懂如何用C语言写个程序出来,看了人家的程序也不懂,请哪些高手帮助我下解释程序的含义,或者进一步讲解下思路。 我看了下资料,不知道这样可以实现IIC总线的启停吗? #include <reg51.h>#include \"intrin ...…

查看全部问答>

EVC的CString是否有问题?

程序莫名奇妙得在其一个成员函数里抛出ASSERT错。同样的运行路径进行第二次,就没问题了。…

查看全部问答>

WCE不支持CStdioFile么?

不知道为什么 编译通过了 但是运行的时候却发生了错误: error:Debug Asesertion Failed Failed! f:\\sp\\vctors\\vc7libsce\\ship\\atlmfc\\src\\mfc\\filecore.cpp line 207   (207看不清楚不知道是297还是207) 相关的MFC函数: ...…

查看全部问答>

求助!ADI平台,USB如何虚拟出一个串口?

现在在做一网卡项目,实现的功能是当网卡插入Windows XP系统时,显示一个USB口和一个串口,其中USB口实现上网,串口用于走AT命令等,现在在Windows端的驱动程序都已有现成的,USB也可以上网了     其中卡侧是TTPcom开发环境   &nb ...…

查看全部问答>

想找个师傅带一下【上海,武汉均可】

要毕业了没有工作经验,想找一个师傅教一下。毕业课题是无线点菜机,辅导我做一下。…

查看全部问答>

ARM的IO脚为什么不像51那样可以直接操作

arm是先要打开指定的IO口才可以读写,感觉不如51的方便arm的IO脚为什么不像51那样可以直接操作?这样有什么好处?…

查看全部问答>

GBT 20234-2006电动汽车传导充电用插头、插座、车辆耦合器和车辆插孔通用要求

GBT 20234-2006电动汽车传导充电用插头、插座、车辆耦合器和车辆插孔通用要求…

查看全部问答>

ADSP21161N的时钟问题

请问用多片ADSP21161N时不可以用外部晶振作为CLKIN的输入吗?看ADSP21161N的数据手册24页这么说的,不知道是不是理解错了。想用FPGA来驱动4片ADSP21161N时钟信号,现在不知道该怎么办了。。。请高人指点,谢谢。…

查看全部问答>