这两天一直在跟着铁头山羊学 STM32,前面更多是在熟悉实验节奏、理解输入输出、适应单片机开发这种“代码控制硬件”的思路。
而到了这一步,明显感觉学习内容开始上强度了。

如果说前面的实验更偏“看懂现象、跑通流程”,那现在已经开始进入一个新的阶段:
不仅要知道程序能跑,还要开始思考程序为什么这么组织、为什么这样写效率更高、为什么有些方法适合简单实验、有些方法更适合实际开发。

今天学习下来最大的感受就是,STM32 的核心不只是外设本身,而是如何用合理的程序结构去管理外设行为。这也是我开始觉得嵌入式真正有意思的地方。

一、学习开始“成体系”了,不再只是做单个实验

最近这部分内容学下来,我越来越明显地感觉到,STM32 不是一堆零散实验的堆叠,而是在逐渐形成一个完整体系。

前面学 GPIO 输出、输入检测、延时的时候,还能把它们看成一个个单独模块。
但到了现在,很多东西已经开始自然地串起来了:

输入负责感知外部状态
判断逻辑决定程序走向
输出负责执行结果
延时影响现象节奏
中断则开始改变程序响应方式

一旦把这些内容连在一起看,就会发现 STM32 真正学的不是“某个实验怎么做”,而是如何建立一个能持续运行、能实时响应、能处理外部事件的程序模型。

这和之前单纯写几个函数、跑几个现象,已经完全不是一个感觉了。

二、对“按键实验”这类输入响应的理解更深入了

学到这里,我对按键类实验的理解明显比前面更深了一层。

以前看到按键实验,第一反应就是:
“按下去有反应,松开没反应,或者按一次切换一次状态。”
但现在再回头看,会发现它其实一点都不简单。

  1. 按键实验的本质不是读一个电平,而是处理一个事件

这是我今天理解上比较大的变化。

表面上看,按键实验只是读取某个输入引脚状态。
但如果从程序设计角度看,按键不是一个简单电平,而是一个“事件源”。

也就是说,程序不是单纯在看当前电平高低,而是在处理:

有没有按下
是什么时候按下
按下后要触发什么动作
是否允许重复触发
如何避免误判

这样一想,按键实验的难度一下就上来了。
因为它已经不只是“读输入”,而是开始涉及事件判断、状态切换、逻辑控制这些内容了。

  1. 程序开始需要考虑“响应质量”

按键实验还有一个让我印象很深的点,就是它会逼着你去思考:
程序到底是“能响应”就够了,还是要“响应得合理”?

因为在单片机里,检测到按键只是第一步。
更重要的是,程序要能在合适的时机做出合适的反应。

比如有些逻辑下,按键一次应该只触发一次;
有些逻辑下,按住和短按又可能代表不同含义。
虽然我现在还没完全学到特别复杂的按键处理,但已经明显感觉到,这里面的东西远不止表面这么简单。

三、开始真正理解“中断为什么重要”

学到这一步,我对中断终于不再只是停留在“这是个后面很重要的知识点”这种模糊印象上了。

以前总觉得中断就是比轮询高级一点的东西。
但现在结合前面的输入检测、按键实验再去看,中断的重要性一下子就直观了很多。

  1. 轮询的核心问题越来越明显

随着实验越来越多,轮询方式的问题也越来越藏不住了。

轮询的思路很直接,就是程序一直在那里反复检查某个状态。
这种方式在前期入门确实很好理解,但它的问题也很明显:

程序会一直消耗时间去检查
实时性依赖于轮询频率
如果同时要处理多个任务,结构会越来越臃肿
代码会越来越像“到处都在等、到处都在看”

一开始实验简单时,这种问题不明显。
但一旦内容开始变复杂,你就会发现轮询越来越像一种“能用,但不优雅”的方案。

  1. 中断的价值,在于“有事再处理”

我现在对中断最朴素的理解就是一句话:

没事的时候程序可以先干别的,等事件真的来了,再马上去处理。

这个思想特别关键。

因为它改变的不是某一段代码写法,而是整个程序的运行方式。
轮询是程序不断去问:“有没有事?有没有事?”
而中断更像是:“平时你先正常运行,真有事我再叫你。”

这个区别一旦想明白,就会觉得中断的设计真的很聪明。
它本质上是在提升程序对外部事件的响应效率和组织能力。

  1. 学中断,实际上是在学更合理的程序结构

今天最大的感受之一就是:
中断看起来像一个外设知识点,但本质上其实是在教我们如何写出更合理的程序结构。

因为有了中断之后,主循环、中断服务函数、状态变量、事件处理,这些概念都开始有了更明确的分工。
程序不再是一个“死循环里堆满所有逻辑”的东西,而是开始出现层次感。

我觉得这一步很重要。
因为这意味着 STM32 学习开始从“功能实现”往“结构设计”过渡了。

四、对“主循环”这件事的理解开始变了

前面学的时候,总觉得主循环就是不断执行代码的地方。
但现在慢慢发现,主循环其实不是一个随便堆逻辑的垃圾桶,它应该承担的是程序运行框架的作用。

  1. 主循环不应该什么都干

以前写实验时,很容易把所有东西都塞进 while(1) 里。
表面上这没问题,很多初学实验也确实是这么写的。
但学到现在,已经能感觉到这种写法的局限。

因为如果所有任务都堆在主循环里:

逻辑会越来越乱
不同任务互相影响
响应效率会下降
后面维护会越来越困难

这也让我越来越意识到,主循环更适合放“持续运行的框架逻辑”,而不是把所有细节都硬塞进去。

  1. 程序开始有“前台”和“后台”的味道了

虽然我现在还没学到特别系统的任务调度或者 RTOS,但已经隐约能感觉到一种分工思路:

主循环负责整体运行
中断负责处理突发事件
状态变量负责在不同逻辑之间传递信息

这种感觉特别有意思。
因为它说明 STM32 程序不再只是“从上到下执行”,而是开始有了更接近真实系统的运行方式。

五、开始意识到“状态”这个概念有多重要

最近做实验的时候,还有一个理解上的变化特别明显,就是我开始更注意“状态”了。

以前看程序,更多关注的是“这一句在干什么”。
现在开始会注意:

当前程序处于什么状态
输入变化后状态怎么改变
状态变化后输出怎么跟着变
不同状态之间如何切换

这个视角一出来,很多实验立刻就变得更清楚了。

  1. 很多现象其实都是状态切换的结果

比如某个按键按下后切换输出结果,这种实验表面上看是“按键控制某个效果”,
但从程序角度看,本质上就是:

输入触发事件
程序修改状态
输出根据状态改变表现

所以以后再看一些实验,我觉得不能只盯着“用了什么函数”,更应该去看它背后的状态流转。

  1. 会看状态,程序就没那么乱了

STM32 学习很容易遇到一个问题,就是代码一多就觉得乱。
但如果换成“状态”的视角去看,很多逻辑就能被整理得更清楚。

也就是说,不是每次都盯着某一句执行语句,而是先搞懂:

这个程序一共有几种状态?状态是怎么变化的?每种状态下外设表现是什么?

这样一来,很多原本零碎的代码就能被串起来。

六、今天最大的进步,不是学会了什么,而是开始知道该怎么思考了

说实话,STM32 学到这里,我觉得最大的进步已经不完全是“又学了一个新知识点”,而是开始慢慢知道:
面对一个实验,应该用什么角度去分析。

以前我更关注:

这段代码要不要背
这个函数是干什么的
为什么能跑出这个现象

现在我会更关注:

这个实验的输入是什么
输出是什么
中间判断逻辑是什么
用的是轮询还是中断
程序结构是否合理
后面如果功能增加,这套写法还能不能撑住

虽然现在理解还远远谈不上很深,但这种思考方式的变化,我觉得特别重要。
因为它决定了后面学东西是越来越清楚,还是越来越乱。

七、这一阶段踩坑之后,我总结出几个很现实的学习经验

学到现在,已经能明显感觉到,STM32 不是那种“看懂视频就等于学会”的内容。
很多东西必须自己在实验里反复碰、反复改、反复想,才能真正变成自己的理解。

  1. 不要只记代码写法,要记程序模型

单纯记某几句初始化代码,其实意义没那么大。
更重要的是知道:

为什么要初始化
为什么这样组织逻辑
什么时候该放主循环
什么时候该交给中断
状态之间怎么传递

这样后面遇到新实验,才不会一换题目就不会了。

  1. 实验现象一定要和程序结构一起看

以前容易把“现象”和“代码”分开看。
现在越来越觉得,两者必须放在一起理解。

因为现象不是随机出现的,它一定是程序结构、输入变化、输出控制共同作用的结果。
只有把这几部分对应起来,学习才算真正有效。

  1. 现在学得慢一点,后面反而更轻松

STM32 很容易让人着急,尤其是一看到后面还有中断、定时器、串口、PWM、ADC,就会忍不住想快点往后赶。
但学到现在我越来越觉得,前面这些输入响应、程序结构、状态理解,如果没打牢,后面会越来越吃力。

所以现在宁愿慢一点,也要尽量把逻辑搞清楚。

八、接下来最想继续啃的内容

学到这里,我对后面的内容期待值反而更高了。
因为现在已经不只是“想学新模块”,而是开始带着问题去学:

中断到底怎么和主循环配合
按键处理怎样才能更稳定
定时器是不是能替代很多简单延时方案
串口通信在程序结构里应该扮演什么角色
多个功能一起运行时,程序该怎么组织才不乱

我觉得一旦这些内容继续往下学,前面这段时间积累的理解会真正开始发挥作用。

九、总结

学到这里,STM32 给我的感觉已经明显和最开始不一样了。

刚开始的时候,它更像是一门“要学很多配置和外设”的课程;
但现在慢慢发现,它真正吸引人的地方在于:

你是在通过代码搭一个能感知外部变化、能及时做出响应、还能维持稳定运行的小系统。

这种感觉和单纯写算法题、写普通程序完全不一样。

这段学习里,我觉得自己最重要的收获有三点:

第一,开始真正理解按键、输入响应这类实验背后其实是在处理事件。
第二,越来越明白中断的重要性,本质上是在优化程序响应方式。
第三,开始意识到程序结构、状态管理、主循环分工这些东西,才是 STM32 后面越学越深的关键。

现阶段最想对自己说的一句话就是:

别急着追求“学了多少模块”,先把“程序为什么这样组织”想清楚。

只要这个思路建立起来,后面很多内容都会慢慢顺起来。

以上就是这阶段跟着铁头山羊学习 STM32 的一篇记录。
这次明显感觉内容开始上强度了,已经不再只是“做个实验看看现象”,而是开始逼着自己去理解程序结构、响应方式和状态变化这些更底层的逻辑。

这种过程虽然比前面更烧脑,但也更有意思。
后面如果继续学到更具体的中断、定时器或者串口部分,我应该还会继续整理下来。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐