STM32的常见的定时器资源
系统嘀嗒定时器SysTick
这是一个集成在Cortex M3内核当中的定时器,它并不属于芯片厂商的外设,也就是说使用ARM内核的不同厂商,都拥有基本结构相同的系统定时器。主要目的是给RTOS提供时钟节拍做时间基准。
看门狗定时器WatchDog
实时时钟RTC
基本定时器:TIM6、TIM7
通用定时器:TIM2、TIM3、TIM4、TIM5
在基本定时器的基础上,实现输出比较、输入捕获、PWM生成、单脉冲模式输出等功能。这类定时器最具代表性,使用也最广泛。
高级定时器:TIM1、TIM8
STM32通用定时器的重要知识点
. STM32的通用定时器是一个通过可编程预分频器(Prescaler)驱动的16位自动重装主计数器(Counter Period)构成。可以对内部时钟或触发源以及外部时钟或触发源进行计数。通用定时器的基本工作原理:
首先,定时器时钟信号送入16位可编程预分配器(Prescaler),该预分配器系数为0~65535之间的任意数值。预分配器溢出后,会向16位的主计数器(Counter Period)发出一个脉冲信号。
预分频器,本质上是一个加法计数器,预分频系数实际上就是加计数的溢出值。
定时器发生中断时间的计算方法:
定时时间=(Prescaler+1 ) x(Counter Period+1)×1/定时器时钟频率时钟信号1KHz,Prescaler为9,Counter Period为999,定时时间?
STM32CubeMX配置
常规配置之后
配置Timers,这里先配置TIM2,设置可编程预分配器(Prescaler)和主计数器(Counter Period)之后注意要使能
TIM3的配置同理
然后设置时钟,这里设置为32M的
然后生成代码
编辑代码
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2 ) //处理TIM2间隔定时中断
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
}
if(htim->Instance == TIM3 ) //处理TIM3间隔定时中断
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
}
}
启动定时器
HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_Base_Start_IT(&htim3);