STM32通用定时器学习

上传人:pu****.1 文档编号:556038256 上传时间:2022-11-03 格式:DOCX 页数:9 大小:132.41KB
返回 下载 相关 举报
STM32通用定时器学习_第1页
第1页 / 共9页
STM32通用定时器学习_第2页
第2页 / 共9页
STM32通用定时器学习_第3页
第3页 / 共9页
STM32通用定时器学习_第4页
第4页 / 共9页
STM32通用定时器学习_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《STM32通用定时器学习》由会员分享,可在线阅读,更多相关《STM32通用定时器学习(9页珍藏版)》请在金锄头文库上搜索。

1、STM32 入门篇之通用定时器彻底研究STM32 的定时器功能很强大,学习起来也很费劲儿,本人在这卡了 5 天才算看 明白。写下下面的文字送给后来者,希望能带给你点启发。在此声明,本人也是 刚入门,接触 STM32 不足 10 天,所以有失误的地方请以手册为准,欢迎大家拍 砖。其实手册讲的还是挺全面的,只是无奈 TIMER 的功能太复杂,所以显得手册 很难懂,我就是通过这样看手册:while(!SUCCESS)看手册才搞明白的!所以 接下来我以手册的顺序为主线,增加一些自己的理解,并通过11个例程对TIMER 做个剖析。实验环境是STM103V100的实验板,MDK3.2+Library2.东

2、西都不怎么 新,凑合用TIMER主要是由三部分组成:1 、 时基单元。2 、 输入捕获。3 、 输出比较。 还有两种模式控制功能:从模式控制和主模式控制。一、框图 让我们看下手册,一开始是定时器的框图,这里面几乎包含了所有定时器 的信息,您要是能看明白,那么接下来就不用再看别的了 为了方便的看图,我对里面出现的名词和符号做个注解:TIMx_ETR:TIMER外部触发引脚ETR:外部触发输入ETRP:分频后的外部触发输入ETRF:滤波后的外部触发输入ITRx:内部触发x(由另外的定时器触发)TI1F_ED:TI1的边沿检测器。TI1FP1/2:滤波后定时器1/2的输入TRGI:触发输入TRGO:

3、触发输出CK_PSC:应该叫分频器时钟输入CK_CNT:定时器时钟。(定时周期的计算就靠它)TIMx_CHx:TIMER的输入脚TIx:应该叫做定时器输入信号xICx:输入比较x ICxPS:分频后的ICxOCx:输出捕获x OCxREF:输出参考信号 关于框图还有以下几点要注意:1 、 影子寄存器。 有阴影的寄存器,表示在物理上这个寄存器对应 2 个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预 装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄 存器,称为shadow register(影子寄存器);输入滤波机制在ETR何TIx输入端有个输

4、入滤波器,它的作用是以采样频率 Fdts来采样N次进行滤波的。2、 输入引脚和输出引脚是相同的。二、时基单元时基单元有三个部分: CNT、PSC、ARR。 CNT 的计数方式分三种:向上、向下、中央对齐。通俗的说就是 0ARR、ARR0、0(ARR-1)ARR1.三、时钟源的选择 这个是难点之一。从手册上我们看到共有三种时钟源:1、内部时钟。也就是选择 CK_INT 做时钟,这个简单,但是有一点要注意,定 时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1 或 APB2 的一个倍频器, 当 APB1 的预分频系数为 1 时,这个倍 频器不起作用,定时器的时钟频率等于 APB1

5、的频率;当 APB1 的预分频系数为其它数值(即预分频系数为 2、4、8 或 16)时, 这个倍频器起作用,定时器的时钟频率等于 APB1 的频率两倍。 例如AHP 72M, APB12分频36M,那么TIMER就是APB1的2倍频, 即 72M。怎么选择时钟模式1呢?只要将SMCR中SMS2:0弄成000就好 了SMCR1514131211 10 9 87654321 0ETPECEETPS1:0ETF3:0MSMTS2:0SMS2:02、外部时钟模式 1这个比较麻烦,时钟源选择的其实就是TRGI (触发输入),但触 发输入选择挺多的,共8个。看框图,他们是:ITRx、TI1F_ED、 TI

6、1FP1、TI2FP2、ETRFITRx 的东西跟定时器的级联有关,暂时不管他。要进入这种时 钟模式首先置 SMS 为 111,当然这还没完,不像内部时钟那样, 什么都配好了,这里你还得配置一下别的参数,比如选择 TI1FP1, 自然要对输入通道 1 的参数配置好,这样时钟才能按你需要的方相关寄存器CCMR1 (输入)IC2F3:0IC2PSC1:0CC2S1:0IC1F3:0IC1PSC1:0CC1S1:0CCER15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0CC4PCC4ECC3PCC3ECC2PCC2ECC1PCC1ESMCR15 14 13 12 11 10

7、 9 8 7 6 5 4 3 2 1 0ETPECEETPS1:0ETF3:0MSMTS2:0SMS2:0在CCMR1寄存器里选择好相应的输入(CC1S)和滤波(IC1F)后再配置好输入极性 (CCIP)然后在SMCR中选择触发源(TS2:0)为TI1这样输入通道就配好了! 最后选择SMS为111,开启时钟(CR1中的CEN)。现在时钟就是从TI1上的输入 了,可以接个时钟源进行计数之类的。同理,如果要用ETR就把它相关通道配好 就可以了。3、 外部时钟模式 2选择外部输入作为时钟,看框图从图上可以看出 ETR 可以直接作为时钟输入也可以通过触发输入 (TRGI)来作为时钟输入即在时钟模式1中

8、触发源选择为ETR,两个效 果上是一样的,看起来好像这个外部时钟模式2没什么用处,实际上不 是的,他可以跟一些从模式(复位、触发、门控)进行组合。比如当从 模式选为触发时,我们不可能再通过触发源选择ETR 了,因为从模式控 制器被占了,好在有外部时钟模式2,我们选择这种模式后就可以把两 者组合在一起完成一些功能了。总结一下,STM32的时钟选择比较特别,在SFR中关于时钟选择配置位 不再一块,不是说两个位在一起00、01、11 就选择了而是由SMCR中SMS和ECE来控制,这样感觉可以吧内部时钟与外部模式2同 时打开(SMS:000,ECE:1),也可以吧外部模式1和外部模式2同时打开 (SM

9、S:111,ECE: 1),实际上上述两种方式用的都是外部时钟2.四、捕获比较通道这就是我说的定时器三个组成部分中的两个部分了。核心是那个捕获比 较寄存器。看框图异或那块先不管他,好像跟编码器有关,输入有个特色就是可以把 TI的输入搞到CC1上去,也可以把T2的输入搞到CC1上去,其实也可 以把 T1 搞到 CC1 上去同时把 T1 搞到 CC2 上去,这样就有了后来的 PWM 输入。输出上的特色是不直接输出,而是有个OC1REF,这样可以定义高有效 还是低有效,输出自己需要的有效电平。五、做实验讲了这么多你一定烦了吧,那么让我们搞点实际的吧,通过做实验来熟 悉定时器,用到新知识时再在其中加以

10、介绍。实验一: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

11、(TIM2, &TIM_TimeBaseStructure);TIM_PrescalerConfig(TIM2,0x8C9F,TIM_PSCReloadMode_Immediate) ;/时钟分频系数 36000,所以定时器时钟为 2KTIM_ARRPreloadConfig(TIM2, DISABLE);/禁止 ARR 预装载缓冲器TIM_Cmd(TIM2, ENABLE); / 开启时钟解释一下,首先得配好ARR,这是必须地。然后配置预分频,为什么 我先配为 0 再用TIM_PrescalerConfig(TIM2,0x8C9F,TIM_PSCReloadMode_Immediate) 配

12、呢,原来PSC也有个预装载功能,却不像ARR和CRR那样有相关的位 控制立即装载或更新事件装载。也就是说只能更新事件来装载。在上面 函数中手工产生了一个更新事件,使PSC立刻生效。CK_DIV暂时没用 到。计数模式配置为向上计数。然后在中断中做下LED取反就可以了。 溢出周期怎么算?在这个实验里AHB为72M, APB1为36M,所以CK_INT 为72M,36000分频变为2K.ARR=2000,所以1秒溢出1次。相关寄存器:CR19876543210CKD1:0ARPECMS1:0DIROPMURSUDISCENARRPSC接下来的 4 个实验跟输出通道有关系 实验 2TIMER-2:强置

13、输出 现象:LED常亮例子比较简单关键是配好输出通道CCER15 141312 11 10987 6543 210CC4PCC4ECC3PCC3ECC2PCC2ECC1PCC1ECCMR (输出)OC2CEOC2M2:0OC2PEOC2FECC2SOC1CEOC1M2:0OC1PEOC1FECC1S将通道 1 配为输出,输出使能,输出极性选择好,输出模式选择好就可 以了。在V100实验板上PC6-9接了 LED,刚好对应着TIMER3重映射后 的输出,注意程序里的AFIO函数。实验3TIMER-3:输出比较现象:LED 2秒的周期闪烁。跟上个实验配置大致相同,只是把输出模式改为翻转功能,并且

14、CRR 要配好,当CRR=CNT时翻转输出。实验 4TIMER-4:PWM 输出现象:输出4种不同占空比的PWM波,4个LED亮度不同。实验 5TIMER-7: 单脉冲方式 现象: LED 只闪烁一次。将上个实验加一句话TIM_SelectOnePulseMode(TIM3, TIM_OPMode_Single); /设置单 脉冲模式 就是这个实验。其实手册上关于此实验的本意是由一个外部触发使能计 数器,然后产生一个脉冲的,这里还没涉及从模式所以简化处理。 涉及寄存器CR19876543210CKD1:0ARPECMS1:0DIR1)PMURSUDISCEN接下来再做两个输入的实验实验 6TIMER-5 :输入捕获模式。现象:通过V100的JOYSTICK键的SELECT键进入捕获,硬件仿真看CRR 的值。首先是基本的配置:ARR的值、时钟PSC、采样CKD、计数方式。 然后配置输入通道。选择输入捕获模式、输入极性、把 T1 配到 CC1 上、选好输入的滤波跟 分频,就可以了。讲下输入滤波功能,在此实验中Fdts=CK_INT/2,Fsample=Fdts/4,所以 定时器时钟为2K,所以采样周期为4ms。才8次的话周期小于32ms的 干扰会滤除。相关寄

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号