历史上的今天

今天是:2024年08月31日(星期六)

2018年08月31日 | STM32高级定时器的使用

发布者:画意人生 来源: eefocus关键字:STM32  高级定时器 手机看文章 扫描二维码
随时随地手机看文章

       写这篇文章的原因是发现net上很少有从STM32的寄存器的角度去解析其原理的文章,也许是太简单的缘故各位大哥都不愿意动笔。那么我来写下,尽量写得简单易懂,以此留个纪念。写得肯定不好或者有的地方不准确,请不要喷哈。

         STM32中定时器的强大之处在于,你不但可以清纯的像C51那样只用内部时钟和外部引脚来进行定时或计数,更可以通过其自身所具备的主从模式,捕获/比较通道来进行更复杂的一些operation。比如将其内部的多个定时器进行级联,捕获或产生PWM波,使用刹车死区功能,记录编码器的数值等。其中有的功能C51可以通过其IO引脚进行模拟,有的却是不能的。

    言归正传,结合较新的HAL库,现在我们一起就来探讨下STM32的寄存器吧。

    先说CR1寄存器,手册最开始就是CKD控制位:


    先贴张重要的图:



         这幅图非常重要,因为其中隐藏着太多重要的信息,从这张图里可以看到CK_INT是内部时钟,即是由单片机的时钟系统所提供的时钟。以该时钟为基准,根据该位的配置得到tDTS,这个时钟的作用是用于判断死区和采样的。这个用到的时候再写。

        接下来看下ARPE位:



        因为STM32的定时器中有一个影子寄存器的概念,ARR寄存器就有一个影子寄存器,另外两类有影子寄存器的是PSR和CCRX,这个影子寄存器我们是无法直接操作的,最终对TIM产生效果的其实是这个影子寄存器,如果将该位配置为1,则我们更新ARR寄存器的值得时候我们不能直接更新影子寄存器,需等待更新事件后才能将预装载寄存器的值放入影子寄存器,如果配置为0,当我们更新ARR时,会使TIM的自动重载值立即生效。

          CMS位和DIR位配置:


        这个位配置手册说得清楚了,在hal库中该如何配置呢?






    这几个参数就是配置该位的。

    OPM位配置:


    手册给出了单脉冲模式的一个应用案例如图:


       该图是TIM在PWM1模式下使用单脉冲模式的一个案例,单脉冲模式的应用不局限于此,所以不能被该图所局限。



       该位的配置比较简单,就是用来配置和使能哪些事件可以成为更新事件,更新事件产生后,如果使能了相应的中断会置起该中断的标志位,并且进入中断向量指向的中断程序,需要在该中断程序中清除该中断位。如果配置了相应的DMA,即可使用DMA模式将存储器的值写入写出TIM的各个寄存器,这个貌似没有什么用,DMA一般都用在具有传输通讯性质的外设中,如USART,USB等。除此之外,更新事件还将各影子寄存器的值进行更新,将CNT重新开始计数。

       CEN位的配置:


       如果没有将SMS从模式选择位配置为门控模式和触发模式,该位就用于启动和停止定时器。若配置了门控模式和触发模式则根据其触发条件启动和停止定时器。

 

       TIM的CR1寄存器就完了,接下来就是CR2寄存器,后面由于很多寄存器的配置都有一定的逻辑联系,所以不按照寄存器的顺序来写了,先说TI1S位的配置:






       指的就是这个东西,既然这里是个异或门,则将其配置为1后,TI1的输入信号由这三个通道的异或值获得。

       MMS位的配置:



       上面应该是[2:0]不是[1:0]哈,这个位的配置挺关键的,是主从模式中主TIM的所需要配置的东西,这8个配置说白的就是谁去给TRGO信号,复位模式是UG位给,使能模式是CEN位给,更新模式是更新事件给,比较脉冲模式是CNT和CCRX比较发生匹配的时候给,其他几个模式就是四个输出通道的参考电平。这个TRGO信号输出后若其他TIM配置为从模式,可将该信号用于从TIM的计数时钟和触发计数,相关的配置需参照SMS从模式选择位的配置。那么看下SMS的配置:



       不想使用从模式直接将其配置为禁止从模式就可以,这是TIM的计数只靠内部时钟,触发靠CEN。编码器的这个模式还是比较有用的,因为编码器有ABZ三项,将AB项接到TIM的TI1和TI2通道,然后通过配置CC1S和CC2S位将IC1映射到TI1上,将IC2映射到TI2上,再配置CC1P和CC2P位选择输入极性不反向,这样进入从模式控制器的电平就和编码器产生的电平一样了,最后根据编码器输出的电平特性配置从模式为编码器模式,有3种配置模式如图:



       最后CEN置位开始进行计数,这里的编码器都是指的是相对编码器。

       复位模式比较好理解,就是TRGI出现上升沿的时候,产生事件更新,TRGI的信号由TS位配置产生,如果说复位模式下的TRGI负责产生更新事件,那么门控模式和触发模式则负责产生启停定时器,外部时钟模式1模式则赋值定时器的计数,他们的信号均是TS为配置产生的,TS位的配置如图:




       这里后面几个配置都可以从可以从总系统图上看到,ITR0,ITR1,ITR2,ITR3这几个配置的输入则要参考下表:




       这里由于是TIM1和TIM8的内容,所以只有这两个TIM作为从定时器时,相应的ITRX所接入的TIMX的TRGO,比如说在TIM1的TS位选择配置000,则TIM5的TRGO端口接到TIM1的TRGI端口,TRGO又是通过上面说的MMS位配置所决定的。

 

    主从模式说完TIM的另一个重要的内容就是输入输出通道的应用,这得先从CCMR1和CCMR2寄存器说起。

       CCMR1寄存器和CCMR2寄存器是类似的,只不过一个是TIM中1,2通道的配置,另一个是3,4通道的配置,如图:





       很显然,低8位是配置通道1的,高8位是配置通道配置通道2的,以通道1为例子来说明,首先是CC1S位的配置:

       该位指示了通道1到底是配置成输入还是输出,只能选择一种模式来进行配置,根据这个配置,该寄存器其他位的值的含义也是不相同的。





       好的,我们假设先配置成输出模式,即CC1S位设置为00,那么其他位的配置均按照上面那一排的来弄。有哪些嘛,0C1CE,0C1M,0C1PE,0C1FE这几个,先说0C1M这个位的配置:






       别个手册第一句话就说了这些位定义了OC1和OC1N的输出参考信号OC1REF的行为,对头哈,只是定义了OC1REF的动作,为撒子不直接定义OC1和0C1N的动作呢?因为这两个的是通道的实际电平的输出,它还取决于其他相关的控制,这里只要晓得0C1REF的电平就可以了,这个电平的定义是定死了的,就是有效状态为高电平,无效状态为低电平。再贴一张重要的图:




       通过这幅图我们看得出控制OC1REF的是0C1CE和OC1M位。OC1M位可以配置为以上那8种模式,核心就是TIM的计数值CNT和CCR值在不同关系下输出不同的0C1REF电平,后面的事是交给其他寄存器去控制的,可以说不同的行业应用对后面的那些寄存器的配置是不同的。还有一个就是OC1CE位的配置:





       配置了这个位后OC1REF的电平就要受到ETRF的影响了,这个ETRF是怎么来的呢?这个要从外部时钟模式2说起:




       由图看得出,这里面的控制都和SMCR寄存器有关,这个寄存器就是开始我们说过的从模式寄存器,哈哈哈,几个位的配置就一起说了:




       结合图很好理解,ETP位用于确定有效边沿,ETPS位用于分频外部触发的信号,ETF位是一个滤波器配置,我们最开始在CR1寄存器中配置的CKD位在这里就有用的,fDTS的频率就是取决于CKD位的配置的,fSAMPLING是什么意思呢?比如说配置为1000,即Fsampling=Fdts/8,N=6,意思是每个外部脉冲的有效电平至少保持8个tDTS的周期才算做有效的一个脉冲,当有6个这样的脉冲发生时,才算成一个有效的外部脉冲。ECE位则是使能外部时钟模式2的,当然,ETRF也可以接入外部时钟模式1,前提是从模式要配置成外部时钟模式1并且TS为要选择外部触发输入111。

接下来继续说输出的事情,还有两个位的配置一个是OC1PE还有一个是OC1FE:





       OC1PE就是CCR1预装载的配置位,前面说了影子寄存器的概念,这里是类似的。

OC1FE这个位的配置我不是很了解了,查了些资料也没有很好的答案,按其手册的意思是可以快速输出,反正使用PWM输出时将其配置为1是没还有问题的。

输出完了就说一下输入了,同样先贴一张图方便说明理解:



       不出所料先配置CC1S位,当这个位配置为输入模式时有三种选择,简而言之,01这种配置信号是从自己的通道TI1进来,10这种配置的信号是从相邻的2通道TI2进来,11这种配置是从从模式信号的TRC进来,TRC在哪里,系统大图上可以看清楚,当然进来的信号肯定是通过处理过的,这个处理的过程取决于其他几位的配置。这个寄存器中的IC1F和IC1PSC就是干这个事情的:



       和ETR的输入配置一样,这个依样画葫芦就可以理解它了,这里还有一个位的配置也影响输入的有效电平,就是CC1P和CC1NP这个就是我马上要说的东西了。

       这两个位的配置在当该通道被配置为输入或输出时依然具有不同的含义,我就以1通道作为例子,刚在说输入,就先说这两个位的输入配置,看图:



       由图可知,当通道配置为输入的时候,输入信号的有效电平和极性是由CCER寄存器中的CC1NP和CC1P位联合配置决定的,NP在前,P在后,我在这里理解的是当TRGI所选择的输入为TI1FP1且从模式配置为复位,外部时钟1,触发模式的时候,配置成00时,该信号的上升沿使TRGI产生上升沿,配置成01时,该信号下降沿使TRGI产生上升沿,配置成11时,该信号的上升沿和下降沿均使TRGI产生上升沿。当从模式配置为门控或者编码器模式的时候,配置成00或者01只将信号起到一个正反相作用。

这个说完接下来说当通道1配置为输出的时候这两个位的作用:



       感觉手册对其说得模棱两可的,先看看输出那幅图吧,很明显,这两个位的配置只对输出信号起到一个非门的作用,也就是说当配置为1时将OC1REF信号进行逻辑非,我们知道OC1REF的有效电平是高电平,所以当配置为1的时候,当OC1REF有效时输出的是一个低电平,反之则是一个高电平。当然这还不是OC1和OC1N输出的最后一道关口,最后一个控制其电平的是输出使能电路,说这个先介绍CCER寄存器的CC1E和CC1NE位:



       很明显,这两个位就是使能输入或输出通道的,貌似很简单,但其真是有些玄机的哟。因为这两个位的含义还取决于其他的一些配置,首先就是MOE这个位的配置,在BDTR寄存器中:



       所以嘛,要想OC和OCN正常输出这个位还必须要为1才得行哟,那么这个位位0的时候有什么效果呢,重点是两个输出通道将强制为空闲状态,什么是空闲状态,且看OSSR和OSSI的配置I就是idle的意思:



       先看OSSR位,这个位是在MOE=1即运行模式下有效的,当其配置为0时,当OC1REF为无效状态的时候,就将输出禁止了,相当于把CC1E和CC1NE都清0,当OC1REF为有效状态时,并且CC1E和CC1NE都使能的时,则根据CC1NP和CC1P的配置该输出什么电平就输出什么电平。当其配置为1时,对输出时不影响的。再看OSSI位,这个是MOE=0时配置生效的,用下面这个表去整体理解下:



       这个要注意的是,当OC1E和OC1NE均设置为使能状态下的时候,OC1输出的电平是OC1REF+极性,而OC1N输出的电平是OC1REF的互补相+极性。说了这么多关于输出的控制,STM32搞这么复杂就是为了应用于复杂的场合中,比如死区的应用:


       很典型的死区时序图,通过OCX和OCXN的互补输出外加一个死区时间,如何配置互补输出前面已经说过了,那怎么配置这个死区时间呢?则通过DTG位来进行配置:



       看嘛,又用到tDTS了,又回到了开篇所讲的东西了,哎,写这么多也是总结下以前所学的知识,虽然比较简单,都是照葫芦画瓢,但是总归总结下还是有一定的好处的吧,本来还想结合HAL库一起写下的,子在川上日:逝者如斯夫,就算了吧。


关键字:STM32  高级定时器 引用地址:STM32高级定时器的使用

上一篇:STM32定时器(TIM)之通用定时器
下一篇:STM32外部中断及定时器编程示例

推荐阅读

KLA-Tencor公司今日宣布推出两款全新缺陷检测产品,旨在解决各类集成电路(IC)所面临的封装挑战。 Kronos™ 1080系统为先进封装提供适合量产的、高灵敏度的晶圆检测,为工艺控制和材料处置提供关键的信息。 ICOS™ F160系统在晶圆切割后对封装进行检查,根据关键缺陷的类型进行准确快速的芯片分类,其中包括对侧壁裂缝这一新缺陷类型(影响高端封装...
  跨越1300公里,从江南水乡到西北塞外,太阳能路灯和巨型的输变电网不断从窗外闪过,提醒我古老的敦煌在新时代焕发着更加夺目的光彩。 自2009年以来,首批光伏特许权项目在敦煌荒凉的戈壁滩上落成,太阳能光伏这种极为充沛而独特的资源逐渐走入大众视野,一再打破长期以来内陆戈壁在人们心中“荒凉、干枯、死亡”的形象。  这次入塞,我把目的地定在...
采用电池供电的数字万用表普遍存在一个问题是,即忘记判断电源,从而使万用表的电池很快用掉,解决这一问题的办法是。将一个周期发声报警装置装入数字万用表内,当接通电源时,报警装置即发出声音。电路图如下图:报警装置用一块低功耗CMOS电路构成,其主要部分是两个施密特触发器振荡器。ICA约每隔3S产生一个300MS的脉冲,这一脉冲又触发以音频工作的ICB...
  雷达物位计按使用微波的波形,可分为脉冲雷达物位计和调频连续波雷达物位计。低频脉冲雷达物位计由于波长短,对于泡沫介质具有更好的穿透力,且相对高频脉冲雷达物位计,低频脉冲雷达物位计对搅拌干扰并不敏感,故测量液气态介质时,低频脉冲雷达物位计的测量效果会更佳。由于现场复杂多样,不同的应用场合需要不同尺寸规格的低频脉冲雷达物位计与之相...

史海拾趣

问答坊 | AI 解惑

基于重复控制和电压前馈控制的光伏并网发电系统研究与设计

提出了一种基于重复控制和电网电压前馈控制相结合的光伏并网发电系统。重复控制可以抑制周期性的负载扰动,改善稳态情况下的并网电流波形;同时,采用电网电压的前馈控制来抵消电网的影响,使系统近似成为一个简单的无源跟随系统。实验结果表明,控 ...…

查看全部问答∨

Wince5.0 下将camera由30万改为130万都需要改哪些地方??

刚接到个任务,要将摄像头由之前的30万升级为130万,不知道具体要改哪些地方,请各位指点一下。 看了一下具体的源代码,有了初步的了解,但还有很多地方需要向大家请教: 1.照片大小的计算方法,假如现在所拍摄照片为640*480,RGB16模式,其大小是不是应 ...…

查看全部问答∨

串口通讯的一个小问题

一块片子,两个单片机串口通讯,一个发送数据,一个显示。 分别烧进代码,一切正常,数据能发送也能显示。 现在我再烧一次发送的代码进单片机(只烧发送代码),执行发送程序,那边接收显示的数据就不对了。 为什么?…

查看全部问答∨

串口通讯中方式3,第九位RB8总是零

如题.   不管是在软件上调试(奇校验),还是在硬件上,RB8总是零.比如我发9,RB8==0,发7也是0   请各位帮帮忙。谢谢 void STR_int(void) interrupt 4 using 2 {     if(RI)   { &nbs ...…

查看全部问答∨

GetAdaptersInfo 总是返回ERROR_NO_DATA

在vs2005上用GetAdaptersInfo获取本机IP和网卡MAC,总是返回ERROR_NO_DATA IP_ADAPTER_INFO * pAdptInfo    = NULL;     IP_ADAPTER_INFO * pNextAd      = NULL;        ULONG ...…

查看全部问答∨

新接触单片机~~要求~~该怎么学习?

老板的要求是最低要看懂那些原理图,我不知道从哪里下手啊   有没有适合看懂原理图的基础资料啊??介绍下~~~…

查看全部问答∨

此处的int.是什么意思?-

此处的int.是什么意思?----1.8V int., 3.3V memory, 3.3V external I/O microprocessor with 16KB I-Cache/16KB D-Cache/MMU…

查看全部问答∨

发现一个 bug 赏黄金千两!

发现一个 bug 赏黄金千两! http://www.tengyunjiawu.com 这是我用 C语言开发的网站! 用户登陆功能开始公开测试了,请各位管理员积极测试! 采用了 cookies 记录24小时功能 外加 base64加密算法! 测试用户: tengyunjiawu 测试密码: 888888 ...…

查看全部问答∨

WinCE下如何屏蔽鼠标的输入

在Windows下可以用BlockInput,在WinCE下呢?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved