Skip to main content

HAL 库开发笔记 - TIM 通用定时器

在上一篇文章中,简单介绍了 STM32F4 的三类定时器,也详细讲解了基本定时器。在本篇文章中,我们将继续介绍通用定时器。

基本原理

在 STM32F4 中,通用定时器有 TIM2-TIM5,TIM9-TIM14。

通用定时器的特性

在 STM32F4 中,通用定时器的特性如下:

  • 16/32 位递增、递减和递增 / 递减自动重载计数器
  • 16 位可编程预分频器,用于对计数器时钟频率进行分频(分频系数为 1-65536)
  • 4 个独立通道,分别可用于:
    • 输入捕获
    • 输出比较
    • PWM 生成(边沿和中心对齐模式)
    • 单脉冲模式输出
  • 使用外部信号控制定时器且可实现多个定时器互连的同步电路
  • 发生如下事件时生成中断 / DMA 请求:
    • 更新:计数器上溢 / 下溢、计数器初始化(通过软件或内部 / 外部触发)
    • 触发事件(计数器启动、停止、初始化或通过内部 / 外部触发计数)
    • 输入捕获
    • 输出比较
  • 支持定位用增量(正交)编码器和霍尔传感器电路
  • 外部时钟触发输入或逐周期电流管理

常用的定时器函数参考

以下是常用的定时器函数参考,与基本定时器的函数相同。

  • HAL_TIM_Base_Init():初始化定时器时基单元
  • HAL_TIM_Base_DeInit():禁用定时器,与初始化相反
  • HAL_TIM_Base_MspInit():MSP 初始化函数,定时器初始化时会自动调用
  • HAL_TIM_Base_MspDeInit():与上一个相反
  • HAL_TIM_Base_Start():开启定时器
  • HAL_TIM_Base_Stop():停止定时器
  • HAL_TIM_Base_Start_IT():以中断模式开启定时器
  • HAL_TIM_Base_Stop_IT():关闭中断模式的定时器
  • HAL_TIM_Base_Start_DMA():以 DMA 模式开启定时器
  • HAL_TIM_Base_Stop_DMA():关闭 DMA 模式的定时器

用通用定时器输出 1 kHz/50% 占空比的 PWM

本次实验使用通用定时器输出 1 kHz,50% 占空比的 PWM 信号,可用示波器显示输出的波形。

在 CubeMX 内配置通用定时器

首先,我们打开 Clock Configuratgion 时钟树配置页面,因通用定时器挂载在挂载在高速 APB2 总线上,所以我们找到并记下 APB2 Timer clocks 的时钟频率(180 MHz):

接着,我们找到侧边栏 Timer 中找到 TIM8,设置通道 1(Channel 1)为 PWM 生成(PWM Generation CH1),为了能生成 1 kHz 频率的 PWM 方波,我们需要在下方配置以下参数:

  • Prescaler(预分频系数):180-1
  • Counter Mode(计数模式):Up(从 0 开始向上计数至预分频系数后溢出)
  • Counter Period(计时周期 / 装载值):1000-1
  • auto-reload preload(是否自动重装载):Enable(溢出时会自动重装初值)

因此处选用的时钟源为 180 MHz,因此将预分频系数设置为 180-1 = 179,分频后为 1 MHz,将装载值设置为 1000-1 = 9999,所以得到 1 kHz 的频率。

在代码内配置基本定时器

main.c 中开启定时器:

main.c
/* USER CODE BEGIN 2 */

HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_1);

// 设置占空比为 500(500 Hz/1 kHz=50%)
__HAL_TIM_SetCompare(&htim8,TIM_CHANNEL_1,500);

/* USER CODE END 2 */

编译并烧录,用示波器可以看出波形:

参考与致谢

文章作者:Power Lin
原文地址:https://wiki-power.com
版权声明:文章采用 CC BY-NC-SA 4.0 协议,转载请注明出处。