微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32通用定时器(时钟选择,模式选择)

STM32通用定时器(时钟选择,模式选择)

时间:11-28 来源:互联网 点击:

把两者组合在一起完成一些功能了。

总结一下,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,所以定时器时钟为2K

TIM_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

9876543210

CKD[1:0]

ARPE

CMS[1:0]

DIR

OPM

URS

UDIS

CEN

ARR

PSC

接下来的4个实验跟输出通道有关系

实验2

TIMER-2:强置输出

现象:LED 常亮

例子比较简单关键是配好输出通道

CCER

15 14131211 10987 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

9876543210

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

9876543210

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]

IC1PSC[1:0]

CC1S[1:0]

CCER

15 14131211 10987 6543210

CC4P

CC4E

CC3P

CC3E

CC2P

CC2E

CC1P

CC1E

实验7

TIMER-6:PWM输入

现象:由TIMER3输出通道1产生一路周期2秒占空比50%的PWM波,飞线到TIMER4的输入通道1,有TIMER4来测量该PWM得周期和占空比。

在做实验之前引入三种从模式控制:复位、触

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top