前言
1:也就是TIM6最小要二分频
2:如果想使用定时器更新中断,需要先使能更新中断,然后再使能定时器就可以用了
HAL库配置
84M/(8400-1)=10KHZ=100US
100*20000=2S
auto-reload preload:是否使能自动重装载,如果没有使能,那么就可以在任何时刻通过软件进行更新。如果使能了的话,那么重新设置的值,只能在跑完原本那个周期才会重新跑我们新设定的那个值
影子寄存器:我们初始化配置预分频寄存器和计数器就是源寄存器,使我们可以进行读和写的。影子寄存器是无法操作的是内部硬件使用的,影子寄存器是程序运行时真正起作用的,源寄存器只是给我们读写使用的,只有在更新事件的时候才会把源寄存器的值拷贝到影子寄存器中
TRGO:触发输出信号,是定时器输出给其他定时器或者外设的触发信号,暂时用不到,用到再说
结构体
typedef struct
{
uint16_t Prescaler; // 预分频器
uint16_t CounterMode; // 计数模式
uint32_t Period; // 定时器周期
uint16_t ClockDivision; // 时钟分频
uint8_t RepetitionCounter; // 重复计算器
} TIM_Base_InitTypeDef;
(1) Prescaler:定时器预分频器设置,时钟源经该预分频器才是定时器时钟,它设定 TIMx_PSC 寄存器的值。可设置范围为 0 至 65535,实现 1 至 65536 分频。
(2) CounterMode:定时器计数方式,可是在为向上计数、向下计数以及三种中心对齐模式。基本定时器只能是向上计数,即 TIMx_CNT 只能从 0 开始递增,并且无需初始化。
(3) Period:定时器周期,实际就是设定自动重载寄存器的值,在事件生成时更新到影子寄存器。可设置范围为 0 至 65535。
(4) ClockDivision:时钟分频,设置定时器时钟 CK_INT 频率与数字滤波器采样时钟频率分频比,基本定时器没有此功能,不用设置。
(5) RepetitionCounter:重复计数器,属于高级控制寄存器专用寄存器位,利用它可以非常容易控制输出 PWM 的个数。这里不用设置。
虽然定时器基本初始化结构体有 5 个成员,但对于基本定时器只需设置其中两个就可以,想想使用基本定时器就是简单。
代码库分析
开启定时器更新中断
原函数在stm32f4xx_hal_tim.c中
//此函数功能
//1:开启更新中断2:使能定时器,所以只需加这句函数就行了
HAL_TIM_Base_Start_IT(&htim6