STM32学习笔记-STM32CubeMX——定时器配置(F407ZGT6)
虎哥今晚吃什么
2022年03月07日 11:36

基本定时器(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) )

        {

        }

}

代码生成规则