当前位置: 首页 > news >正文

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

一、开篇:核心疑问

应该 “2 秒亮、2 秒灭” 吗?就是在 STM32 定时中断创建中,很多人会遇到一个 “看似矛盾” 的难题:明明配置的是 “每 2 次中断翻转一次 LED”,最终却看到 LED“1 秒亮、1 秒灭”—— 这不

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

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

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

  1. 1 秒就是TIM2 中断周期:通过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 次11 秒中断触发后变亮,之后保持到下一次中断
2 秒(第 2 次中断)→3 秒2 次21 秒中断触发后变灭,之后保持到下一次中断
3 秒(第 3 次中断)→4 秒3 次31 秒重复第 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 秒灭”。
http://www.jsqmd.com/news/35820/

相关文章:

  • 11.8 NOIP模拟4 改题记录
  • 红外遥控
  • C 指针初识
  • 翻译[9]-让sshfs再次伟大于浏览器中
  • 计算机毕业设计-基于Java的口腔管理平台系统创建实战(附源码+论文+演示视频)
  • 唯识主义:哲学爱智慧本质的当代回归 - 实践
  • 第一届湖南省信息学拔尖创新挑战活动 总结
  • U629961 焦头烂额的日奈委员长 の markdown
  • Java数组——Array类讲解
  • 论文笔记(九十三)ManipulationNet: Benchmarking - 实践
  • flask: 用flask-wtf校验参数
  • hdh
  • 序列密码的线性滤波模型
  • 使用Milvus和DeepSeek构建RAG demo - 实践
  • python里字面量是什么?
  • 圆锥滚子轴承品牌:行业顶尖选择与专业解析
  • 串串重学
  • 如何写毕业论文?10个高效写作技巧+AI论文工具推荐(2025最新)
  • avro 数据入门
  • 2025龙信杯个人Wp
  • 7大AI论文写作工具必备!论文写作辅助神器推荐!
  • flask: 报错:The CSRF token is missing.
  • Java数组——二维及多维数组
  • 详细介绍:MySql复习及面试题学习
  • MATLAB 实现 SRCNN 图像超分辨率重建
  • 2025.11.03~2025.11.09
  • 2025年热门的安全检测检验公司综合排名
  • 详细介绍:Python 2025年10月最新:多平台域名/小程序封禁检测工具
  • 多快省力插件使用帮助说明
  • 人工势场法(APF)路径规划 MATLAB