STM32 裸机 Blink 的坑 你确定你的向量表能跑起来
📅 2026/7/7 2:12:55
👁️ 阅读次数
📝 编程学习
一句话:从零写一个 STM32F103 的裸机 Blink 很简单,但 binary 里的向量表字节顺序错了,你的芯片根本不会跑。
前言
很多嵌入式开发入门都是从 HAL 库或者标准外设库开始的 —— 点个灯,调个时钟,看个寄存器。这些都没问题,但如果你像我一样曾经好奇过"不用库,纯裸机能有多复杂",那你大概率会碰一下arm-none-eabi-gcc+ 裸机工程。
上周我写了一个最精简的 STM32F103 Blink,main.c不到 30 行,startup 用纯汇编写的,linker script 自己手搓。整个工程编译通过,size一看才 120 字节,感觉稳了。
结果用xxd看了一眼 hex 的前几字节 —— 发现向量表压根没在 binary 开头。
这篇文章就是记录这个坑和它的解决方案。
一、极简裸机工程长什么样
先交代一下我在做什么。这是嵌软世界最经典的 Hello World:PC13 引脚接了一个 LED,低电平点亮。
main.c
#defineRCC_APB2ENR(*(volatileunsignedint*)0x40021018)#defineGPIOC_CRH(*(volatileunsignedint*)0x40011004)#defineGPIOC_ODR(*(volatileunsignedint*)0x4001100C)voiddelay(volatileunsignedintcount){while(count--);}intmain(void){/* 1. 使能 GPIOC 时钟(APB2 上的第 4 位) */RCC_APB2ENR|=(1&l
编程学习
技术分享
实战经验