定时器:
定时器种类 位数 计数模式 产生DMA请求 捕获/比较通道 互补输出 特殊应用场景
高级定时器 16 上、下、上下 可以 4 有 带可编程死
(TIM1、TIM8) 区的互补输出
通用定时器32 上、下、上下 可以 4 无 通用定时器、PWM波
(TIM2、TIM5) 输波输出、输入捕获、输出比较
通用定时器16 上、下、上下 可以 4 无 通用定时器、PWM波
(TIM3、TIM4) 输波输出、输入捕获、输出比较
通用定时器16 上 没有 2 无 通用定时器、PWM波
(TIM9~TIM14) 输波输出、输入捕获、输出比较
基本定时器16 上、下、上下 可以 0 无 主要应用于驱DAC
(TIM6、TIM7)
TIM3~TIM6四个通道作用:
输入捕获
输出比较
PWM波生成
单脉冲模式输出
可编程预分频器:
16位数据,范围1~65535
基时单元:
计数寄存器
预分频寄存器
自动重装载寄存器
时钟选择:
1、内部时钟(CK_INT)
2、外部时钟模式1
3、外部时钟模式2
4、内部触发输入
内部时钟配置:
×1/×2 ÷N
APB1时钟———————》F(CK_PSK)———————》(CK_INT)
除非APB1的分频系数是1,否则通用定时器的时钟等于APB1时钟的2倍。
默认调用SystemInit函数情况下:
SYSCLK=168M
AHB时钟=168M
APB1时钟=42M
所以APB1的分频系数=AHB/APB1时钟=4
所以,通用定时器时钟CK_INT=2*42M=84M
Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk
以上面的情况为例:
Tout(溢出时间)=(ARR+1)(PSC+1)/84M
ARR:自动重装载的最大值(16为最大值为65535);
PSR:预分频系数(可根据实际情况设置最大值65535);
定时器中断实现步骤:
① 能定时器时钟。
RCC_APB1PeriphClockCmd();
② 初始化定时器,配置ARR,PSC。
TIM_TimeBaseInit();
③ 开启定时器中断,配置NVIC。
NVIC_Init();
④ 使能定时器。
TIM_Cmd();
⑥ 编写中断服务函数。
TIMx_IRQHandler();