正常
LED:看清机器,拆开宏,爬到类型
点灯是单片机世界的 hello world,但这一站不急着点。第一篇把 BluePill 里那颗 Cortex-M3 从里到外看一遍:ARM 卖蓝图不造芯片的两本手册分工、一把寄存器加三级流水线的核心家底、架构画死的 4GB 地址表,再拿 Renode 路由日志把"CPU 对外只有读和写"这件事落锤,全固件指令普查的悬念也埋在这篇,第二篇用反汇编兑现——每个说法有手册出处,关键环节真跑可复现。
机器看清了,把这盏灯从头点一遍,回答一个更根本的问题:咱们敲下去的 GPIOC->CRH = x,本质上发生了什么?答案是——一次往固定内存地址的写入,总线把它路由到外设的一组开关电路上。这句话就是整个嵌入式外设编程的地基,第二篇把它拆开揉碎,配一段现代 C++ 伪代码交叉对照。
地基打好,照着本质干一遍:RCC 的时钟门控管"这个外设有没有通电",CRL/CRH 里每脚四位管"这片电路拧到哪个挡位",ODR 与 BSRR 管"怎么把一个引脚翻过去"——逐个寄存器用 Renode 和 GDB 亲手摸,包括一次真翻车:配置写错半段寄存器,灯死给你看。然后留一篇硬件补充,把引脚内部的电路看明白:推挽、开漏、施密特、上下拉,回头再看那些配置位,全是给真实晶体管选挡的旋钮。最后爬楼梯:C 宏时代的封装留下哪些暗伤,HAL 的包装纸里卷着什么,一路到 estdx 的 Gpio 模板——端口、引脚、方向、极性全部写进类型,配错的代码敲下回车那一秒就被编译器按住。每一层的账都用 size 和反汇编当场算:零开销不是口号,是指令条数。