TIM通用定时器
通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。
它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。
使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。
- 16位向上、向下、中央对齐模式自动装载计数器
- 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值
- 4个独立通道:
─ 输入捕获
─ 输出比较
─ PWM生成(边缘或中间对齐模式)
─ 单脉冲模式输出 - 使用外部信号控制定时器和定时器互连的同步电路
- 如下事件发生时产生中断/DMA:
─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
─ 输入捕获
─ 输出比较 - 支持针对定位的增量(正交)编码器和霍尔传感器电路
- 触发输入作为外部时钟或者按周期的电流管理
- 时基单元包含:
● 计数器寄存器(TIMx_CNT)
● 预分频器寄存器 (TIMx_PSC)
● 自动装载寄存器 (TIMx_ARR)
通用定时器框图
STM32中文参考手册14.2
PSC单位 Hz
Tout单位 S
步骤
- 初始化时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
- 初始化TIM定时器
TIM3_BaseInit.TIM_ClockDivision=TIM_CKD_DIV1;
TIM3_BaseInit.TIM_CounterMode=TIM_CounterMode_Up ;
TIM3_BaseInit.TIM_Period=TIM_Period;
TIM3_BaseInit.TIM_Prescaler=TIM_Prescaler;
TIM_TimeBaseInit(TIM3,&TIM3_BaseInit);
- 初始化中断
NVIC_TIM3_interrupt_Init.NVIC_IRQChannel=TIM3_IRQn;
NVIC_TIM3_interrupt_Init.NVIC_IRQChannelCmd=ENABLE;
NVIC_TIM3_interrupt_Init.NVIC_IRQChannelPreemptionPriority=0;
NVIC_TIM3_interrupt_Init.NVIC_IRQChannelSubPriority=3;
NVIC_Init(&NVIC_TIM3_interrupt_Init);
- 使能更新中断
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
- 使能定时器
TIM_Cmd(TIM3,ENABLE);
- 编写中断服务函数
void TIM3_IRQHandler()
{
LED8_on;delay_ms(500);LED8_off;delay_ms(500);
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
如果中断服务后不软件清除中断标志位那么会反复中断