第6章高级定时器TIMXppt课件.pptx
《第6章高级定时器TIMXppt课件.pptx》由会员分享,可在线阅读,更多相关《第6章高级定时器TIMXppt课件.pptx(102页珍藏版)》请在三一办公上搜索。
1、STM32定时器的工作原理,STM32之所以能够实现定时,是单片机内部在计数脉冲(来自晶振)T = 1/F F为频率例如:我们以51单片机举例,假设单片机搭配12MHz的晶振,由于51单片机是12分频(即1个机器周期有12个时钟周期),则单片机的最小定时时间为 12MHz / 12 = 1MHzT = 1 / 1MHz = 1us,STM32定时器的工作原理,最小定时时间 T = 1 / 1MHz = 1us51单片机定时器:方式0 13位 最大定时时间间隔 213=8.192ms方式1 16位 最大定时时间间隔 216=65.536ms方式2 8位 最大定时时间间隔 28=256us,STM
2、32定时器的工作原理,由此我们知道对于一个定时器而言要做到精确定时需要关注2个内容1.分频器(分频比)2.定时计数器的值,STM32定时器类型,按功能划分 2个高级控制定时器 TIM1 TIM8可分配6个通道的三相PWM发生器(多用于电机控制) 4个普通定时器 TIM2 TIM3 TIM4 TIM5每个定时器有4个输入捕获/输出比较/PWM/脉冲计数,STM32定时器类型, 2个基本定时器 TIM6 TIM7 主要用于产生DAC触发信号 2个看门狗定时器 独立看门狗 窗口看门狗 系统时基定时器 SysTick24位递减计数器自动重加载常用于产生延时 us级 ms级,从图中可以看出,定时器的时钟
3、不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,图中的蓝色部分。下面以通用定时器2的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。,STM32高级定时/计数器,STM32高级定时/计数器,举个例子:当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1的最大频率只能为36MHz。如果APB1的预分频系数=2,则因为这个倍频器,TIM27仍然能够得到72MHz
4、的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。,基本定时器寄存器示意图,STM32定时器的时钟,CK_CNT 表示定时器工作频率TIMx_PSC 表示分频系数则定时器的工作频率计算公式为CK_CNT=定时器时钟/ (TIMx_PSC +1)由此我们可得到STM32单片机1个时钟周期为: T=1/ CK_CNT,例如普通定时器模块的时钟为72MHz,分频比位7199,那么我们想要得到一个1秒钟的定时,定时计数器的值需要设定为TIMx_ARR = 10 000因为72 000 000 / 7200 = 10KHz时钟周期T=1/10KHz=100us1
5、00us 10 000 = 1S结论 :分频比7199 定时计数器的值 10 000定时时间T公式为:T=(TIMx_PSC +1)(TIM_Period)/TIMxCLK,举例:基本定时器编程步骤,定时器相关的库函数主要集中在固件库文件stm32f10 x_tim.h和stm32f10 x_tim.c文件中。1)TIMx时钟使能。2)初始化定时器参数,设置自动重装值,分频系数,计数方式等。 在库函数中,定时器的初始化参数是通过初始化函数TIM_TimeBaseInit实现的:voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeD
6、ef*TIM_TimeBaseInitStruct);3)允许中断发生。 在库函数里面定时器中断使能是通过TIM_ITConfig函数来实现的: voidTIM_ITConfig(TIM_TypeDef*TIMx,uint16_tTIM_IT,FunctionalStateNewState);,基本功能:定时器7定时时间为0.5秒,定时时间到达后,翻转LED灯的状态,达到LED灯闪烁的效果,闪烁周期1秒,举例:基本定时器编程步骤,4)TIMx中断优先级设置。在定时器中断使能之后,因为要产生中断,必不可少的要设置NVIC相关寄存器,设置中断优先级。5)允许TIMx工作,也就是使能TIMx。在固件
7、库里面使能定时器的函数是通过TIM_Cmd函数来实现的:6)编写中断服务函数。在最后,还是要编写定时器中断服务函数,通过该函数来处理定时器产生的相关中断。在中断产生后,通过状态寄存器的值来判断此次产生的中断属于什么类型。然后执行相关的操作,,举例:基本定时器,基本功能:定时器7定时时间为0.5秒,定时时间到达后,翻转LED灯的状态,达到LED灯闪烁的效果,闪烁周期1秒编程步骤:1、开时钟void RCC_Configuration(void) SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB1P
8、eriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);,举例:基本定时器,2)配置GPIO口:void GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; /LED1 V6 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, ,举例
9、:基本定时器,3)配置中断分组(NVIC),并使能中断void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel =TIM7_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /抢占优先级 0 NVIC_InitStructure.NVIC_IRQChannelSubPriority
10、= 0;/子优先级0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/使能 NVIC_Init(,举例:基本定时器,4) 配置TIMER;利用TIM_DeInit()函数将Timer设置为默认缺省值;TIM_InternalClockConfig()选择TIMx来设置内部时钟源;TIM_Perscaler来设置预分频系数;TIM_ClockDivision来设置时钟分割;TIM_CounterMode来设置计数器模式; TIM_Period来设置自动装入的值 TIM_ARRPerloadConfig()来设置是否使用预装载缓冲器 TIM_ITCo
11、nfig()来开启TIMx的中断,举例:基本定时器,3)-(6)步骤中的参数由TIM_TimerBaseInitTypeDef结构体给出。步骤(3)中的预分频系数用来确定TIMx所使用的时钟频率,具体计算方法为:CK_INT/(TIM_Perscaler+1)。CK_INT是内部时钟源的频率,是根据2.1中所描述的APB1的倍频器送出的时钟,TIM_Perscaler是用户设定的预分频系数,其值范围是从065535。定时器频率=(1+TIM_Prescaler )/72M)*(1+TIM_Period ),举例:基本定时器,例:如果想要设置定时器频率为1秒,可以设置TIM_Prescaler=
12、35999,TIM_Period=1999 /2Khz的频率,计数到2000或TIM_Prescaler=7199,TIM_Period=9999 /10KHz的频率,计数到10000但是在作为PWM输出时会有细度不同的问题,后者的细度更高些,更倾向于第二种配置。,举例:基本定时器,void TIM_Configuration(void)TIM_DeInit(TIM7);TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Prescaler = 36000-1; / 分频36000 TIM_TimeBa
13、seStructure.TIM_CounterMode = TIM_CounterMode_Up; /计数方向向上计数 TIM_TimeBaseStructure.TIM_Period = 1000;/自动重装载寄存器的值 TIM_TimeBaseStructure.TIM_ClockDivision = 0 x0;/时钟分频 TIM_TimeBaseInit(TIM7,举例:基本定时器,5)中断服务子程序Void TIM7_IRQHandler(void)if (TIM_GetITStatus(TIM7,TIM_IT_Update)=SET) GPIO_WriteBit(GPIOB, GPI
14、O_Pin_5, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5) );/ TIM_ClearITPendingBit (TIM7,TIM_FLAG_Update);,不是说使用了IO的复用功能就一定要启动RCC_APB2Periph_AFIO的Clock的,(参考手册8.4)只有使用了AFIO的事件控制寄存器、AFIO的重映射功能以及外部中断(EXTI)控制寄存器才需要开启AFIO的时钟,STM32参考手册从来没说过使用IO的复用功能就一定要开启AFIO时钟,这是个误区。例如下面的,最常用的USART1,如果你的板子上,默认用的就
15、是PA9和PA10这两个IO作为USART1的TX和TX,那么也就是没有重映射,No Remap,这种情况下根本不需要开启AFIO时钟,只要开启USART1的外设时钟就行了,第6章高级定时器TIM1.TIM8,定时器的应用:定时操作,完成与时间相关的任务。另一种情况是计数操作。,6.1 定时和计数功能的实现方式,6.1.1、完全硬件实现 完全硬件电路实现,没有软件参与,可靠性高,但是通用性和灵活性差,一但设计好很难修改,如果需要修改,心须改变硬件的元器件戓线路,每次应用心须重新设计。6.1.2、纯软件方式,6.1.3 可编程定时/计数器,可编程定时/计数器时钟源来自内部系统时钟时,则定时/计数
16、值就可以完成精密的定时,如果时钟源来自外部信号时,可编程定时/计数器就可以完成信号计数。 为了扩大定时/计数的范围,可编程定时/计数器经常附加设计了预分频计数器,对时钟进行分频操作。 可编程定时/计数器的启动、停止、定时间隔、预分频设置,工作模式等控制操作均可以通过软件实现。 通过这种方法实现的定时/计数具有不占用CPU时间,定时准确,定时/计数器可编程,可以重复利用,实现成本低,通用性强,实现灵活等优点,是目前使用最多的一种定时/计数方式,6.2 STM32高级定时/计数器,TIM1和TIM8称为高级控制定时器,功能最强:TIM2TIM5称为通用定时器:TIM6和TIM7称为基本定时器:更详
17、细内容见223页表6-1,STM32高级定时/计数器,STM32系列的CPU,有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。其它6个为普通和基本定时器,时钟由APB1的输出产生。 这些定时器使STM32具有定时、信号的频率测量、信号的PWM测量、PWM输出、三相6步电机控制及编码器接口等功能,都是专门为工控领域量身订做的。,6.2.1高级定时器的主要特性,TIM1和TIM8定时器的功能包括: 16位向上、向下、向上/下自动装载计数器 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1655
18、35之间的任意数值 多达4个独立通道: 输入捕获 输出比较 PWM生成(边缘或中间对齐模式) 单脉冲模式输出,6.2.1高级定时器的主要特性, 死区时间可编程的互补输出 使用外部信号控制定时器和定时器互联的同步电路 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态,6.2.1高级定时器的主要特性, 如下事件发生时产生中断/DMA: 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) 输入捕获 输出比较 刹车信号输入 支持针对定位的增量(正
19、交)编码器和霍尔传感器电路 触发输入作为外部时钟或者按周期的电流管理,6.2.2 高级定时器概述,高级定时器结构框图见224页图6-2高级定时器可以划分为5个模块1 、时钟源选择2 、时基单元3 、输入捕获4 、比较输出5 、捕获比较寄存器,TIM用到的寄存器,6.4 高级定时器原理及应用,1 、时钟源内部系统时钟 内部系统时钟CK_INT来源于内部总线时钟,即APB2时钟。外部时钟模式1 外部时钟模式1触发输入信号可以选择共8种,触发输入的8种信号外部时钟模式1触发输入信号:内部触发0(ITR0) ;内部触发1(ITR1) ;内部触发2(ITR2) ;内部触发3(ITR3) ;通道1边沿检测
20、器(TI1F_ED) ;定时器外部输入1(TI1FP1) ;定时器外部输入2(TI2FP2) ;外部触发输入(ETRF) ;,外部时钟模式1结构图,外部时钟模式2计数器能够在外部触发管脚ETR上信号的每一个上升沿或下降沿计数。,外部时钟模式2结构图,编码器输入方式两个输入TI1和TI2通常被用来作为增量编码器的接口。注意:编码器模式和外部时钟模式2不兼容,因此不能同时操作。,编码器,图1为编码器的示意图,中间是一个带光栅的码盘,光通过光栅,接收管接收到高电平,没通过,接收到低电平。电机旋转一圈,码盘上有多少光栅,接受管就会接收多少个高电平。,编码器,增量式旋转编码器通过内部两个光敏接受管转化其
21、角度码盘的时序和相位关系,得到其角度码盘角度位移量增加(正方向)或减少(负方向)。下图为编码器的原理图:图2 增量式旋转编码器A,B两点对应两个光敏接受管,A,B两点间距为 S2 ,码盘的光栅间距分别为S0和S1。S0+S1的距离是S2的四倍。这样保证了A,B波形相位相差90度。旋转的反向不同,锯齿波A,B先到达高电平的顺序就会不同,如上图左侧所示,顺序的不同,就可以得到旋转的方向,编码器输入方式STM32的每个TIMER都有正交编码器输入接口,TI1,TI2经过输入滤波,边沿检测产生TI1FP1,TI2FP2接到编码器模块,通过配置编码器的工作模式,即可以对编码器进行正向/反向计数,编码器输
22、入方式两个输入TI1和TI2通常被用来作为增量编码器的接口。注意:编码器模式和外部时钟模式2不兼容,因此不能同时操作。,2 、时基单元 可编程高级定时器的核心部分是由一个16位计数器和与其相关的几寄存器构成。 计数器可以向上计数、向下计数或者双向计数。 预分频器可以将输入时钟频率按1-65536之间的任意值分频,由于这个控制寄存器带有缓冲器,因此它能够在运行时被改变。新的预分频系数在下一次更新事件到来时被采用。,定时器时基单元示意图,补充,1.影子寄存器预装载寄存器的概念应该是相对于影子寄存器来说的。影子寄存器是即时其作用的,而预装载寄存器的值只有传递到影子寄存器才能起作用,你可以把它理解为一
23、个缓存。设计预装载寄存器和影子寄存器的好处是,所有真正需要起作用的寄存器(影子寄存器)可以在同一个时间(发生更新事件时)被更新为所对应的预装载寄存器的内容,这样可以保证多个通道的操作能够准确地同步。如果没有影子寄存器,软件更新预装载寄存器时,则同时更新了真正操作的寄存器,因为软件不可能在一个相同的时刻同时更新多个寄存器,结果造成多个通道的时序不能同步,如果再加上例如中断等其它因素,多个通道的时序关系有可能会混乱,造成是不可预知的结果。,预分频器描述 预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。它是基于一个(在TIMx_PSC寄存器中的)16位寄存器控制的16位计数器。 因为
24、这个控制寄存器带有缓冲器,它能够在运行时被改变。新的预分频器的参数在下一次更新事件到来时被采用。 寄存器带有输出缓存器,所以可以中途改变它的值,预分频当器的参数从1变到2,预分频当器的参数从1变到4,计数器模式 向上计数模式:计数器从0计数到自动加载值,计数器溢出,然后重新从0开始计数。如果使用了重复计数器功能,在向上计数次数达到了设置的重复计数寄存器设置的次数时,才产生更新事件,否则每次计数器上溢时将产生更新亊件。,向上计数模式(N=36),向下计数模式在向下模式中,计数器从自动加载值开始向下计数到0 ,然后从自动加载值重新开始计数,如果使用了重复计数器,当向下计数次数达到了重复计数寄存器中
25、设定的次数后,将产生更新亊件(UEV) ,否则每次计数器下溢时才产生更新亊件。,向下计数模式(N=36),中央对齐模式(向上/向下计数)在中央对齐模式中,计数器从0计数到自动加载值,产生一个计数器上溢事件,然后向下计数到1并且产生一个计数器溢事件,然后再从0开始重新计数。根据设置中断标志位的不同,又分为中央对齐模式1、2、3,具体参考教材p225,向上/向下计数模式,6.4.2 重复计数器,“时基单元”解释了计数器上溢/下溢时更新事件(UEV)是如何产生的,然而事实上它只能在重复计数达到0的时候产生。这个特性对产生PWM信号非常有用。 只有 高级定时器具有重复计数功能。 这意味着在每N次计数上
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 定时器 TIMXppt 课件
链接地址:https://www.31ppt.com/p-1360050.html