STM32F10XX通用定时器应用指南
湖北文理学院 阮海蓉
在STM32微处理器中,定时器是使用频率最高、用途最广、变化组合最灵活的部件,初学者往往不得要领。本文提纲携领,帮助初学者入门。介绍中以通用定时器为基本对象,高级定时器和基本定时器是在通用定时器的基础上增减了几种功能,在弄懂通用定时器以后就不难理解了。
固件库升级到STM32F10x_StdPeriph_Lib_V3.5.0后,定时器部分与使用手册UM0427有了较大改变,本文做了修订。
通用定时器(TIM2~5)
图1:通用定时器框图
图2:主从定时器实例
1. 每个通用定时器(TIM2~5)的主要组成部件:①一个16位的预分频器(图1中的PSC),对输入的
计数脉冲进行预分频;②一个16位的计数器(图1中的CNT),计数器可以按给定数值向上计数、向下计数、中央对齐(循环向上向下计数)方式工作;③一个主模式控制器(在图2中),用于输出信
1
2. 3.
4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
17.
18. 19. 20. 21. 22. 23. 24.
号(图1及图2中的TRGO)到另一个定时器(也可以是其他部件),供其作为时钟源或触发源使用;④一个从模式控制器(在图1和图2中),用于选择时钟源和触发源;⑤四个捕获/比较控制器(图1中),用于纪录某一输入事件发生时的计数器当前值或用于在计数器到达某一预定数值时使输出发生变化。
预分频器PSC在被使用时其值会自动加上1,即其值为0时不分频,为1时2分频……。 时钟源:①内部时钟(来自APB1),SMS[2:0]=000,ECE=0;②外部引脚ETR(外部时钟模式2,滤波分频后的指定边沿),ECE=1;③由从模式控制器提供的3种可±1的编码器模式(共3种);④由从模式控制器提供的TRGI源(即外部时钟模式1)。
使用内部时钟且APB1分频系数不为1时,定时器时钟=(AHP频率/APB1分频系数)×2。 TRGI源:①外部触发ETR(外部时钟模式1,滤波分频后的指定边沿);②TRC源(见图1);③TI1FP1(来自于输入TI1经滤波和边沿检测)④TI2FP2(来自于输入TI2经滤波和边沿检测)。 TRC源:①来自另一定时器主模式控制器的输出ITR0~ITR3(各定时器定义不同);②来自外部输入TI1(本定时器的CH1或者CH1、CH2和CH3的异或)的跳变边沿(上升沿+下降沿)TI1F_ED。 计数器影子寄存器:放置计数器向上计数时溢出值、向下计数时重装值的寄存器。 更新:重置预分频寄存器和计数器的影子寄存器。
复位:重置预分频寄存器和计数器影子寄存器,清除现存分频值,计数器从0或溢出值开始计数。复位会产生更新事件,更新事件并不会产生复位。 触发:计数器启动、停止、初始化。
更新事件可由计数器上溢/下溢、设置UG位和从模式控制器发出的复位产生,可以被UDIS=0关闭。 计数器可设定为发生更新时不停止和停止(单脉冲模式)。
写入自动重装载寄存器TIMx_ARR,可以选择立即更新到计数器影子寄存器(ARPE=0)或暂不更新(ARPE=1)。
写入预分频寄存器TIMx_PSC后,要在发生更新后才能装载到影子寄存器中。
设置UDIS=1可以禁止更新事件,但是设置UG位以及从模式控制器发出的复位可以使计数器和预分频器被重新初始化。
主模式控制器的输出可作为另一定时器的输入,主模式控制器可使用以下事件中的一个作为输出:①本定时器复位(设置UG或由TRGI引起);②本定时器使能(CEN=1或从模式控制器的触发);③本定时器更新;④捕获/比较通道1上一次成功的输入捕获/输出匹配(CC1IF);⑤指定通道1~通道4中的一个,其输出有效(OC1REF~OC4REF)。
从模式控制器可以将输入作为本定时器的时钟源或控制源,控制方式有:①关闭从模式,即TRGI无效;②编码器模式1,根据TI1FP1的电平,计数器在TI2FP2的边沿向上/向下计数;③编码器模式2,根据TI2FP2的电平,计数器在TI1FP1的边沿向上/向下计数;④编码器模式3,根据另一信号的电平,计数器在TI1FP1和TI2FP2的边沿向上/向下计数;⑤复位,在TRGI的上升沿重新初始化计数器并产生更新信号;⑥门控,TRGI高电平时计数,TRGI低电平时停止计数;⑦触发,TRGI高电平时开始计数(若已在计数中则无影响);⑧外部时钟模式1:以TRGI作为计数脉冲,在TRGI的上升沿计数。
以上从模式控制器的8种状态,①为无效,②③④⑧为提供时钟源,⑤⑥⑦为提供控制源。 输入捕获的触发源:①本通道的输入(TIx映射到通道x);②相邻通道的输入(通道1、2为一组通道3、4为另一组);③TRC源。
使用TRC作为触发源时,时钟源只能是内部时钟或外部时钟模式2的ETRF。
输入捕获工作方式:触发源有效时,将计数器CNT的值复制到本通道的捕获/比较寄存器,并产生CCxIF标志请求中断和DMA。
在输入捕获模式下将同一个输入以相反的有效沿作用到两个相邻通道(限通道1和通道2),并对计数器复位,可实现PWM输入模式,这种模式用于测量输入波形的占空比。
ETR、TI1~TI4均配有边沿检测器和数字滤波器,边沿检测器可以设置为上升沿/下降沿,数字滤波器可以频率fCK_INT或fDTS/n连续采样N次后判定其状态,fDTS可设为时钟fCK_INT或fCK_INT/2、fCK_INT/4。 外部触发ETR配有预分频器(1、2、4、8)。
2
25. TRGI上的事件对本定时器的作用可以选择被延迟,以使本定时器与主模式控制器驱动的从定时器完
美同步。
26. 输出比较工作方式:在该通道的捕获/比较寄存器中预存一个值,当计数器CNT的数值与捕获/比较寄
存器的值相符时,设置或改变匹配输出OCxREF的状态,并产生CCxIF标志请求中断和DMA。 27. 输出比较的工作模式:①冻结,不起作用;②匹配时输出有效(高)电平;③匹配时输出无效(低)
电平;④匹配时翻转输出电平;⑤强制输出无效(低)电平;⑥强制输出有效(高)电平;⑦PWM模式1,计数器<寄存器时输出有效(高)电平,反之输出无效(低)电平;⑧PWM模式2,计数器<寄存器时输出无效(低)电平,反之输出有效(高)电平。
28. 以上8种输出比较的工作模式中,用于匹配有效的有②③④⑦⑧,用于独立操控的有⑤⑥。
29. 输出比较的匹配输出可设置为受ETRF控制:①输出与ETRF无关;②输出被ETRF高电平清0。 30. 使用OCxPE可以设置在写入4个通道寄存器时:①禁止预装载,即写入值立即启用生效(OcxPE=0);
②开启预装载,即写入值在下一次更新事件到来时启用(OcxPE=1)。 31. 输出信号可被同极性或反极性传送至指定引脚CH1~CH4。
32. 输出比较在中央对齐模式下,通道的中断标志可选择:①仅向上计数时被设置;②仅向下计数时被设
置;③向上和向下计数时均设置。
33. 定时器的中断和DMA可由以下事件引起:①计数器被触发;②计数器上溢/下溢、设置UG位和从模
式控制器产生的更新,其中后2种可以被关闭;③通道1~通道4发生捕获/匹配。
34. 定时器共有6个事件:触发TRGI有效、更新和4个捕获/比较通道匹配。事件可作为DMA和中断的
源。事件可设置事件产生寄存器TIMx_EGR中各标志的方法模拟产生。
高级定时器(TIM1~8)
图3:高级定时器框图
1. TIM1和TIM8的内部时钟来自APB2。
3
2. TIM8使用内部时钟且APB2分频系数不为1时,定时器时钟=(AHB频率/APB2分频系数)×2。
3. 高级定时器有重复次数计数器。启用重复次数计数器后,只有当溢出达到预定的重复次数后才会发生
更新。但软件以及从模式控制器产生的更新事件仍会立即更新。BBBB
4. 重复次数计数器RCR的值在被使用时会自动加1。其值为0时重复1次,为1时重复2次。 5. 输出增加CH1N、CH2N、CH3N作为CH1、CH2、CH3的互补输出。
6. CCxE=CCxNE=1时启用互补输出,此时OCx和OCxN的极性由CCxP和CCxNP决定。当CCxP和
CCxNP相同时,OCx和OCxN的有效电平是相反的,以保证推挽功率管不会同时导通。
7. 若启用了互补输出,则UTG对应设定一个死区时间。OCx和OCxN将延迟至死区时间后有效,以避
开推挽功率管的关断时间,确保2个推挽功率管关断在前,开通在后,不至发生短路环流。
8. COM:控制更新事件,若CCPC=1,则COM事件启动CCxE、CCNxE、OCxM更新。CCUS=0由写
入COMG产生,CCUS=1时由写入COMG位或TRGI产生。COM事件可以用来产生六步PWM输出。 9. 运行模式(MOE=1)。OSSR=1:若CcxE=CcxNE=1,OCx和OCxN对应输出PWM波形;若CcxE、
CcxNE中一个为1, CcxE、CcxNE中为1的OCx和OCxN输出PWM波形,为0的OCx=CCxP、OCxN=CCxNP;CcxE=CcxNE=0:则使OCx=CCxP、OCxN=CCxNP,同时OCx和OCxN与定时器断开。OSSR=0:若CcxE=CcxNE=1,OCx和OCxN对应输出PWM波形;若CCxE、CCxNE中一个为1,OCx和OCxN中CcxE、CcxNE为1的输出PWM波形,为0的OCx=0、OCxN=0,同时OCx和OCxN与定时器断开;CcxE=CcxNE=0:则OCx=0、OCxN=0,同时OCx和OCxN与定时器断开。 10. 由运行模式(MOE=1)变为空闲模式(MOE=0)。OSSI=1:输出OCx=CCxP、OCxN=CCxNP,经过
一个死区时间后,OCx=OISx,OCxN=OISxN。OSSI=0:输出OCx=CCxP、OCxN=CCxNP,经过一个死区时间后,OCx=OISx,OCxN=OISxN,同时OCx和OCxN与定时器断开。
基本定时器(TIM6~7)
1. 基本定时器只能使用内部时钟,只有更新事件。 2. 基本定时器只有向上计数方式。
3. 主模式控制器的输出可作为另一定时器的输入,主模式控制器可使用以下事件中的一个作为输出:①
本定时器复位(设置UG或由TRGI引起);②本定时器使能(CEN=1或从模式控制器的触发);③本定时器更新。
4
TIM库函数
序号 1 2 3 4 5 6 7 8 9 10 函数名 TIM_DeInit TIM_TimeBaseInit TIM_OC1Init TIM_OC2Init TIM_OC3Init TIM_OC4Init TIM_ICInit TIM_PWMIConfig TIM_BDTRConfig TIM_TimeBaseStructInit 描述 将外设 TIMx 寄存器重设为缺省值 根据 指定的参数初始化 TIMx 的时间基数单位 根据 指定的参数初始化 TIMx 通道 1为输出比较模式 根据 指定的参数初始化 TIMx 通道 2为输出比较模式 根据 指定的参数初始化 TIMx 通道 3为输出比较模式 根据 指定的参数初始化 TIMx 通道 4为输出比较模式 根据 指定的参数初始化外设 TIMx为输入捕获模式 通道1和通道2 TIMx 1~17 1~17 1~5、8~17 1~5、8、9、12、15 1~5、8 1~5、8 1~5、8~17 12、15 根据 指定的参数设置外设 TIMx 工作在 PWM 输入模式,仅能使用1~5、8、9、设置刹车特性,死区时间,锁电平,OSSI,OSSR 状态和 AOE1、8 (自动输出使能) 把 TIM_TimeBaseInitStruct 中的每一个参数按缺省值填入 把 TIM_OCInitStruct 中的每一个参数按缺省值填入 把 TIM_ICInitStruct 中的每一个参数按缺省值填入 把 TIM_BDTRInitStruct 中的每一个参数按缺省值填入 使能或者失能 TIMx 外设(写CR_CEN) 使能或者失能 TIMx 外设的主输出(写BDTR_MOE) 使能或者失能指定的 TIM 中断(写DIER) 1~17 1、8、15~17 1~17 1~17 1~5、8、15~17 1~5、8、15~17 1~5、8、9、12、15 1~5、9、12、15 1~5、9、12、15 1~5、8 1~5、8 1~5、8 1~17 11 TIM_OCStructInit 12 TIM_ICStructInit 13 TIM_BDTRStructInit 14 TIM_Cmd 15 TIM_CtrlPWMOutputs 16 TIM _ITConfig 17 TIM_GenerateEvent 设置 TIMx 事件由软件产生(写EGR) 18 TIM_DMAConfig 19 TIM_DMACmd 20 21 22 23 24 TIM_InternalClockConfig TIM_ITRxExternalClockConfig TIM_TIxExternalClockConfig TIM_ETRClockMode1Config TIM_ETRClockMode2Config 设置 TIMx 的 DMA 接口(写DCR) 使能或者失能指定的 TIMx 的 DMA 请求(写DIER) 关闭从模式,使用内部时钟(SMCR_SMS=000) 设置 TIMx从模式使用外部时钟(ITR0~ITR3) 设置 TIMx 从模式使用外部时钟(TI1FED 、TI1FP1、TI2FP2) 配置 TIMx 从模式使用外部时钟模式 1(ETRF) 配置 TIMx 使用外部时钟模式 2(ETRF) 配置 TIMx 外部触发ETR参数(预分频、时钟极性、滤波器) 设置 TIMx 预分频+立即装载/等待更新(写PSC和EGR_UG) 设置 TIMx 计数器模式(写CR1_DIR和CR1_CMS) 5
25 TIM_ETRConfig 26 27
TIM_PrescalerConfig TIM_CounterModeConfig 1~5、8
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库STM32F10XX通用定时器应用指南在线全文阅读。
相关推荐: