您的位置 首页 5G

STM32 学习笔记_TIME定时器详解2

STM32的定时器功能很强大,学习起来也很费劲儿其实手册讲的还是挺全面的,只是无奈TIMER的功能太复杂,所以显得手册很难懂,我就是通过这

STM32的守时器功用很强壮,学习起来也很费劲儿.

其实手册讲的仍是挺全面的,仅仅无法TIMER的功用太杂乱,所以显得手册很难明,我便是经过这样看手册:while(!SUCCESS){看手册…}才搞了解的!所以接下来我以手册的次序为主线,添加一些自己的了解,并经过11个例程对TIMER做个分析。试验环境是STM103V100的试验板,MDK3.2 +Library2.东西都不怎样新,凑合用……

TIMER首要是由三部分组成:

1、时基单元。

2、输入捕获。

3、输出比较。

还有两种形式操控功用:从形式操控和主形式操控。

一、 框图

让咱们看下手册,一开始是守时器的框图,这儿边简直包含了一切守时器的信息,您要是能看了解,那么接下来就不必再看其他了…

为了便利的看图,我对里边呈现的名词和符号做个注解:

TIMx_ETR:TIMER外部触发引脚 ETR:外部触发输入

ETRP:分频后的外部触发输入 ETRF:滤波后的外部触发输入

ITRx:内部触发x(由其他的守时器触发)

TI1F_ED:TI1的边缘检测器。

TI1FP1/2:滤波后守时器1/2的输入

TRGI:触发输入 TRGO:触发输出

CK_PSC:应该叫分频器时钟输入

CK_CNT:守时器时钟。(守时周期的核算就靠它)

TIMx_CHx:TIMER的输入脚 TIx:应该叫做守时器输入信号x

ICx:输入比较x ICxPS:分频后的ICx

OCx:输出捕获x OCxREF:输出参阅信号

关于框图还有以下几点要留意:

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、输入引脚和输出引脚是相同的。

二、时基单元

时基单元有三个部分:CNT、PSC、ARR。CNT的计数方法分三种:向上、向下、中心对齐。浅显的说便是0—ARR、ARR—0、0—(ARR-1)—ARR—1.

三、时钟源的挑选

这个是难点之一。从手册上咱们看到共有三种时钟源:

1、内部时钟。

也便是挑选CK_INT做时钟,这个简略,但是有一点要留意,守时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,当APB1的预分频系数为1时,这个倍频器不起作用,守时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,守时器的时钟频率等于APB1的频率两倍。

例如AHP 72M,APB12分频36M,那么TIMER便是APB1的2倍频,即72M。

怎样挑选时钟形式1呢?只要将SMCR中SMS[2:0]弄成000就好了

SMCR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

ETP

ECE

ETPS[1:0]

ETF[3:0]

MSM

TS[2:0]

SMS[2:0]

2、外部时钟形式1

这个比较费事,时钟源挑选的其实便是TRGI(触发输入),但触发输入挑选挺多的,共8个……。看框图,他们是:ITRx、TI1F_ED、

TI1FP1、TI2FP2、ETRF

ITRx的东西跟守时器的级联有关,暂时不论他。要进入这种时钟形式首要置SMS为111,当然这还没完,不像内部时钟那样,什么都配好了,这儿你还得装备一下其他参数,比方挑选TI1FP1,天然要对输入通道1的参数装备好,这样时钟才干按你需求的方法进来。便是配框图这块

相关寄存器

CCMR1(输入)

IC2F[3:0]

IC2PSC[1:0]

CC2S[1:0]

IC1F[3:0]

IC1PSC[1:0]

CC1S[1:0]

CCER

15 14131211 109 87 6543210

CC4P

CC4E

CC3P

CC3E

CC2P

CC2E

CC1P

CC1E

SMCR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

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、外部时钟形式2

挑选外部输入作为时钟,看框图:

从图上能够看出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.

四、捕获比较通道

这便是我说的守时器三个组成部分中的两个部分了。中心是那个捕获比较寄存器。

看框图

异或那块先不论他,如同跟编码器有关,输入有个特征便是能够把TI的输入搞到CC1上去,也能够把T2的输入搞到CC1上去,其实也能够把T1搞到CC1上去一起把T1搞到CC2上去,这样就有了后来的PWM输入。

输出上的特征是不直接输出,而是有个OC1REF,这样能够界说高有用仍是低有用,输出自己需求的有用电平。

五、做试验

讲了这么多你必定烦了吧,那么让咱们搞点实践的吧,经过做试验来了解守时器,用到新知识时再在其间加以介绍。

试验一:TIMER-1:守时器上溢,中止中取反LED.现象:LED 周期2秒闪耀。首要代码如下:TIM_DeInit(TIM2);TIM_TimeBaseStructure.TIM_Period=2000; //ARR的值TIM_TimeBaseStructure.TIM_Prescaler=0;TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数形式TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_PrescalerConfig(TIM2,0x8C9F,TIM_PSCReloadMode_Immediate);//时钟分频系数36000,所以守时器时钟为2KTIM_ARRPreloadConfig(TIM2, DISABLE);//制止ARR预装载缓冲器TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);TIM_Cmd(TIM2, ENABLE); //敞开时钟

解释一下,首要得配好ARR,这是有必要地。然后装备预分频,为什么我先配为0再用TIM_PrescalerConfig(TIM2,0x8C9F,TIM_PSCReloadMode_Immediate)配呢,本来PSC也有个预装载功用,却不像ARR和CRR那样有相关的位操控当即装载或更新事情装载。也便是说只能更新事情来装载。在上面函数中手艺发生了一个更新事情,使PSC马上收效。CK_DIV暂时没用到。计数形式装备为向上计数。然后在中止中做下LED取反就能够了。

溢出周期怎样算?在这个试验里AHB为72M,APB1为36M,所以CK_INT为72M,36000分频变为2K.ARR=2000,所以1秒溢出1次。

相关寄存器:

CR1

9 8 7 6 5 4 3 2 1 0

CKD[1:0]

ARPE

CMS[1:0]

DIR

OPM

URS

UDIS

CEN

ARR

PSC

接下来的4个试验跟输出通道有联系

试验2

TIMER-2:强置输出

现象:LED 常亮

比如比较简略关键是配好输出通道

CCER

15 14131211 109 87 6543210

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); //设置单脉冲形式

便是这个试验。其实手册上关于此试验的原意是由一个外部触发使能计数器,然后发生一个脉冲的,这儿还没触及从形式所以简化处理。

触及寄存器

CR1

9 8 7 6 5 4 3 2 1 0

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的搅扰会滤除。

相关寄存器

CR1

9 8 7 6 5 4 3 2 1 0

CKD[1:0]

ARPE

CMS[1:0]

DIR

OPM

URS

UDIS

CEN

PSC

ARR

CCMR1(输入)

IC2F[3:0]

IC2PSC[1:0]

CC2S[1:0]

IC1F[3:0]

%&&&&&%1PSC[1:0]

CC1S[1:0]

CCER

15 14131211 109 87 6543210

CC4P

CC4E

CC3P

CC3E

CC2P

CC2E

CC1P

CC1E

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/258385.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部