基本定时器(TIM6和TIM7)
基本定时器TIM6和TIM7包含一个16位自动重载计数器,该计数器由可编程预分频器驱动。此类定时器不仅可用作通用定时器以生成时基,还可以专门用于驱动数模转换器(DAC)。实际上,此类定时器内部连接到DAC并能通过其触发输出驱动DAC。
这些定时器彼此完全独立,不共享任何资源。
TIM6和TIM7主要特性
16位自动重载递增计数器
16位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于1到65536之间
用于触发DAC的同步电路
位于APB1总线上

1、时钟选择

开发板板载8MHz高速外部晶振和32.768KHz低速外部晶振,这里高速和低速时钟源全部选择Crystal/Ceramic Resonator即可。
2、定时器选择

这里选择基本定时器6。
3、定时器配置


Prescaler(PSC - 16 bits value):分频系数,取值范围为1到65536
Counter Period:周期
auto-reload preload:自动重载
分频系数:可理解为定时器从0计数到该数值所用时间,当前定时器6挂载在APB1总线上,经过系统主时钟168MHz的4分频得到42MHz给APB1总线上其他外围设备的时钟来源,但是定时器的时钟来源又经过该4分频后得到的42MHz再次2倍频得到84MHz,配置的分频系数为8400个脉冲,则定时器从0计数到8399个脉冲所用时间为84000000/(8399+1) = 10000Hz,1/10000 = 0.0001秒 = 100us。
举个例子(分频系数):84MHz是装水的速度,8399是水瓶的最大容量(最大可设置16位数值即1到65536),一个瓶子从没水的情况到装满水溢出时所用的时间为100us。
周期:可理解为上面的分频系数一共要执行多少次,执行完之后所用的时间,当前配置为99个周期,执行完所用的时间为0.0001×(99+1) = 0.01秒 = 10ms。
举个例子(周期):上面的分频系数就是装一瓶水所用的时间,这里的周期指的是一共要装多少瓶水,当装完x瓶水(周期)后触发定时器中断。
4、中断控制器配置



在生成的代码中,main.c在第89行的MX_TIM6_Init();后加入使能定时器函数HAL_TIM_Base_Start_IT(&htim6);
在main.c里面的下面200行左右找个风水宝地再加入定时器中断回调函数,注意要在BEGIN ** 到END**之间加入代码,否则下次生成新代码时会覆盖掉原来写入的代码。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if( htim == (&htim6) )
{
}
}
