基本定时器

围绕 STM32 中的 TIM6 和 TIM7,用 费曼学习法讲透这个模块,从原理、寄存器、应用,到完整代码例子,一步步来,让你真正理解,不再只是“调库”。


🧠 一、什么是基本定时器(TIM6/TIM7)

✅ 定义:

基本定时器是 STM32 中最简单的定时器,仅具备定时中断触发事件功能,不支持 PWM、输入捕获等高级功能。

STM32 的基本定时器(比如 TIM6)像是一个闹钟,每次从 0 数到一个设定值(ARR),就“叮”一下(产生中断),你可以在中断里做点事,比如闪一下 LED。你可以通过设置“预分频器”(PSC)让它数得慢一点,比如 1 秒叮一次。它不管 PWM、不懂信号采集,就是一个“定时器闹钟”。


🔍 它们的核心特性是:

特性说明
没有通道不能输出 PWM,也不能捕获输入信号
支持中断可设置固定时间周期触发中断
可作为触发源比如 DAC 的触发
配置简单只需设定 计数周期分频

✅ 实例:

STM32F103ZETx 芯片上有两个基本定时器:

  • TIM6

  • TIM7


⚙️ 二、基本定时器的工作原理

定时器 = 计数器 + 自动重装

计数器从 0 计数 → 达到 ARR 值 → 溢出 → 产生中断 → 从 0 再来

⏱️ 定时周期计算公式:

T定时周期=(ARR+1)×(PSC+1)FAPB1T_{定时周期} = \frac{(ARR + 1) \times (PSC + 1)}{F_{APB1}}

  • ARR: 自动重装寄存器值(Auto Reload Register)

  • PSC: 预分频器(Prescaler)

  • F_APB1: APB1 时钟(一般 36MHz)

  • T: 期望的定时时间(秒)


🔍 举例:实现 1 秒中断一次

假设 APB1 = 36MHz

  • PSC = 35999

  • ARR = 999

T=(999+1)×(35999+1)36,000,000=1秒T = \frac{(999 + 1) \times (35999 + 1)}{36,000,000} = 1\text{秒}


🧰 三、关键寄存器(如果你不用 HAL,可以直接操作)

寄存器含义
PSC预分频器设置
ARR自动重装值(周期计数到这)
CNT当前计数值
CR1控制定时器启动、方向等
DIER中断使能寄存器
SR状态寄存器,判断 UIF 中断标志位

🧪 四、CubeMX + HAL + Keil 实现 TIM6 基本定时器中断

✅ 1. CubeMX 配置步骤:

  1. 打开 TIM6,设置为 Internal Clock

  2. Prescaler: 35999

  3. Counter Period: 999

  4. NVIC ➜ 使能 TIM6 中断


✅ 2. main.c 关键代码

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM6_Init();

  HAL_TIM_Base_Start_IT(&htim6);  // 开启中断模式

  while (1)
  {
    // 主循环啥也不用做
  }
}

✅ 3. 添加中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance == TIM6)
  {
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 闪烁LED
  }
}

✅ 4. TIM6 中断函数(自动生成,无需改动)

void TIM6_DAC_IRQHandler(void)
{
  HAL_TIM_IRQHandler(&htim6);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值