定时器功能:定时、输出比较、输入捕获、互补输出
定时器分类:基本定时器、通用定时器、高级定时器
基本定时器功能简介
1-计数器16bit,只能向上计数,只有TIM6和TIM7
2-没有外部的GPIO,是内部资源,只能用来定时
3-时钟来自PCLK1,可实现1~65535分频
1-时钟源
2-控制器
3-计数器
定时周期的计算
时钟源
1-时钟源来自RCC的TIMx_CLK(属于内部的CK_INT)
2-TIMx_CLK等于多少呢?如何确定?
具体的查看:RCC 专用时钟配置寄存器 (RCC_DCKCFGR )
所有定时器都挂载在总线APB1或APB2上面可在手册P52查看
一般总线的时钟决定了外设的时钟,并且一般外设的时钟都不能超过总线的时钟,。但是定时器有所区别
手册P107查看
if APBx Presc =1 则乘上1 为其他则乘上2
APB1=168M/2(分频因子) =84M
APB2=168M/4(分频因子)=42M
这两种总线分频因子都不是1,都必须乘上2.
由于基本定时器是挂载在APB1上面,所以RCC的TIMx_CLK为84M 。
控制器
1-控制器用于控制定时器的:复位、使能、计数、触发DAC
2-涉及到的寄存器为:CR1/2、DIER、EGR、SR
时基(定时器的心脏)
定时器最主要的就是时基部分:包括 预分频器、计数器、自动重装载寄存器。
预分频器
1-16位的预分频器TIMx_PSC对内部时钟CK_INT进行分频之后,得到计数器时钟CK_CNT=CK_PSC/PSC+1
2-计数器CNT在计数器时钟的驱动下开始计数,计数一次的时间为1/CK_CNT
计数器、自动重装载寄存器
定时器使能(CEN 置 1)后,计数器 CNT在CK_CNT 驱动下向上计数,当 TIMx_CNT 值与 TIMx_ARR 的设定值相等时就自动生成事件并 TIMx_CNT 自动清零,然后自动重新开始计数,如此重复以上过程。
影子寄存器
1-PSC和ARR都有影子寄存器,功能框图上有个影子
2-影子寄存器的存在起到一个缓冲的作用,用户值->寄存器->影子寄存器->起作用,如果不使用影子寄存器则用户值在写到寄存器之后则里面起作用。
ARR影子,TIMx_CR1:APRE位控制
定时时间的计算
如何实现0.5S的定时
1、PSC = 8400-1,定时器频率=84M/(PSC+1)=10000HZ
2、ARR = 4999,从0计数到4999,则计了5000次
3、T = 5000 / 10000 = 0.5S
时基初始化结构体讲解
typedef struct
{
// 分频因子 PSC
uint16 t TIM Prescaler;
// 计数模式,基本定时器只能向上计数
uint16 t TIM CounterMode;
// 自动重装载值
uint32 t TIM Period;
// 外部输入时钟分频因子,基本定时器没有
uint16 t TIM ClockDivision;
// 重复计数器,基本定时器没有,高级定时器专用
uint8 t TIM RepetitionCounter;
} TIM TimeBaseInitTypeDef;