STM32——基本定时器(TIM6,TIM7)工作过程,解读功能框图,时序分析,周期计算

定时器的基本功能:

(1)定时发送USART数据

(2)定时采集AD数据

(3)测量输入信号的脉冲宽度

(4)采集输出波形

(5)产生PWM控制电机状态

 STM32定时器包括2个高级控制定时器,10个通用定时器和2个基本定时器

 基本定时器

功能:定时功能,产生时基,驱动数模转换器

两个基本定时器TIM6和TIM7,功能完全一样,所用资源彼此独立,可以同时使用

工作过程:TIM6和TIM7是16位向上递增寄存器,在自动重载寄存器(TIMx_ARR)添加一个计数值后并使能TIMx,计数寄存器(TIMx_CNT)就会从0开始递增,当TIMx_CNT的数值与TIMx_ARR的数值相同时,就会生成事件,并把TIMx_CNT清0,完成一次循环过程,如果不停止计时器就循环执行上述过程。

 基本定时器功能框图

 图中带有阴影的方框(自动重载寄存器,PSC预分频器),方框里的内容就是寄存器的名称,阴影表示这个寄存器还自带影子寄存器,在硬件结构上实际上有2个寄存器,源寄存器是我们可以进行读写的,而影子寄存器我们不能操作,由内部硬件使用。影子寄存器是在程序运行过程中真正起作用的,源寄存器是使用者读写用到的,只有在特定的时候,才把源寄存器的值拷贝到影子寄存器,多个影子寄存器有i其实用可以达到同步更新多个寄存器内容的目的。

 图中的自动重装载寄存器有影子寄存器,它左边的事件图标U表示在更新事件生成时就把自动重装在寄存器的内容拷贝进影子寄存器。寄存器右边的事件图标,中断和DMA输出图标表示当自动重载寄存器的值计数器寄存器的值相等时生成事件,中断和DMA输出

基本定时器的时钟源

定时器要实现技术必须有时钟源,基本定时器的时钟只能来自始终内部,高级控制定时器和通用定时器还可以选择外部时钟源或者直接来自其他定时器的等待模式

定时器时钟频率的设置(RCC_DCKCFGR)

 一般设置该位默认值0,即TIMxCLK位总线时钟的2倍,使得TIM6和TIM7的最大定时器时钟位84MHz,即基本定时器的内部时钟(CK_INT)的频率为84MHz。

 基本定时器只能使用内部时钟,当TIM6和TIM7控制寄存器1(TIMx_CR1)的CEN位置1时,启动基本定时器,预分频器的时钟来源就是CK_INT

 

 控制器

定时器控制器控制实现定时器功能,控制定时器复位,使能,计数是其基础功能,基本定时器还专门用于DAC转换触发

计数器

基本定时器的技术过程主要设计三个寄存器的内容,计数器寄存器(TIMx_CNT),预分频器寄存器(TIMx_PSC),自动重载寄存器(TIMx_ARR),这3个寄存器都是16位有效数字,可设置的值为(0,2^16-1)即(0,65535)

(1)TIMx_PSC

由图可知,预分频器PSC有一个输入时钟CK_PSC输出时钟CK_CNT,输入时钟CK_PSC来源于控制器部分,基本定时器只有内部时钟源,所以CK_PSC实际等于CK_INT,即84MHz。通过设置PSC的值可以得到不同的CK_CNT,计算方法如下图所示

 基本定时器的时序分析

4分频过程分析

(1) 原来是1分频,CK_PSC和CK_CNT频率相同。

(2)向TIMx_PSC中写入新值时,并不会马上改变CK_CNT的输出频率

(3)当事件更新时,把TIMx_PSC的寄存器的值更新到影子寄存器中,使其真正产生效果,更新为4分频后,在CK_PSC连续产生4个脉冲后CK_CNT才产生一个脉冲

(4)在定时器使能(CEN=1)时,计数器COUNTER根据CK_CNT的频率向上计数,每有一个CK_CNT的脉冲,TIMx_CNT的值就加1

(5)当TIMx_CNT的值与TIMx_ARR的设定值相等时,自动生成事件,TIMx_CNT自动清0,然后自动开始重新计数,如此循环上述过程

(6)自动重载寄存器TIMx_ARR用来存放计数器值比较的数值,如果两个数值相等就生成事件,将相关事件标志位置位,生成DMA和数据中断输出。TIMx_ARR有影子寄存器,可以通过TIMx_CR1寄存器的ARPE位控制影子寄存器功能,ARPE=1,影子寄存器有效,只有在事件更新时,才把TIMx_ARR的值赋值给影子寄存器,ARPE=0,修改TIMx_ARR值马上有效。

 定时器周期计算

定时器的事件生成时间主要由TIM_PSC和TIMx_ARR两个寄存器值决定,这个也就是定时器的周期。比如,我们需要1s的定时器,那么这两个寄存器的值如何设置?

(1)先设置TIMx_ARR的值为9999,也就是当TIMx_CNT从0开始计算,刚好等于9999时生成事件,总共计数10000次

(2)此时,时钟源周期为100μs即可刚好得到1s的定时周期(100μsx10000=1000000μs=1000ms=1s)

(3)设置TIMx_PSC寄存器值使CK_CNT输出100μs周期(10000Hz)的时钟,预分频器的输入时钟CK_PSC为84MHZ,所以设置预分频器值为(8400-1)就可以满足(84000000/(8400-1+1)=10000)

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值