STM32 定时中断逻辑拆解:为什么 “每 2 次中断翻一次 LED”,却是 1 秒亮 1 秒灭?

一、开篇:核心疑问

在 STM32 定时中断开发中,很多人会遇到一个 "看似矛盾" 的问题:明明配置的是 "每 2 次中断翻转一次 LED",最终却看到 LED"1 秒亮、1 秒灭"------ 这不是应该 "2 秒亮、2 秒灭" 吗?

其实问题的关键,是没理清 "中断触发条件" 和 "中断时间基准" 的绑定关系。本文以 TIM2 定时器 1 秒中断为例,从 "完整翻转循环" 的定义入手,一步步拆解 "每 2 次中断翻一次" 为何对应 "1 秒亮灭",帮你彻底吃透定时中断与 LED 控制的逻辑。

二、先明确两个基础前提:避免理解偏差

在分析前,必须先敲定代码里的两个 "固定条件"------ 这是后续所有逻辑的基础,少了它们,就会越想越乱:

  1. TIM2 中断周期是 1 秒 :通过Prescaler=7200-1(72MHz 分频为 10kHz)和Period=10000-1(计数 10000 次)配置,TIM2 每 1 秒触发一次中断,即TIM2_IRQHandler每 1 秒执行一次。
  2. LED 翻转逻辑绑定中断次数 :代码中用unsigned char cnt记录中断次数,每进一次中断cnt+1;通过cnt&0x01判断奇偶性 ------ 奇数次中断(cnt=1、3、5...)时 LED 亮,偶数次中断(cnt=2、4、6...)时 LED 灭,本质是 "每 2 次中断完成一次'亮→灭'或'灭→亮'的完整翻转"。

三、核心拆解:从 "2 次中断完整循环" 到 "1 秒亮灭" 的 3 步推导

咱们以 "LED 初始状态为灭" 为例,结合 1 秒中断周期,按 "时间轴→状态变化→时长计算" 的顺序,把逻辑拆透:

第一步:定义 "完整翻转循环"------2 次中断才够

什么是 "完整翻转循环"?对 LED 来说,是从 "初始状态" 出发,经过两次状态变化后 "回到初始状态" 的过程。在你的代码里:

  • 初始状态:灭;
  • 第 1 次中断(1 秒时):cnt=1(奇)→ 灭→亮(第一次状态变化);
  • 第 2 次中断(2 秒时):cnt=2(偶)→ 亮→灭(第二次状态变化);
  • 至此,LED 从 "灭" 出发,经过 2 次中断,回到 "灭"------ 这就是一次 "完整翻转循环",需要 2 次中断才能完成。

第二步:拆解 "完整循环" 的时间分布 ------1 秒中断周期是关键

因为 TIM2 中断周期是 1 秒(每 1 秒触发一次),所以 "2 次中断" 的总时长是2×1秒=2秒,但这 2 秒内,LED 的状态不是 "一直变",而是 "中断时才变,不中断时保持不变":

时间区间 中断次数 cnt 值 LED 状态 状态持续时长 关键逻辑
0 秒(上电)→1 秒 0 次 0 - 未触发中断,保持初始状态
1 秒(第 1 次中断)→2 秒 1 次 1 1 秒 中断触发后变亮,之后保持到下一次中断
2 秒(第 2 次中断)→3 秒 2 次 2 1 秒 中断触发后变灭,之后保持到下一次中断
3 秒(第 3 次中断)→4 秒 3 次 3 1 秒 重复第 1 次中断后的逻辑

从表格能清晰看到:每 1 个 "中断周期(1 秒)",LED 只保持 1 个状态------ 亮 1 秒,是因为从第 1 次中断到第 2 次中断间隔 1 秒;灭 1 秒,是因为从第 2 次中断到第 3 次中断间隔 1 秒。

第三步:推导因果关系 ------ 为什么是 "1 秒亮灭"?

核心结论藏在 "状态变化的触发时机" 和 "中断周期" 的绑定里:

  • LED 的状态只在中断触发时改变,中断不触发时,状态不会自动变(硬件特性决定);

  • 两次中断的间隔是 1 秒(中断周期),所以 "亮" 的状态能持续 1 秒(从第 1 次到第 2 次中断),"灭" 的状态也能持续 1 秒(从第 2 次到第 3 次中断);

  • 而 "每 2 次中断完成一次完整循环",只是描述 "LED 回到初始状态需要 2 次中断",但循环内的每个 "单个状态",时长都等于 "中断周期(1 秒)"------ 这就是 "1 秒亮、1 秒灭" 的本质。

四、反推验证:如果中断周期变了,结果会怎样?

为了让逻辑更扎实,咱们做个 "反推实验":假设把 TIM2 中断周期改成 2 秒(Period=20000-1),其他逻辑不变,会出现什么情况?

  • 第 1 次中断(2 秒时):LED 灭→亮,之后保持亮到第 2 次中断;
  • 第 2 次中断(4 秒时):LED 亮→灭,之后保持灭到第 3 次中断;
  • 最终效果:LED"2 秒亮、2 秒灭"。
相关推荐
jianqiang.xue3 小时前
单片机图形化编程:课程目录介绍 总纲
c++·人工智能·python·单片机·物联网·青少年编程·arduino
Let's GO Tiger5 小时前
DAPLINK可以烧录,但无法调试仿真
单片机·嵌入式硬件
ooolmf5 小时前
xunjixiaochejiaogai
stm32·单片机·嵌入式硬件
充哥单片机设计6 小时前
【STM32项目开源】基于STM32的智能家庭安防系统
stm32·单片机·嵌入式硬件
日更嵌入式的打工仔6 小时前
ENET_INIT卡死在DMA_MODE判断
单片机·嵌入式硬件
电鱼智能的电小鱼7 小时前
服装制造企业痛点解决方案:EFISH-SBC-RK3588 预测性维护方案
网络·人工智能·嵌入式硬件·算法·制造
szxinmai主板定制专家8 小时前
基于ARM+FPGA的无人机数据采集卡,6通道24bit采集
arm开发·嵌入式硬件·fpga开发·无人机·能源
点灯小铭12 小时前
基于单片机的智能水箱温度液位控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计
沐欣工作室_lvyiyi16 小时前
基于物联网的体温心率监测系统设计(论文+源码)
单片机·物联网·毕业设计·体温心率检测