STM32定时器中断原理与HAL库配置详解

1. STM32定时器中断基础解析

定时器是STM32单片机中最常用的外设之一,它不仅能提供精确的定时功能,还能用于PWM输出、输入捕获等多种应用场景。在嵌入式开发中,定时器中断的使用频率仅次于GPIO操作,是每个嵌入式工程师必须掌握的技能。

1.1 定时器工作原理

STM32的定时器本质上是一个向上/向下计数的计数器,其核心工作原理可以类比为一个不断注水的沙漏:

  1. 时钟源:如同沙漏上部的沙子来源,定时器需要时钟信号驱动。STM32定时器可以选用内部时钟(APB总线时钟)或外部时钟源。

  2. 预分频器(Prescaler):相当于控制沙子流动速度的阀门。72MHz的主频直接计数太快,通过预分频可以将时钟频率降低到合适范围。公式为:实际计数频率 = 输入时钟 / (预分频值 + 1)

  3. 计数器(CNT):如同沙漏中的沙量指示器,记录当前计数值。根据配置不同,可以向上计数、向下计数或中心对齐计数。

  4. 自动重装载寄存器(ARR):相当于沙漏的总容量。当计数器达到ARR值时产生溢出,触发中断/事件,同时计数器自动重置。

注意:STM32的预分频器和自动重装载值都是"实际值-1",例如要72分频就写入71,这是硬件设计特性。

1.2 定时器中断流程

完整的定时器中断配置包含以下关键步骤:

  1. 时钟使能:通过RCC寄存器开启定时器时钟(TIM1在APB2,TIM2-7在APB1)
  2. 时基配置:设置预分频、计数模式、自动重装载值等核心参数
  3. 中断配置:在NVIC中设置中断优先级并使能
  4. 启动定时器:通过控制寄存器使能计数器和中断
  5. 编写中断服务程序:处理定时触发的事件

需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。

2. HAL库定时器配置详解

2.1 初始化结构体解析

HAL库使用多个结构体来配置定时器,这是典型的面向对象思想在嵌入式中的应用:

c复制typedef struct {
  uint32_t Prescaler;         // 预分频值
  uint32_t CounterMode;       // 计数模式(TIM_COUNTERMODE_UP/DOWN/CENTER)
  uint32_t Period;          

内容推荐

已经到底了哦
已经到底了哦