STM32通用定时器_15-1-6
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通用定时器的相关配置
1、预装入(Preload)
预装入实际上是设置TIMx_ARR寄存器有没有缓冲,根据“The auto-reload register is preloaded。Writing to or reading from the auto-reload register accesses the preload register。”可知:
1)如果预装入允许,则对自动重装寄存器的读写是对预装入寄存器的存取,自动重装寄存器的值在更新事件后更新;
2)如果预装入不允许,则对自动重装寄存器的读写是直接修改其本身,自动重装寄存器的值立刻更新;
3)设置方式:TIMx_CR1 →ARPE(1)
2、更新事件(UEV)
1)产生条件:①定时器溢出
②TIMx_CR1→ UDIS = 0
③或者:软件产生,TIMx_EGR→ UG = 1
2)更新事件产生后,所有寄存器都被“清零”,注意预分频器计数
器也被清零(但是预分频系数不变)。若在中心对称模式下或DIR=0(向上计数)则计数器被清零;若DIR=1(向下计数)则计数器取TIMx_ARR的值。
3)注意URS(复位为0)位的选择,如下:
如果是软件产生更新,则URS→1,这样就不会产生更新请求
和DMA请求。
4)更新标志位(UIF)根据URS的选择置位。
5)可以通过软件来失能更新事件:
3、计数器(Counter)
计数器由预分频器的输出时钟(CK_CNT)驱动,TIMx_CR1→CEN = 1 使能,注意:真正的计数使能信号(CNT_EN)在 CEN 置位后一个周期开始有效。
4、预分频器(Prescaler)
预分频器用来对时钟进行分频,分频值由TIMx_PSC决定,计数器的时钟频率CK_CNT= fCK_PSC / (PSC[15:0] + 1)。
根据“It can be changed on the fly as this control register
is buffered。 The new prescaler ratio is taken into account at the next update event。”分频值可以在任何时候更改,但是新的分频比只在下个更新事件时才起作用。
注意:预分频计数器、预分频系数是不同概念;
5、影子寄存器
可以发现预分频器寄存器、自动重载寄存器和捕捉/比较寄存器下面有一个阴影,其他的寄存器有些也有阴影。
这表示在物理上这个寄存器对应2个寄存器:一个是可以写入或读出的寄存器,称为预装载寄存器,另一个是我们看不见的、无法真正对其读写操作的,但在使用中真正起作用的寄存器,称为影子寄存器。
数据手册介绍预装载寄存器的内容可以随时传送到影子寄存器,即两者是连通的(permanently),或者在每一次更新事件(UEV)时才把预装载寄存器的内容传送到影子寄存器。
原文如下: The auto-reload register is preloaded。 Writing to or reading from the auto-reload register accesses the preload register。 The content of the preload register are transferred into the shadow register permanently or at each update event (UEV), depending on the auto-reload preload enable bit (ARPE) in TIMx_CR1 register。
在图中的,表示对应寄存器的影子寄存器可以在发生更新事件时,被更新为它的预装载寄存器的内容;而图中的部分,表示对应的
自动重载寄存器可以产生一个更新事件(U)或更新事件中断(UI)。设计预装载寄存器和影子寄存器的好处是,所有真正需要起作用的寄存器(影子寄存器)可以在同一个时间(发生更新事件时)被更新为所对应的预装载寄存器的内容,这样可以保证多个通道的操作能够准确地同步。如果没有影子寄存器,软件更新预装载寄存器时,则同时更新了真正操作的寄存器,因为软件不可能在一个相同的时刻同时更新多个寄存器,结果造成多个通道的时序不能同步,如果再加上例如中断等其它因素,多个通道的时序关系有可能会混乱,造成是不可预知的结果。
计数器的三种计数模式:
1)向上计数模式:0→TIMx_ARR→产生更新(上溢)事件
2)向下计数模式:TIMx_ARR→0→产生更新(下溢)事件
3)中央对齐模式(向上/向下计数):0→TIMx_ARR-1→产生更新(上
溢)事件→ TIMx_ARR→1→产生更新(下溢)事件
计数模式选择方式:IMx_CR1→CMS
如果使用中央对齐模式,CMS≠00,DIR位此时不能写入;如果不使用
中央对齐模式计数,CMS =00,通过选择DIR位来确定是向上/向下计数模式,如下:
时钟选择:
●内部时钟:CK_INT
●外部时钟引脚:TIx
●外部触发输入:ETR
●内部触发输入:ITR
时钟的选择要配合定时器模式:TIMx_SMCR→SMS
1、外部时钟引脚输入:TIx
根据框图配置时钟流程如下(以TI2为例):
1)配置定时器输入通道(CH0至CH4),TIMx_CCMR→CCxS[1:0],将通道映射到TI2上;
2)配置定时器输入滤波器周期,TIMx_CCMR→ICxF[3:0],这几位定义了TI输入的采样频率及数字滤波器长度,如果不需要滤波,ICF = 0000;
3)配置定时器计数边沿极性,TIMx_CCER→CCxP;
4)配置定时器为外部时钟模式,TIMx_SMCR→SMS = 111;
5)选择TI2作为时钟源,TIMx_SMCR→TS = 110;
6)使能计数器,开始计数,TIMx_CR1→CEN = 1
2、外部触发输入:ETR