基于ARM的单片机应用及实践 STM32案例式教学 武奇生第六章

上传人:E**** 文档编号:89108623 上传时间:2019-05-18 格式:PPTX 页数:59 大小:2.21MB
返回 下载 相关 举报
基于ARM的单片机应用及实践 STM32案例式教学 武奇生第六章_第1页
第1页 / 共59页
基于ARM的单片机应用及实践 STM32案例式教学 武奇生第六章_第2页
第2页 / 共59页
基于ARM的单片机应用及实践 STM32案例式教学 武奇生第六章_第3页
第3页 / 共59页
基于ARM的单片机应用及实践 STM32案例式教学 武奇生第六章_第4页
第4页 / 共59页
基于ARM的单片机应用及实践 STM32案例式教学 武奇生第六章_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《基于ARM的单片机应用及实践 STM32案例式教学 武奇生第六章》由会员分享,可在线阅读,更多相关《基于ARM的单片机应用及实践 STM32案例式教学 武奇生第六章(59页珍藏版)》请在金锄头文库上搜索。

1、第六章 STM32 定时器的使用,本章内容 STM32F的定时器简介 通用定时器时基单元 通用定时器特殊工作模式 定时器编程及实训,第六章 STM32 定时器的使用,STM32中一共有11个定时器: 2个高级控制定时器 4个普通定时器 2个基本定时器 2个看门狗定时器 1个系统嘀嗒定时器。 TIM1,TIM8是能够产生三对PWM互补输出的高级定时器,常用于电动机的控制。它们的时钟由APB2的输出产生。,TIM2TIM5是通用定时器: 输入捕获 输出比较 PWM 脉冲计数 TIM6和TIM7是基本定时器: 主要用于产生DAC触发信号,其时钟由APB1输出产生,第六章 STM32 定时器的使用,系

2、统时基定时器SysTick: 24位递减计数器 自动重加载 常用于产生延时us级、ms级 定时器的工作频率计算公式为 CK_CNT=定时器时钟/(TIMx_PSC+1) 其中CK_CNT表示定时器工作频率 TIMx_PSC表示分频系数,第六章 STM32 定时器的使用,typedef struct vu32 CTRL; /SysTick控制和状态寄存器 vu32 LOAD; /SysTick重装载值寄存器 vu32 VAL; /SysTick当前值寄存器 vuc32 CALIB; /SysTick校准值寄存器 SysTick_TypeDef;,第六章 STM32 定时器的使用,库函数: Sys

3、Tick_CLKSourceConfig函数 SysTick_Setreload函数 SysTick_CounterCmd函数 SysTick_ITConfig函数 SysTick_GetCounter函数 SysTick_GetFlagStatus函数,第六章 STM32 定时器的使用,STM32的通用定时器TIM,是一个通过可编程预分频器驱动的16位自动装载计数器构成。 通用TIMx定时器特性包括: 具备16位向上,向下,向上/向下自动装载计数器。 具备16位可编程预分频器。 具备4个独立通道。 使用外部信号控制定时器和定时器互连的同步电路。 可以通过事件产生中断,中断类型丰富。 具备DM

4、A功能。,第六章 STM32 定时器的使用,第六章 STM32 定时器的使用,第六章 STM32 定时器的使用,从上图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,图中的浅蓝色部分。 这个倍频器的作用:当APB1的预分频系数为1时,倍频器不起作用,定时器的时钟频率等于APB1的频率; 当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。,下面举一个例子说明。假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;当

5、预分频系数=1时,APB1=36MHz,TIM27的时钟频率=36MHz(倍频器不起作用); 当预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM27的时钟频率=36MHz。 既然需要TIM27的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?,第六章 STM32 定时器的使用,答案是:APB1不但要为TIM27提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM27仍能得到较高的时钟频率。,第六章 STM32 定时器的使用,例如普通定时器的时钟为72MHz,分频比为7199,那么我们想要得到一个1秒钟的定时,定时计数器的

6、值需要设定为 TIMx_ARR =10000 因为72000000 / 7200 =10KHz 时钟周期T=1/10KHz=100us 100us 10000 =1S 结论 :分频比7199 定时计数器的值10000。,第六章 STM32 定时器的使用,第六章 STM32 定时器的使用,通用定时器配置步骤,14,1)TIM3时钟使能 这里我们通过APB1ENR的第1位来设置TIM3的时钟,因为Stm32_Clock_Init函数里面把APB1的分频设置为2了,所以我们的TIM3时钟就是APB1时钟的2倍,等于系统时钟(72M)。 2)设置TIM3_ARR和TIM3_PSC的值 通过这两个寄存器

7、,设置自动重装的值及分频系数。这两个参数加上时钟频率就决定了定时器的溢出时间。,3)设置TIM3_DIER允许更新中断 因为我们要使用TIM3的更新中断,所以设置DIER的UIE位,并使能触发中断。 4)允许TIM3工作 我们在配置完后要开启定时器,通过TIM3_CR1的CEN位来设置。,第六章 STM32 定时器的使用,5)TIM3中断分组设置 在定时器配置完了之后,因为要产生中断,必不可少的要设置NVIC相关寄存器,以使能TIM3中断。 6)编写中断服务函数 编写定时器中断服务函数,通过该函数处理定时器产生的相关中断。中断产生后,通过状态寄存器的值来判断此次产生的中断属于什么类型。然后执行

8、相关的操作。,第六章 STM32 定时器的使用,通用寄存器时基单元 计数器寄存器:TIMx_CNT 预分频器寄存器:TIMx_PSC 自动装载寄存器:TIMx_ARR,第六章 STM32 定时器的使用,通用寄存器时基单元,1)计数器寄存器:TIMx_CNT,16位的计数器,设定值从165535,第六章 STM32 定时器的使用,第六章 STM32 定时器的使用,计数器模式,向上计数模式:计数器从0计数到设定的数值,然后重新从0开始计数并且产生一个计数器溢出事件。,计数器时序图(内部时钟分频因子为1),计数器时序图(内部时钟分频因子为2),向下计数模式: 计数器从设定的数值开始向下计数到0,然后

9、自动从设定的数值重新向下计数,并产生一个向下溢出事件。,中央对齐模式(向上/向下计数): 计数器从0开始计数到设定的数值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;再从0开始重新计数。,第六章 STM32 定时器的使用,计数器时序图(内部时钟分频因子为1),第六章 STM32 定时器的使用,计数器时序图(内部时钟分频因子为4),计数器在不同时钟频率下操作的例子:,计数器时序图(内部时钟分频因子为1,TIMx_ARR=0x6),第六章 STM32 定时器的使用,计数器时序图(内部时钟分频因子为2),第六章 STM32 定时器的使用,2)预分频器寄存器:TIMx_PS

10、C,预分频器可以讲计数器的时钟频率按1到65536之间的任意值分频,它是一个16位寄存器。 这个寄存器带有缓冲区,它能够在工作时被改变。新的预分频器参数在下一次更新事件到来时被采。,第六章 STM32 定时器的使用,预分频器寄存器在事件更新时采用,第六章 STM32 定时器的使用,3)自动装载寄存器:TIMx_ARR,自动装载寄存器是预先装载的(要在使能定时器之前设定好),根据在TIMx_CR1寄存器中自动装载使能位(ARPE)的设置,立即或者在每次更新事件时传送到计数器。,第六章 STM32 定时器的使用,立即加载计数器,第六章 STM32 定时器的使用,更新事件时加载计数器,第六章 STM

11、32 定时器的使用,时钟选择 计数器时钟可以由下列时钟源提供: 内部时钟(CK_INT) 外部时钟模式1:外部输入脚(TIx) 外部时钟模式2:外部触发输入(ETR) 内部触发输入(ITRx),第六章 STM32 定时器的使用,这些时钟,具体选择哪个可以通过TIMx_SMCR寄存器的相关位来设置。 这里的CK_INT时钟是从APB1倍频而来的,除非APB1的时钟分频数设置为1,否则通用定时器TIMx的时钟是APB1时钟的2倍; 当APB1的时钟不分频的时候,通用定时器TIMx的时钟就等于APB1的时钟。注意高级定时器的时钟不是来自APB1,而是来自APB2的。,输入捕获模式 PWM 输入模式

12、输出模式 输出比较模式 PWM 模式 单脉冲模式(OPM) 编码器接口模式,通用定时器的特殊工作模式,第六章 STM32 定时器的使用,输入捕获模式 在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置1,如果使能了中断或者DMA操作,则将产生中断或者DMA操作。 在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。,第六章 STM32 定时器的使用,PWM输入模式 例如,你需要测量输入到TI1上的PWM信号的长度(TIMx_CCR1寄存器)和占空比(

13、TIMx_CCR2寄存器),具体步骤如下(取决于CK_INT的频率和预分频器的值) 1)选择TIMx_CCR1的有效输入:置TIMx_CCMR1寄存器的CC1S=01(选择TI1)。 2)选择TI1FP1的有效极性(用来捕获数据到TIMx_CCR1中和清除计数器):置CC1P=0(上升沿有效)。,第六章 STM32 定时器的使用,3)选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄存器的CC2S=10(选择TI1)。 4)选择TI1FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)。 5)选择有效的触发输入信号:置TIMx_SMCR寄存器中的TS=101(

14、选择TI1FP1)。 6)配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100。,第六章 STM32 定时器的使用,7) 使能捕获:置TIMx_CCER寄存器中CC1E=1且CC2E=1。 由于只有TI1FP1和TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1 /TIMx_CH2信号。,第六章 STM32 定时器的使用,输出模式 在输出模式(TIMx_CCMRx寄存器中CCxS=00)下,输出比较信号(OCxREF和相应的OCx)能够直接由软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。 例如:CCxP=0(OCx高电平有效),则

15、OCx被强置为高电平。 置TIMx_CCMRx寄存器中的OCxM=100,可强置OCxREF信号为低。,第六章 STM32 定时器的使用,输出比较模式 此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时。 当计数器与捕获/比较寄存器的内容相同时,输出比较功能做如下操作: 1)将输出比较模式和输出极性定义的值输出到对应的引脚上。在比较匹配时,输出引脚可以保持它的电平(OCxM=000)、被设置成有效电平(OCxM=001)、被设置成无效电平(OCxM=010)或进行翻转(OCxM=011)。,第六章 STM32 定时器的使用,2)设置中断状态寄存器中的标志位(TIMx_SR寄存器中

16、的CCxIF位)。 3)若设置了相应的中断屏蔽(TIMx_DIER寄存器中的CCxIE位),则产生一个中断。 4)若设置了相应的使能位(TIMx_DIER寄存器中的CCxDE位,TIMx_CR2寄存器中的CCDS位选择DMA请求功能),则产生一个DMA请求。,第六章 STM32 定时器的使用,输出比较模式的配置步骤: 1)选择计数器时钟(内部,外部,预分频器)。 2)将相应数据写入TIMx_ARR和TIMx_CCRx寄存器中 3)如果要产生一个中断请求和/或一个DMA请求,设置CCxIE位和CCxDE位。 4)选择输出模式。 5)设置TIMx_CR1寄存器的CEN位启动计数器。,第六章 STM32 定时器的使用,PWM模式 脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。 在TIMx_CCMRx寄存器中的OCxM位写入110

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

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