1、
2、
3、
还有两种模式控制功能:从模式控制和主模式控制。
一、 框图
让我们看下手册,一开始是定时器的框图,这里面几乎包含了所有定时器的信息,您要是能看明白,那么接下来就不用再看别的了…
为了方便的看图,我对里面出现的名词和符号做个注解:
ETRP:分频后的外部触发输入 ETRF:滤波后的外部触发输入
ITRx:内部触发x(由另外的定时器触发)
TI1F_ED:TI1的边沿检测器。
TI1FP1/2:滤波后定时器1/2的输入
TRGI:触发输入
CK_PSC:应该叫分频器时钟输入
CK_CNT:定时器时钟。(定时周期的计算就靠它)
TIMx_CHx:TIMER的输入脚
ICx:输入比较x
OCx:输出捕获x
关于框图还有以下几点要注意:
1、
有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);(详细请参考版主博客http://blog.ednchina.com/STM32/401461/message.aspx)
2、
在ETR何TIx输入端有个输入滤波器,它的作用是以采样频率Fdts来采样N次进行滤波的。(具体也请参考版主博客http://blog.ednchina.com/STM32/263170/message.aspx)
3、
1、
也就是选择CK_INT做时钟,这个简单,但是有一点要注意,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当
例如AHP 72M,APB12分频36M,那么TIMER就是APB1的2倍频,即72M。
怎么选择时钟模式1呢?只要将SMCR中SMS[2:0]弄成000就好了
SMCR
15
ETP |
ECE |
ETPS[1:0] |
ETF[3:0] |
MSM |
TS[2:0] |
|
SMS[2:0] |
2、
这个比较麻烦,时钟源选择的其实就是TRGI(触发输入),但触发输入选择挺多的,共8个……。看框图,他们是:ITRx、TI1F_ED、
TI1FP1、TI2FP2、ETRF
ITRx的东西跟定时器的级联有关,暂时不管他。要进入这种时钟模式首先置SMS为111,当然这还没完,不像内部时钟那样,什么都配好了,这里你还得配置一下别的参数,比如选择TI1FP1,自然要对输入通道1的参数配置好,这样时钟才能按你需要的方式进来。就是配框图这块
相关寄存器
CCMR1(输入)
|
IC2PSC[1:0] |
CC2S[1:0] |
IC1F[3:0] |
IC1PSC[1:0] |
CC1S[1:0] |
CCER
15 14
|
|
CC4P |
CC4E |
|
|
CC3P |
CC3E |
|
|
CC2P |
CC2E |
|
|
CC1P |
CC1E |
SMCR
15
ETP |
ECE |
ETPS[1:0] |
ETF[3:0] |
MSM |
TS[2:0] |
|
SMS[2:0] |
在CCMR1寄存器里选择好相应的输入(CC1S)和滤波(IC1F)后再配置好输入极性(CCIP)然后在SMCR中选择触发源(TS[2:0])为TI1这样输入通道就配好了!最后选择SMS为111,开启时钟(CR1中的CEN)。现在时钟就是从TI1上的输入了,可以接个时钟源进行计数之类的。同理,如果要用ETR就把它相关通道配好就可以了。
3、
从图上可以看出ETR可以直接作为时钟输入也可以通过触发输入(TRGI)来作为时钟输入即在时钟模式1中触发源选择为ETR,两个效果上是一样的,看起来好像这个外部时钟模式2没什么用处,实际上不是的,他可以跟一些从模式(复位、触发、门控)进行组合。比如当从模式选为触发时,我们不可能再通过触发源选择ETR了,因为从模式控制器被占了,好在有外部时钟模式2,我们选择这种模式后就可以把两者组合在一起完成一些功能了。
总结一下,STM32的时钟选择比较特别,在SFR中关于时钟选择配置位不再一块,不是说两个位在一起00、01、11就选择了而是由
SMCR中SMS和ECE 来控制,这样感觉可以吧内部时钟与外部模式2同时打开(SMS:000,ECE:1),也可以吧外部模式1和外部模式2同时打开(SMS:111,ECE:1),实际上上述两种方式用的都是外部时钟2.
四、捕获比较通道
这就是我说的定时器三个组成部分中的两个部分了。核心是那个捕获比较寄存器。
输出上的特色是不直接输出,而是有个OC1REF,这样可以定义高有效还是低有效,输出自己需要的有效电平。
TIMER-1:定时器上溢,中断中取反LED.
现象:LED 周期2秒闪烁。
相关寄存器:
|
|
|
|
|
|
CKD[1:0] |
ARPE |
CMS[1:0] |
DIR |
OPM |
URS |
UDIS |
CEN |
ARR
PSC
接下来的4个实验跟输出通道有关系
实验2
TIMER-2:强置输出
现象:LED 常亮
例子比较简单关键是配好输出通道
CCER
15 14
|
|
CC4P |
CC4E |
|
|
CC3P |
CC3E |
|
|
CC2P |
CC2E |
|
|
CC1P |
CC1E |
CCMR(输出)
OC2CE |
OC2M[2:0] |
OC2PE |
OC2FE |
CC2S |
OC1CE |
OC1M[2:0] |
OC1PE |
OC1FE |
CC1S |
将通道1配为输出,输出使能,输出极性选择好,输出模式选择好就可以了。在V100实验板上PC6-9接了LED,刚好对应着TIMER3重映射后的输出,注意程序里的AFIO函数。
实验3
TIMER-3:输出比较
现象:LED 2秒的周期闪烁。
跟上个实验配置大致相同,只是把输出模式改为翻转功能,并且CRR要配好,当CRR=CNT时翻转输出。
实验4
TIMER-4:PWM输出
现象:输出4种不同占空比的PWM波,4个LED亮度不同。
实验5
TIMER-7:单脉冲方式
现象:LED 只闪烁一次。
将上个实验加一句话
TIM_SelectOnePulseMode(TIM3, TIM_OPMode_Single);
就是这个实验。其实手册上关于此实验的本意是由一个外部触发使能计数器,然后产生一个脉冲的,这里还没涉及从模式所以简化处理。[page]
涉及寄存器
|
|
|
|
|
|
CKD[1:0] |
ARPE |
CMS[1:0] |
DIR |
OPM |
URS |
UDIS |
CEN |
接下来再做两个输入的实验
实验6
TIMER-5:输入捕获模式。
现象:通过V100 的JOYSTICK键的SELECT键进入捕获,硬件仿真看CRR的值。
首先是基本的配置:ARR的值、时钟PSC、采样CKD、计数方式。
然后配置输入通道。
选择输入捕获模式、输入极性、把T1配到CC1上、选好输入的滤波跟分频,就可以了。
讲下输入滤波功能,在此实验中Fdts=CK_INT/2,Fsample=Fdts/4,所以定时器时钟为2K,所以采样周期为4ms。才8次的话周期小于32ms的干扰会滤除。
相关寄存器
|
|
|
|
|
|
CKD[1:0] |
ARPE |
CMS[1:0] |
DIR |
OPM |
URS |
UDIS |
CEN |
PSC
ARR
CCMR1(输入)
|
IC2PSC[1:0] |
CC2S[1:0] |
IC1F[3:0] |
IC1PSC[1:0] |
CC1S[1:0] |
CCER
15 14
|
|
CC4P |
CC4E |
|
|
CC3P |
CC3E |
|
|
CC2P |
CC2E |
|
|
CC1P |
CC1E |
TIMER-6:PWM输入
现象:由TIMER3输出通道1产生一路周期2秒占空比50%的PWM波,飞线到TIMER4的输入通道1,有TIMER4来测量该PWM得周期和占空比。
在做实验之前引入三种从模式控制:复位、触发、门控。通过SMCR选择后可以进入这三种从模式
SMCR
15
ETP |
ECE |
ETPS[1:0] |
ETF[3:0] |
MSM |
TS[2:0] |
|
SMS[2:0] |
SMS: 100
所谓从模式简单理解就是受控于别人了,包括何时启动、何时停止、何时复位。相关作用请看手册。提示一点就是进入这三种模式后时钟是谁的问题?肯定不是外部时钟1了,可以是内部时钟和外部时钟2.
接着看实验,PWM方式的原理是这样的,如前文提到过输入时可以把T1映射到CC1上去同时映射到CC2上,将CC1和CC2的捕获边沿搞成相反的,比如CC1捕获T1上升沿,CC2捕获T1下降沿,还要再设置T1为复位从模式,上升沿有效,这样T1上升沿后计数器开始计数。下降沿CC2捕获发生,此为PWM占空比,在来一个上升沿,CC1捕获发生此为PWM周期。注意CC1捕获的第一次无效。
这是从模式跟输入捕获的一种组合使用,从模式还可以跟输出比较组合使用。比如手册上的单脉冲实验。
接着做4个实验跟定时器的级联和定时器同步有关系,在实验前先得说说主模式的问题。在CR2寄存器中的MMS位决定了定时器的主模式方式,即决定TRGO.几种方式可以参看手册。要说明一点就是一个定期器既可以是主模式同时它也是从模式,这就好像你是一个中层干部一样,既可以领导别人同时又被别人领导,这个不冲突的。
简单介绍下4个实验。
实验8
TIMER-8: TIMER2作为TIMER3的分频器.
现象:LED以10秒周期闪烁。
TIMER3配置为PWM输出,但是始终有TIMER2的溢出时间频率来提供,其溢出频率为100Hz所以TIMER3 PWM的周期为10S.
实验9
TIMER-9:TIMER2来使能TIMER3.
现象:LD1前15秒以1秒的周期闪烁,后15秒熄掉,然后下个15秒再闪烁如此循环。
在这个实验里TIEMR3输出一个周期1秒的PWM波,仍然驱动LD1闪烁。同时从模式配成门控模式,TIEMR2将OC1作为TRGO,OC1是一个周期30S占空比50%的PWM波。
实验10
TIMER-10: IMER2启动TIMER3
现象:上电后延迟15秒LD1以1秒的周期闪烁。
此实验跟上个实验配置差不多只要把TIMER3有门控改为触发方式即可。
实验11
TIMER-11: TIMER4的通道1同时出发TIMER4和TIMER3两个定时器
现象:按下JOYSTICK 的“选择”键同时出发两个定时器开始。同时TIMER3驱动LD1以1秒周期闪烁。
以上4个实验实际上是主模式和从模式的组合以及主模式和外部时钟1的组合。其实根据自己的需要还可以做出多种组合,这就是STM32定时器强大的地方。
1、
2、
TIMx->EGR &= TIM_EventSource_Update;
上一篇:STM32中断管理函数
下一篇:STM32中断优先级(默认和不默认情况)
推荐阅读最新更新时间:2024-03-16 14:29