版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、TIME定时器详解1STM32单片机的定时器的确很强大,参考说明书中就占了一百多页,占参考手册1/4有多了。STM32的定时器分了好几个类别,各个类别针对功能作用都不大相同。分有:一、高级定时器二、通用定时器三、基本定时器四、看门狗定时器五、SysTick定时器其中看门狗定时器和 SysTick定时器本篇笔记阐述,这里主要记下对平时使用定时器 作用的计时计数器的一些自己的理解。按照参考手册中的定义高级定时器通用定时器基本定时器,这三个定时器成上下级的关系,即基本定时器有的功能通用定时器都有,而且还增加了向下、向上/向下计数器、PWM生成、输出比较、输入捕获等等功能;而高级定时器又包含了通用定时
2、器的所有功能,另外还增加了死区互补输出、刹车信号、加入重复计数器等等。 (这里等等功能请参考STM32 参考手册)所以学习STM32定时器实际就是学习一下高级定时器,然后适当的删减后就是后面 的两种定时器了。假若不涉及输出输入,定时器的最基本用法就是计数定时作用了本篇笔记主要针对这部分的 理解所写下的。高级定时器中一共有 20个寄存器:TIMx_CR1、TIMx_CR2、TIMx_SMCR、TIMx_DIER、TIMx_SR、TIMx_EGR、TIMx_CCMR1、 TIMx_CCMR2、TIMx_CCER、TIMx_CNT、TIMx_PSC、TIMx_ARR、TIMx_RCR、TIMx_CC
3、R1、 TIMx_CCR2、TIMx_CCR3、TIMx_CCR4、TIMx_BDTR、TIMx_DCR、TIMx_DMAR好吧一堆寄存器光看都看到眼花缭乱了,当然不是所有寄存器都涉及到才能让定时器工作的,例如最基本的定时功能所涉及的只有几个与时基功能相关的寄存器,TIMx_CNT (计数器寄存器)、TIMx_PSC (预分频器寄存器)、TIMx_ARR (自动装载寄存器)、TIMx_RCR(重复次数寄存器)。参考手册中有那么衣服定时器的框图。这几个寄存器的关系如图所示的:CK_PSC这根时钟线上的时钟源的选择,即给定时器计数计时的时钟源的输入方式,有四 种方式,分别是内部时钟,外部时钟模式1
4、,外部时钟模式2,内部触发。这部分日后再说,这里暂且使用最常用的内部时钟方式,既是当内部时钟为72MHz的内部时钟源。如图所示的,时钟源首先进入预分频器,然后再进入预先装入自动重装载寄存器的计数器中, 当计数器溢出时产生一次中断和一次事件更新。除了多了一个PSC,其他的基本和51单片机很相似,初次看参考手册中的功能描述中出现了好多次更新事件(UEV)”。这究竟是怎么的一样东西呢?在这里有个新概念叫 影子寄存器”,在上图中,可以看到PSC、ARR、REP(重复计数器中的低八位)这三个寄存器框框下都有个黑影,每次这三个寄存器就是影子寄存器,如果看到参考手册全图中还可以看到另外还有几个框框下也有阴影
5、部分的,这几个寄存器也是影子寄存器。何谓影子寄存器呢,例如PSC寄存器可以理解为有两个,一个是用户可以访问到的寄存器,可读可写,另一部分就是客户访问不到的但其装载值和实际寄存器是密切关联的,当程序在运行中改写 PSC这时候影子寄存器的作用就体现了,因为立刻写入的值可能会大于或小于目前正在运行的寄存器中的数值,而真实在运行时候的正是这个影子寄存器中的值,而程序写入的是可访问的寄存器,只有当产生一个更新事件的时候影子寄存器才会读入访问寄存器中的值,这样就可以防止突然修改而产生的非正常中断或不会中断等异常问题。当然在控制器 CR1中控制这个影子寄存器是否起作用,不起作用的话就是立 即写入这个数值到寄
6、存器中。下面两幅是参考手册中的相关时序图:图5了计数器时序妙为ARPE丸时的更新事件(TIMx ARR没冇预装入)ck_psc JurLTLrLrLrLrLrLrLrLrLrLrLrLrLn宦时找卄ykqtnnrnnnnnnnnnnr数器奇打捲二回回冈囤(区回一计数器誉出n里新事(UEV)n口动加孤奇存赛打人新敌値土 TIMx AFt舁寄存器世口外t界eewar/deflijtt.w回头再说一下 更新事件(UEV)”,当计数器溢出的时候产生一次UEV事件,另外还可以在事件寄存器TMx_EGR中的UG位软件写入产生一次事件更新,当UEV事件来临的时候所有影子寄存器均载入寄存器中的值,从而实现所有
7、带影子寄存器的更新,而不启用影子寄存器的情况下只能实现,写那个寄存器更新那个寄存器而,这可能造成相关联的寄存器产生冲突矛盾,建议还是开启此功能,在下一个溢出周期后产生事件更新。(既然说到了影子寄存器也说点自己的猜测,了解了点STM32单片机的都知道几乎所有寄存器都是32位的,唯独TIM寄存器是16位的,是的如果是 32位的计数器我们可 能还能做更宽广的定时作用。但我们也还是发现即使加入了影子寄存器而整体的寄存器地址 依然保持是连续的,这我猜测一种可能性寄存器本身其实还是32位的,但高位提供了影子寄存器的载入功能,所以依然能保持地址连续性,只要设定了高位禁止访问即可。官方资料和搜索中均未有任何确
8、认说法,纯粹本人猜测未得到官方任何证实)另外高级定时器中还有 RCR重复次数寄存器这个,也是比较简单的事件更新(UEV)都是在RCR为0的情况下产生计数器溢出而产生的,当RCR中不为0的时候计数器溢出只会使得重复次数寄存器递减而不会产生UEV,这样就可以使得定时器的定时情况得以延长,而相当于有16位的分频器,16位的计数器,再加入 16位的重复次数,一共 48位的计数 定时器。详细看参考手册,这个很好理解。基本的基时单元就是上面提及的这几个,下面看看3.0库是如何实习的基本使用。TIM_TimeBasel ni tTypeDef TIM_TimeBaseStructure;TIM_Del ni
9、t(TIM2);重新将Timer设置为缺省值TIMn ternalClockCo nfig(TIM2);时钟源II采用内部时钟给TIM2提供TIM_TimeBaseStructure.TIM_Prescaler = 36000 - 1;36000-1,这样计数器时钟为 72MHZ/36000 = 2kHzII预分频系数为TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;II设置时钟分TIM_TimeBaseStructure.TIM_Cou nterMode = TIM_Cou nterMode_Up; II模式为向上计数模式设置计数
10、器TIM_TimeBaseStructure.TIM_Period = 2000 - 1;2000个数就产生一个更新事件TIM_TimeBaseI nit(TIM2, &TIM_TimeBaseStructure);TIM_ClearFlag(TIM2, TIM_FLAG_Update);II设置计数溢出大小,每计II将配置应用到TIM2中II清除溢出中断标志TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);II开启 TIM2 的中断以上是一个最基本的定时器配置的代码,载自网上被转载无数次的地方中断函数自己按照需求写,这里不多说。在库中的初始化函数和初始化数据类型
11、有3类,TIM_TimeBaseInitTypeDef 、TIM_OCInitTypeDef、TIMClnitTypeDef 与基时参数相关的数据类型是TIM_TimeBaseI ni tTypeDeftypedef structuin t16_t TIM_Prescaler;clock.I*! Specifies the prescaler value used to divide the TIMThis parameter can be a nu mber betwee n 0x0000 and0xFFFF *Iui nt16_t TIM_Cou nterMode;I*! Specifie
12、s the coun ter mode.This parameter can be a value of refTIM_Cou nter_Mode */uin t16_t TIM_Period;/*! Specifies the period value to be loaded into the activeAuto-Reload Register at the n ext update event.This parameter must be a nu mber betwee n 0x0000 andOxFFFF. */ui nt16_t TIM_ClockDivisio n;/*! Sp
13、ecifies the clock divisio n.This parameter can be a value of refTIM_Clock_Division_CKD */uin t8_t TIM_Repetiti onCoun ter; /*!TIM_Cou nterMode);assert_param(IS_TIM_CKD_DIV(TIM_TimeBaseI ni tStruct-TIM_ClockDivisio n);tmpcr1 = TIMx-CR1;if(TIMx = TIM1) | (TIMx = TIM8)| (TIMx = TIM2) | (TIMx = TIM3)|(T
14、IMx = TIM4) | (TIMx = TIM5)/* Select the Cou nter Mode */tmpcrl &= (ui nt16_t)(ui nt16_t)(TIM_CR1_DIR | TIM_CR1_CMS);tmpcrl |= (ui nt32_t)TIM_TimeBasel nitStruct-TIM_Cou nterMode;if(TIMx != TIM6) & (TIMx != TIM7)/* Set the clock divisio n */tmpcrl &= (ui nt16_t)(ui nt16_t)TIM_CR1_CKD);tmpcrl |= (ui
15、nt32_t)TIM_TimeBasel nitStruct-TIM_ClockDivisio n;TIMx-CR1 = tmpcrl;/* Set the Autoreload value */TIMx-ARR = TIM_TimeBaseI nitStruct-TIM_Period ;/* Set the Prescaler value */TIMx-PSC = TIM_TimeBaseI ni tStruct-TIM_Prescaler;if (TIMx = TIM1) | (TIMx = TIM8)| (TIMx = TIM15)| (TIMx = TIM16) | (TIMx =TI
16、M17)/* Set the Repetition Cou nter value */TIMx-RCR = TIM_TimeBaseI nitStruct-TIM_Repetitio nCou nter;/* Gen erate an update event to reload the Prescaler and the Repetiti on coun ter values immediately */TIMx-EGR = TIM_PSCReloadMode_lmmediate;可以看3.0后的函数里把所有的 TIMx都加入一个函数里面做判断了,不需要和2.0的区分TIM1和TIM两类函数
17、,比较其基本操作都一样无非就是多了一个两个寄存器而已。程序中可以看到这一段:if(TIMx = TIM1) | (TIMx = TIM8)| (TIMx = TIM2) | (TIMx = TIM3)|(TIMx = TIM4) | (TIMx = TIM5)/* Select the Cou nter Mode */tmpcrl &= (ui nt16_t)(ui nt16_t)(TIM_CR1_DIR | TIM_CR1_CMS); tmpcrl |= (ui nt32_t)TIM_TimeBasel nitStruct-TIM_Cou nterMode;if(TIMx != TIM6)
18、& (TIMx != TIM7)/* Set the clock divisio n */tmpcrl &= (ui nt16_t)(ui nt16_t)TIM_CR1_CKD);tmpcrl |= (ui nt32_t)TIM_TimeBasel nitStruct-TIM_ClockDivisi on;TIMx-CR1 = tmpcrl;高级定时器和通用定时器拥有向上计数、向下技术、向上/向下模式,三种,而基本计时器只有向上计数一种, 因此TIM6和TIM7木有的设置计数模式,tmpcrl首先装入了控制寄 存器CR1d值,然后把其中 DIR (位4)和CMS (位6:5)清除,然后或运算上载入数据 结构中的值,这里代码再跳转到 stm32f10x_tim.h中第362行(ui nt16_t)0x0000)(ui nt16_t)0x0010)(ui nt16_t)0x0020)(ui nt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冬天酒店营销方案(3篇)
- dvs监控施工方案(3篇)
- 奶酪营销推广方案(3篇)
- 体育文案营销方案(3篇)
- 卖场全年营销方案(3篇)
- 悬吊架施工方案(3篇)
- 捻缝施工方案(3篇)
- 施工方案南京江宁(3篇)
- 橡树广告营销方案(3篇)
- 河段治污施工方案(3篇)
- 建筑幕墙铝单板工程施工方案
- 耳鼻喉科室消毒流程
- 基于深度学习的植被智能识别技术研究
- 养老护理主管工作汇报
- 2025年职业卫生健康培训考试试题及解析答案
- 2025年新版GMP培训试题库及答案
- 敦煌壁画配色赏析课件
- 2021建筑给排水设计技术措施
- 2025至2030年中国同步调相机行业市场竞争格局及发展趋势预测报告
- 退伍留疆考试题库及答案
- KM70型车辆技术资料
评论
0/150
提交评论