第六章 STM32 定时器的使用 《基于ARM的单片机应用及实践--STM32案例式教学》课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第六章 STM32 定时器的使用 通用定时器配置步骤
1)TIM3时钟使能 这里我们通过APB1ENR的第1位来设置TIM3的时钟,因为 Stm32_Clock_Init函数里面把APB1的分频设置为2了, 所以我们的TIM3时钟就是APB1时钟的2倍,等于系统时 钟(72M)。 2)设置TIM3_ARR和TIM3_PSC的值 通过这两个寄存器,设置自动重装的值及分频系数。这 两个参数加上时钟频率就决定了定时器的溢出时间。
第六章 STM32 定时器的使用
3)设置TIM3_DIER允许更新中断 因为我们要使用TIM3的更新中断,所以设置DIER 的UIE位,并使能触发中断。
4)允许TIM3工作 我们在配置完后要开启定时器,通过TIM3_CR1的 CEN位来设置。
第六章 STM32 定时器的使用
5)TIM3中断分组设置
计数器时序图(内部时钟分频因子为1)
计数器时序图(内部时钟分频因子为2)
向下计数模式: 计数器从设定的数值开始向下计数到0,然后自动从设 定的数值重新向下计数,并产生一个向下溢出事件。
中央对齐模式(向上/向下计数): 计数器从0开始计数到设定的数值-1,产生一个计数器 溢出事件,然后向下计数到1并且产生一个计数器下溢 事件;再从0开始重新计数。
当预分频系数=2时,APB1=18MHz,在倍频器的作用 下,TIM2~7的时钟频率=36MHz。 既然需要TIM2~7的时钟频率=36MHz,为什么不直接 取APB1的预分频系数=1?
第六章 STM32 定时器的使用
答案是:APB1不但要为TIM2~7提供时钟,而且还要 为其它外设提供时钟;设置这个倍频器可以在保证其 它外设使用较低时钟频率时,TIM2~7仍能得到较高的 时钟频率。
第六章 STM32 定时器的使用
库函数: SysTick_CLKSourceConfig函数 SysTick_Setreload函数 SysTick_CounterCmd函数 SysTick_ITConfig函数 SysTick_GetCounter函数 SysTick_GetFlagStatus函数
计数器寄存器:TIMx_CNT 预分频器寄存器:TIMx_PSC 自动装载寄存器:TIMx_ARR
第六章 STM32 定时器的使用 通用寄存器时基单元 1)计数器寄存器:TIMx_CNT
16位的计数器,设定值从1~65535
第六章 STM32 定时器的使用 计数器模式 向上计数模式:计数器从0计数到设定的数值,然后 重新从0开始计数并且产生一个计数器溢出事件。
第六章 STM32 定时器的使用
通用定时器的特殊工作模式
输入捕获模式 PWM 输入模式 输出模式 输出比较模式 PWM 模式 单脉冲模式(OPM) 编码器接口模式
第六章 STM32 定时器的使用
输入捕获模式 在输入捕获模式下,当检测到ICx信号上相应的边沿后 ,计数器的当前值被锁存到捕获/比较寄存器 (TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标 志(TIMx_SR寄存器)被置‘1’,如果使能了中断或者 DMA操作,则将产生中断或者DMA操作。 在捕获模式下,捕获发生在影子寄存器上,然后再复 制到预装载寄存器中。
第六章 STM32 定时器的使用 7) 使能捕获:置TIMx_CCER寄存器中CC1E=1且 CC2E=1。
由于只有TI1FP1和TI2FP2连到了从模式控制器,所以 PWM输入模式只能使用TIMx_CH1 /TIMx_CH2信号。
第六章 STM32 定时器的使用 输出模式 在输出模式(TIMx_CCMRx寄存器中CCxS=00)下,输出 比较信号(OCxREF和相应的OCx)能够直接由软件强置 为有效或无效状态,而不依赖于输出比较寄存器和计 数器间的比较结果。
第六章 STM32 定时器的使用
例如普通定时器的时钟为72MHz,分频比为7199,那么 我们想要得到一个1秒钟的定时,定时计数器的值需 要设定为
TIMx_ARR =10000 因为72000000 / 7200 =10KHz 时钟周期T=1/10KHz=100us 100us × 10000 =1S 结论 :分频比7199 定时计数器的值10000。
第六章 STM32 定时器的使用 2)设置中断状态寄存器中的标志位(TIMx_SR寄存器中 的CCxIF位)。 3)若设置了相应的中断屏蔽(TIMx_DIER寄存器中的 CCxIE位),则产生一个中断。 4)若设置了相应的使能位(TIMx_DIER寄存器中的 CCxDE位,TIMx_CR2寄存器中的CCDS位选择DMA 请求功能),则产生一个DMA请求。
第六章 STM32 定时器的使用 3)自动装载寄存器:TIMx_ARR
自动装载寄存器是预先装载的(要在使能定时器之前 设定好),根据在TIMx_CR1寄存器中自动装载使能 位(ARPE)的设置,立即或者在每次更新事件时传送 到计数器。
第六章 STM32 定时器的使用 立即加载计数器
第六章 STM32 定时器的使用 更新事件时加载计数器
最大72MHz
PCLK2 至APB2外设
15个外设时钟使能位
TIM1&8定时器 如果APB2预分频=1, 则乘1输出,否则乘2输出
TIMXCLK 至TIM1和TIM8 2个外设时钟使能位
第六章 STM32 定时器的使用 从上图中可以看出,定时器的时钟不是直接来自APB1 或APB2,而是来自于输入为APB1或APB2的一个倍频 器,图中的浅蓝色部分。
这个倍频器的作用:当APB1的预分频系数为1时,倍 频器不起作用,定时器的时钟频率等于APB1的频率; 当APB1的预分频系数为其它数值(即预分频系数为2、4 、8或16)时,这个倍频器起作用,定时器的时钟频率 等于APB1的频率两倍。
第六章 STM32 定时器的使用 下面举一个例子说明。假定AHB=36MHz,因为APB1 允许的最大频率为36MHz,所以APB1的预分频系数可 以取任意数值;当预分频系数=1时,APB1=36MHz, TIM2~7的时钟频率=36MHz(倍频器不起作用);
例如:CCxP=0(OCx高电平有效),则OCx被强置为高 电平。 置TIMx_CCMRx寄存器中的OCxM=100,可强 置OCxREF信号为低。
第六章 STM32 定时器的使用
输出比较模式 此项功能是用来控制一个输出波形,或者指示一段给 定的的时间已经到时。 当计数器与捕获/比较寄存器的 内容相同时,输出比较功能做如下操作: 1)将输出比较模式和输出极性定义的值输出到对应的引 脚上。在比较匹配时,输出引脚可以保持它的电平 (OCxM=000)、被设置成有效电平(OCxM=001)、被设 置成无效电平(OCxM=010)或进行翻转(OCxM=011)。
Baidu Nhomakorabea
第六章 STM32 定时器的使用
PWM输入模式 例如,你需要测量输入到TI1上的PWM信号的长度 (TIMx_CCR1寄存器)和占空比(TIMx_CCR2寄存器),具 体步骤如下(取决于CK_INT的频率和预分频器的值) 1)选择TIMx_CCR1的有效输入:置TIMx_CCMR1寄存 器的CC1S=01(选择TI1)。 2)选择TI1FP1的有效极性(用来捕获数据到TIMx_CCR1 中和清除计数器):置CC1P=0(上升沿有效)。
第六章 STM32 定时器的使用
本章内容
STM32F的定时器简介 通用定时器时基单元 通用定时器特殊工作模式 定时器编程及实训
第六章 STM32 定时器的使用
STM32中一共有11个定时器: 2个高级控制定时器 4个普通定时器 2个基本定时器 2个看门狗定时器 1个系统嘀嗒定时器。 TIM1,TIM8是能够产生三对PWM互补输出的高级定时 器,常用于电动机的控制。它们的时钟由APB2的输出 产生。
第六章 STM32 定时器的使用
计数器时序图(内部时钟分频因子为1)
第六章 STM32 定时器的使用
计数器时序图(内部时钟分频因子为4)
计数器在不同时钟频率下操作的例子:
计数器时序图(内部时钟分频因子为1,TIMx_ARR=0x6)
第六章 STM32 定时器的使用
计数器时序图(内部时钟分频因子为2)
第六章 STM32 定时器的使用
STM32的通用定时器TIM,是一个通过可编程预分频器 驱动的16位自动装载计数器构成。 通用TIMx定时器特性包括:
具备16位向上,向下,向上/向下自动装载计数器。 具备16位可编程预分频器。 具备4个独立通道。 使用外部信号控制定时器和定时器互连的同步电路。 可以通过事件产生中断,中断类型丰富。 具备DMA功能。
第六章 STM32 定时器的使用
PWM模式 脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器 确定频率、由TIMx_CCRx寄存器确定占空比的信号。 在TIMx_CCMRx寄存器中的OCxM位写入‘110’(PWM 模式1)或‘111’(PWM模式2),能够独立地设置每个 OCx输出通道产生一路PWM。必须设置TIMx_CCMRx 寄存器OCxPE位以使能相应的预装载寄存器, 最后要设置TIMx_CR1寄存器的ARPE位,(在向上计数 或中心对称模式中)使能自动重装载的预装载寄存器。
第六章 STM32 定时器的使用
时钟选择
计数器时钟可以由下列时钟源提供: 内部时钟(CK_INT) 外部时钟模式1:外部输入脚(TIx) 外部时钟模式2:外部触发输入(ETR) 内部触发输入(ITRx)
第六章 STM32 定时器的使用
这些时钟,具体选择哪个可以通过TIMx_SMCR寄存器 的相关位来设置。 这里的CK_INT时钟是从APB1倍频而来的,除非APB1 的时钟分频数设置为1,否则通用定时器TIMx的时钟 是APB1时钟的2倍; 当APB1的时钟不分频的时候,通用定时器TIMx的时钟 就等于APB1的时钟。注意高级定时器的时钟不是来自 APB1,而是来自APB2的。
第六章 STM32 定时器的使用
AHB预分频 /1,2,…,512
APB1预分频 /1,2,4,8,16
最大36MHz
PCLK1 至APB1外设
20个外设时钟使能位
TIM2,3,4,5,6,7 如果APB1预分频=1, 则乘1输出,否则乘2输出
6个外设时钟使能位
TIMXCLK 至TIM2~7
APB2预分频 /1,2,4,8,16
第六章 STM32 定时器的使用
3)选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄 存器的CC2S=10(选择TI1)。 4)选择TI1FP2的有效极性(捕获数据到TIMx_CCR2): 置CC2P=1(下降沿有效)。 5)选择有效的触发输入信号:置TIMx_SMCR寄存器中 的TS=101(选择TI1FP1)。 6)配置从模式控制器为复位模式:置TIMx_SMCR中的 SMS=100。
第六章 STM32 定时器的使用
typedef struct
{
vu32 CTRL; vu32 LOAD; vu32 VAL; vuc32 CALIB;
//SysTick控制和状态寄存器 //SysTick重装载值寄存器 //SysTick当前值寄存器 //SysTick校准值寄存器
} SysTick_TypeDef;
第六章 STM32 定时器的使用
输出比较模式的配置步骤: 1)选择计数器时钟(内部,外部,预分频器)。 2)将相应数据写入TIMx_ARR和TIMx_CCRx寄存器中 3)如果要产生一个中断请求和/或一个DMA请求,设 置CCxIE位和CCxDE位。 4)选择输出模式。 5)设置TIMx_CR1寄存器的CEN位启动计数器。
在定时器配置完了之后,因为要产生中断,必不可少的 要设置NVIC相关寄存器,以使能TIM3中断。
6)编写中断服务函数 编写定时器中断服务函数,通过该函数处理定时器 产生的相关中断。中断产生后,通过状态寄存器的 值来判断此次产生的中断属于什么类型。然后执行 相关的操作。
第六章 STM32 定时器的使用 通用寄存器时基单元
第六章 STM32 定时器的使用
2)预分频器寄存器:TIMx_PSC 预分频器可以讲计数器的时钟频率按1到65536之间的任 意值分频,它是一个16位寄存器。 这个寄存器带有缓冲区,它能够在工作时被改变。新的 预分频器参数在下一次更新事件到来时被采。
第六章 STM32 定时器的使用 预分频器寄存器在事件更新时采用
相关文档
最新文档