又有人来问我 STM32 开发参考方案去哪找、国内哪些资源平台靠谱了。每次被问到这个问题,我都想起自己刚入门那会儿,在论坛里翻帖子翻到半夜、对着报错日志发呆的样子。今天就把我这些年攒下来的找方案方法、平台清单和踩坑经验一次性说清楚,希望能让大家少走点弯路。这篇文章不会只丢几个链接完事,我会从“怎么找”、到“怎么用”、再到“怎么避坑”,把整条链路都给你理顺。
1. 先想清楚:你找的不只是代码,是一套可落地的思路
1.1 STM32 为什么特别依赖参考方案
STM32 本身不是一颗芯片,而是意法半导体旗下的一整个产品家族。从 M0 到 M7,从 几十个引脚的入门款到几百个引脚的旗舰款,外设模块多得让人眼花缭乱:定时器、串口、I2C、SPI、CAN、USB、DMA、ADC、DAC、以太网、SDIO……每个外设的寄存器动辄几十上百个,参考手册一本就有一千多页。
更麻烦的是,同一个功能在不同系列上实现方式还不一样。比如 TIM 的基本定时功能在 F1 和 H7 上寄存器的布局不同,你在 F103 上调通的代码,直接搬到 H743 上大概率跑不起来。这种碎片化知识靠死记硬背是不现实的,必须靠参考方案来支撑。我见过太多新手抱着数据手册从头啃,啃了两个月连 GPIO 翻转都没点亮,然后跑来问我“是不是我太笨了”。其实不是笨,是方法错了。
正确的做法是:先找一个成熟可用的参考方案,把它跑起来,再对着手册去理解“为什么这么配”,最后根据自己的需求去改。这也是行业内绝大多数工程师的实际工作方式。所以“找参考方案”不是偷懒,而是嵌入式开发的基本功。
1.2 三类人找方案,侧重点完全不同
我发现来问参考方案的人,大致能分成三类,需求其实很不一样。
第一类是刚入门的学生,很多人在准备“基于 STM32 的毕业设计”。这类人最缺的不是代码,而是一个能跑通的最小系统,以及一条清晰的学习路径。毕业设计选题通常是智能小车、智能台灯、超声波测距、环境监测这类经典项目,难点不在功能本身,而在于“不知道从哪开始”。这种时候我建议直接找开发板厂商的配套例程,比如正点原子或野火的入门手册,跟着教程把工程模板建起来、点个灯、跑个串口,后面的事情就会顺畅很多。
第二类是在做产品的工程师,比如要做“STM32 控制伺服电机 485”、要接“LIN 收发器”、要做“FOC 代码移植”。这类人对基础操作已经熟悉,需要的是某个具体外设或协议栈的参考实现。他们更看重代码的可靠性、时序的严谨性,以及能否快速集成进自己的项目里。我会建议他们优先翻 ST 官方的应用笔记和 Github 上的成熟开源库,再配合国内厂商提供的应用笔记,效率会高很多。
第三类是 DIY 爱好者或者竞赛党,比如想做“STM32 智能小车”、“STM32 鱼缸”、“两轮差速小车”。这类人做的东西偏创意集成,往往要同时用好几个外设。他们最需要的是一个能快速验证想法的原型方案,以及把多个模块串起来的“总装”思路。对他们来说,B站的视频教程和开源的完整项目源码反而是最珍贵的资源。
2. 开发环境:第一步就把地基打稳
2.1 Keil MDK 与 C51 共存安装:老生常谈但真要小心
不管你是用标准库、HAL 库还是 LL 库,国内绝大多数 STM32 教程都默认用 Keil MDK 来演示。很多人在“Keil5 兼容 C51 和 STM32 安装”这一步就卡住了。其实原理很简单:Keil 官网的 MDK 安装包只包含 ARM 编译器,如果你还要写 51 单片机,就得再装一个 C51 的安装包。
我第一次装的时候踩过一个坑:先装了 C51,又装了 MDK,结果工程里能选芯片但编译时一直提示找不到 C51 的头文件。后来才明白,这两个工具链虽然共用一个 IDE 外壳,但各自的编译器、头文件、库路径是分开的,安装顺序其实无所谓,关键是安装目录不要乱改,最好都用默认路径。切换工程时只需要在 Project 窗口里选对应的目标,Keil 会自动调用相应工具链。
还有一个高频问题:“KeilC STM32 查看 IO 输出波形”。很多人以为要外接逻辑分析仪才能看,其实 Keil 自带一个很朴素的逻辑分析仪:在 Debug 模式下,打开 View -> Analysis Windows -> Logic Analyzer,然后右键添加信号,比如 PORTA.5,再运行程序就能看到引脚电平的波形。缺点是只能看数字量,模拟量看不了,但排查 GPIO 翻转和 PWM 输出基本够用。需要看模拟波形的话,我后面会提到 VSCode 方案。
2.2 VSCode 开发 STM32:从配置到调试一次说清
VSCode 开发 STM32 这几年越来越流行,原因很实在:代码补全比 Keil 舒服太多、git 集成原生、写注释看 diff 都方便,而且免费。但初次配置确实有点门槛,网上教程参差不齐,我给你们捋一条我实测过很多次的路线。
最简单的方案是用 EIDE 插件。安装 EIDE 后,你可以直接在 VSCode 里创建 STM32 工程,它支持从 Keil 工程导入,也支持基于 CMake 构建。芯片包可以在插件里直接下载,编译器选择 ARM GCC 或者 Keil 的 ArmCC 都行。这个方案适合想保留 Keil 工程、又想要 VSCode 编辑体验的人。
如果想更“极客”一点,可以走“STM32CubeMX 生成 CMake 工程 + VSCode 打开 + cortex-debug 调试”的路线。先说调试配置这个老大难问题。很多人卡在“VSCode STM32 调试 powerlink 如何设置 launch.json”,其实不管调试什么协议,launch.json 的核心就是三件事:调试器类型、可执行文件路径、以及接口配置。我常用的配置大概是这样的:
{ "version": "0.2.0", "configurations": [ { "name": "STM32 Debug", "type": "cortex-debug", "request": "launch", "servertype": "openocd", "cwd": "${workspaceFolder}", "executable": "${workspaceFolder}/build/your_project.elf", "configFiles": [ "interface/stlink.cfg", "target/stm32f1x.cfg" ], "svdFile": "${workspaceFolder}/stm32f103.svd" } ] }注意,executable 路径必须指向编译生成的 elf 文件,而不是 hex。configFiles 要根据你的调试器和芯片系列来改,stlink 用 stlink.cfg,jlink 用 jlink.cfg。svdFile 是可选的外设寄存器描述文件,加上之后在调试时可以直观看到各个寄存器的值,强烈建议配上。
我个人的建议是:如果你主要做工程开发、产品迭代,VSCode 值得投入时间去配置一次。如果你是在校学生、跟着课程走,先用 Keil 把基础打牢,VSCode 可以等熟练之后再迁移。
2.3 芯片包安装与工程创建:新手最容易出错的环节
“STM32 芯片包安装”和“创建 STM32 工程”这两个关键词,几乎每天都会有人在群里问。芯片包其实就相当于 Keil 的芯片支持库,缺了它你在 Device 选择列表里就找不到对应的 STM32 型号。安装方法是在 Keil 里打开 Pack Installer,找到 STMicroelectronics 目录,展开对应的系列(比如 STM32F1 就找 Keil::STM32F1xx_DFP),点 Install 就能联网安装。
有个小坑:有些公司内网不能直接访问 Keil 的包服务器,这时候可以去 Keil 官网的 Pack 页面手动下载对应版本,然后双击安装。如果你用 STM32CubeMX 生成代码,也可以让 CubeMX 帮你自动安装固件库,但要注意版本一致性——同一个工程里的固件库版本最好不要一会儿用 1.8.0 一会儿用 1.6.0,否则编译会冒出一堆莫名其妙的错误。
“创建 STM32 工程”这块,国内流传着三个流派:标准库新建工程、HAL 库工程、寄存器工程。我建议新手直接从 HAL 库 + CubeMX 开始,原因很简单:HAL 库把底层寄存器操作封装成了函数,你只需要关注业务逻辑,外设初始化代码基本都是 CubeMX 生成的,不容易写错。等你能用 HAL 库流畅做项目了,再回去看标准库和寄存器版本,理解会深刻得多。当然,很多老的参考代码都是标准库写的,所以你至少得会看。标准库新建工程的核心那几步我都写成清单了:
- 复制标准库的 Libraries 目录到工程文件夹。
- 创建 User、HARDWARE、SYSTEM 等分组,把对应源文件加进去。
- 在 C/C++ 选项卡里添加 include 路径。少一个点路径,编译就是几百个报错。
- 选择芯片型号,勾选 Use MicroLIB。
- 修改启动文件和系统时钟配置文件。
还有“STM32 芯片第一脚怎么确认”这个问题,看着很基础,但真有人把芯片焊反了然后怀疑芯片坏了。两种方法:一是看芯片表面的圆形凹点或者斜角标记,凹点旁边的引脚就是第一脚;二是把芯片翻过来,丝印文字的左下角就是第一脚。这个方法在绝大多数 LQFP 封装的 STM32 上都适用,焊之前一定要多看一眼。
3. 高频需求下的具体参考方案拆解
3.1 STM32 做 USB 设备:没有你想的那么难
“STM32 如何做 USB 设备”是我被问到最多的问题之一,很多人的误区是觉得 USB 特别底层、特别难。其实 ST 官方已经把协议栈封装好了,如果你用 CubeMX,勾选 USB 设备功能,选择设备类别(HID、CDC、MSC 等),然后设置端点参数,代码生成之后只需要在回调函数里填业务逻辑就能跑。
以最常用的 USB CDC(虚拟串口)为例,它能让你的 STM32 在电脑上显示成一个 COM 口,非常适合做数据采集和调试信息输出。关键点有三个:时钟配置里 USB 时钟必须是 48MHz,不能多也不能少;PA11 和 PA12 是 USB 的 D- 和 D+ 引脚,一般要加上 1.5k 上拉电阻(部分芯片已内置),STM32F103 的 USB 电路里还需要在 D+ 上接一个 1.5K 到 3.3V 的电阻,才能被电脑识别成设备;最后就是端点描述符里的缓冲区大小要和实际传输数据匹配,否则会枚举失败。
我见过很多人在 USB 上卡了很久,最后发现是自己没有焊 1.5K 上拉电阻。这个电阻的作用是让主机检测到设备插入,没有它,电脑完全不知道有设备接上来了。所以“STM32 USB 电路”设计那块,参考官方评估板的原理图是最稳妥的,不要自己随意发挥。
3.2 定时器远比你想的复杂:模式、捕获、测频率一点通
“STM32 定时器”“定时器模式”这两个搜索词,说明大家普遍对定时器又爱又恨。其实定时器是 STM32 里最值得花时间搞懂的外设,因为它不只能计时,还能输出 PWM、捕获输入信号、编码器模式、霍尔传感器模式等,四舍五入就是一个多功能计数器引擎。
先分清几个概念:基本定时器(TIM6/7)只能做定时,通用定时器(TIM2/3/4/5)带 PWM 和输入捕获,高级定时器(TIM1/8)还能输出互补 PWM 和刹车功能。你做电机控制要用高级定时器,做普通延时用基本定时器就行。
“STM32 定时器捕获测频率”是高频应用,用得非常多的就是输入捕获模式。基本思路是:把被测信号接到定时器的 CHx 引脚,配置上升沿捕获,记录两次捕获的计数器值之差,就能算出周期,再取倒数得到频率。注意,被测信号频率不能超过定时器时钟频率的一半,否则采样不到。测低频信号时可以把定时器预分频调大,测高频信号时预分频要调小,这个需要根据你的信号范围动态调整。
“STM32 延时函数 delay 卡死”这个坑我也踩过。最经典的场景是:用 HAL_Delay() 在中断里调用,导致系统卡死。因为 HAL_Delay 依赖 SysTick 中断,如果在更高优先级的中断里调用它,SysTick 中断没法抢占,延时函数就永远等不到时间标志。解决办法是不要在中断服务程序里调用 HAL_Delay,换用状态机或者非阻塞延时。
还有“STM32 禁用 JTAG”这个骚操作,很多人想省下 PA15、PB3、PB4 这几个引脚,于是在代码里复用 JTAG 引脚。正确的做法是在初始化代码里调用 GPIO_InitTypeDef 时,先执行__HAL_AFIO_REMAP_SWJ_NOJTAG()或者 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE),把 JTAG 关闭,只保留 SWD。注意:一旦禁用 JTAG,你就不能用 JTAG 调试器,只能靠 SWD(一般用 ST-Link 就是 SWD 模式),如果程序里写错了把 SWD 也关了,芯片就锁死了,需要救砖操作。
3.3 从项目需求倒推参考方案:小车、电机、雷达、传感器
做项目时最怕“想做一个东西,但不知道要查什么”。我的建议是先把整体功能拆成模块,再一个个去找对应的参考方案。
以“STM32 智能小车”为例,这个项目网上方案一抓一大把,但如果用“STM32 两轮差速小车”作为关键词去找,能搜到更贴合的控制算法。差速小车的核心是左右两个驱动轮的速度控制,转向靠左右轮速差实现。你需要的参考方案至少包括三块:电机驱动(常见 L298N 或 TB6612)、编码器测速(用定时器编码器模式或外部中断)、PID 调速(位置式 PID 或增量式 PID)。对应到代码,每个模块都有成熟开源实现,但要把它们组合起来,就得理解每个模块的数据接口——编码器反馈的速度值怎么传给 PID,PID 输出怎么转成 PWM 占空比。
再比如“STM32 控制伺服电机 485”这个需求,其实是标准的工业运动控制场景。伺服驱动器一般通过 RS485 总线通信,很多支持 Modbus RTU 协议。你只需要用 STM32 的 USART + RS485 收发芯片(比如 MAX485),然后把要发的 Modbus 帧按格式拼出来即可。国内有开源项目“agile_modbus”,专为嵌入式设计的轻量级 Modbus 协议栈,在 stm32 上用非常合适。它把帧解析、校验、响应这些都封装好了,你只要关心寄存器地址和数据处理。
“STM32 超声波测距”是很多毕业设计的必备功能,核心就是 HC-SR04 模块:给 Trig 脚一个 10us 以上的高电平,模块发出超声波,同时 Echo 脚输出高电平,高电平持续时间就是声波往返的时间。用 STM32 的定时器输入捕获测量这个高电平时间,距离 = 时间 * 340 / 2。注意环境温度会影响声速,精度要求高的话要做温度补偿。
还有其他常见模块,比如“STM32 BH1750 OLED I2C Proteus 完整原理图”这串关键词,这类需求往往是想在仿真软件里先调通 I2C,再做实物。BH1750 是光照传感器,OLED 是 12864 显示屏幕,I2C 总线上挂着两个从设备,要注意它们的设备地址不同,OLED 一般是 0x3C,BH1750 一般是 0x23,程序里按地址区分操作就行。
“STM32 移植 LVGL”是近几年的大热门,LVGL 是一个开源的嵌入式图形库,能在 STM32 上做出很漂亮的 UI。移植思路不复杂:LVGL 本身是纯 C 代码,有自己的内存管理和刷新函数接口,你需要做的就是把屏的驱动(比如 ST7789、ILI9341)接入 LVGL 的 flush 回调,再配置一个定时器作为 LVGL 的心跳。真正难的是内存,LVGL 对 RAM 要求不低,F103 这种小内存芯片跑起来会比较吃力,一般建议 F4 以上。
“STM32 使用 AT 指令连接 ESP32C6”,这是 Wi-Fi/蓝牙 IoT 项目的典型场景。STM32 通过串口给 ESP32C6 发 AT 指令,比如“AT+CWMODE=1”“AT+CWJAP=ssid,password”“AT+CIPSTART=...”等。网上能找到很多 AT 指令集参考手册和例程。嵌入式系统里经常遇到这类“同级别 MCU 之间通信”的问题,比如“K210 与 STM32 通讯”,核心其实就是串口通讯协议:两边约定好帧头、帧尾、数据长度、校验方式,就能稳定传数据。这比纠结用什么总线更有用。
3.4 STM32 系统架构与常见报错速查
“STM32 系统架构”这个词,如果只是生硬地讲总线矩阵和时钟树,很难让人记住。我更愿意用一个比喻:STM32 的内部像一个繁忙的交通枢纽,CPU 是核心办事人员,总线和 DMA 是公路和传送带,外设就是分布在各个路口的办事窗口。时钟树则是整个系统的节拍器,所有外设的工作节奏都必须和它对齐。理解了这一点,你就知道为什么有时候外设不工作要先检查时钟有没有使能,而不是急着怀疑代码逻辑。
再来说几个见频率极高的报错和排查方法。比如 Keil 下载时报load "d:\\stm32 prohect\\2-1 stm32工程模板\\objects\\project.axf" error: fla,这种分两类:一类是“Flash Download Failed”,一般是芯片型号没选对,或者 Flash 算法没有加载,检查 Options for Target -> Debug -> Settings -> Flash Download 里有没有选择对应的编程算法;另一类是“Cannot Load Flash Programming Algorithm”,多半是 Keil 版本太老,不支持你那个芯片型号,升级到较新版本就行。
“STM32 CAN 通信突然连不上”这种问题,我在现场排查过很多次,最常见的三个原因:波特率配置不匹配、终端电阻没接、总线只有单节点无应答。CAN 总线调试时至少要有两个节点才能通信(否则 TJA1050 收不到 ACK),除非开启了环回模式。先检查 120 欧姆终端电阻,再检查波特率分频系数,用逻辑分析仪看波形会更直观。
“STM32 串口接收”的问题,也值得单独提醒。很多人写串口中断接收,只开接收中断,但忘了在中断里清理标志位,结果进一次中断之后就再也不进中断了。HAL 库用 HAL_UART_Receive_IT 的方式,每次接收完都需要重新调用一次,很多人就是漏了这一步。建议用空闲中断 + DMA 接收不定长数据,具体代码网上有很多,这个方案在实战中非常稳。
4. 国内优质资源平台汇总:哪些平台真的值得逛
4.1 开发板厂商的官网资料库:最被低估的宝库
很多人的第一块开发板就是正点原子或野火的板子,但毕业后换了更高端的芯片,就把这些厂商的网站忘干净了。这是非常可惜的。正点原子、野火、硬石、安富莱这几家国内老牌嵌入式厂商,积累了非常多优质的学习资料和源码,即使你用的不是他们的开发板,很多外设驱动代码和应用笔记也是可以通用的。
正点原子的资料包做得非常系统,入门手册、进阶手册、各种模块例程、原理图、PCB 封装都有,而且更新频率稳定。野火的文档风格更“博客化”,有很多深入浅出的原理讲解,尤其是 STM32 的《零死角玩转 STM32—F103 指南》和霸道的系列教程,适合细读。硬石电子在电机控制和 FOC 方面积累很深,你要是搞“STM32 FOC 代码”,硬石的开源资料值得仔细翻。安富莱的论坛氛围好,里面有大神分享很多工业级别的参考实现,不只是玩具代码。
这四家的资料共同的特点是:代码风格规整、注释完善、原理图清晰。我的建议是不要只认准一家,可以把同一功能的例程从不同厂商那里各拉一份,对照着看,很多疑惑会自己解开。比如同一个 I2C 读传感器,正点原子可能用状态机封装,野火可能用轮询加超时,你对比之后会对硬件抽象有更深的体会。
4.2 开源代码平台:Gitee 和 GitHub 的正确打开方式
国内访问 GitHub 偶尔不太稳定,但 STM32 相关项目大部分都能顺利浏览。如果你做的是偏国产化、偏产品化的项目,Gitee 上也有大量中文注释友好的 STM32 项目。
很多人在开源平台找代码的方法是搜“STM32 + 功能关键词”,这样能找到很多结果,但质量参差不齐。我建议用几个技巧来提高搜索效率:一是看项目的 Star 数量不等于一切,更重要的是看最近 commit 时间和 issue 回复情况,一个三年前的 star 高项目可能依赖的库版本老得不能用;二是优先找带 README 和原理图的项目,只有代码没有文档的项目学习成本极高;三是在 GitHub 搜索时用“STM32 + 协议名 + example”这种组合,比如“STM32 Modbus example”“STM32 USB CDC example”,命中率更高。
有一类非常好的参考源是 ST 官方在 GitHub 上的仓库,比如 stm32-hotspot、stm32-mw、STM32CubeF1/F4/H7 等。这些不是“民间代码”,而是官方维护的中间件和例程,质量非常有保障。你做的 USB、以太网、图形界面、FreeRTOS 集成方案,在官方仓库里基本都能找到基础参考。
4.3 技术社区与问答平台:从搜索引擎到“人在回路”
国内 STM32 相关的技术社区,比较活跃的有 CSDN、电子发烧友、21ic 电子网、知乎等。CSDN 的内容量极大,搜索结果很靠前,但很多文章是早期搬运或者只有代码没有解释,参考价值打折。我的使用习惯是:遇到问题先搜 CSDN,看到有关于这个问题的多篇文章,对照着读,哪篇的成分更足、评论区讨论更多,就重点看哪篇。
电子发烧友(eefocus)上有不少完整的项目开源和原理图分享,尤其是涉及“STM32 毕业设计”整个工程项目时,能找到包含原理图、PCB、源码、论文参考的整合包。21ic 电子网是国内老牌电子社区,里面有很多资深工程师的实战经验帖子,比如电源设计、PCB 布局、EMC 处理这类“学校里没人教”的内容。知乎上关于 STM32 学习方法论、职业发展、项目复盘的高质量回答也不少,适合用来“局部扫盲”。
搜资源时我自己的经验是多换关键词试,同一个问题换几个不同的说法,出来的页面会完全不同。比如你搜“stm32 为什么 shift 不对”可能没结果,但搜“stm32 spi 数据错位”就能找到有价值的内容。另外,看到好文章要及时收藏并整理出自己的知识库,不要看到就关,以后再次翻找的成本太高。
4.4 B站以及视频教程如何高效利用
B站 现在已经是嵌入式学习的重要阵地了,很多 UP 主做得比付费课程还用心。STM32 相关的视频内容深度足够,比如入门项目“STM32 从零开始”“STM32 标准库入门”系列,更新驱动的“STM32 定时器捕获”“CAN 通信实战”专题,以及算法类的“STM32 串口调试 PID”“FOC 控制进阶”等。
视频学习有个大坑,就是容易“看会了”但“不会写”。我强烈建议你视频只看 30%,另外 70% 的时间用来自己敲代码、改代码、烧录验证。UP 主在视频里可能 30 秒就点完的配置,你自己点一遍可能要十分钟,这是完全正常的。看视频的时候准备好板和线,他讲到哪里你就操作到哪里,手脑并用才是效率最高的方式。
另外,B站的视频评论区经常有热心网友分享源码和资料链接,但要注意甄别,有些不安全的压缩包不要乱解压。我一般优先看置顶评论里 UP 主自己发的网盘链接,再看评论区其他网友整理的笔记。对了,B站里很多“STM32 报站程序完整代码”、“STM32 鱼缸”这种非常具体的项目视频,正好说明现在很多人在做小而美的具体项目,这些项目的作者往往愿意分享完整思路,是很好的灵感来源。
5. 把参考方案真正变成自己的东西
5.1 参考不是复制,改造才是意义
很多新手拿到参考代码,直接复制粘贴就烧录,跑通了就觉得自己“会了”。但过两周再让他复现,他可能连代码里用的定时器是哪个都不记得。我自己的体会是:任何参考代码,拿到手之后至少要自己做三件事——改一个参数、删一个功能、加一个功能。
改参数,比如把某一个延时从 100ms 改成 500ms,观察实际效果变化;删功能,比如把例程里的 OLED 显示部分去掉,看主逻辑还能不能正常跑;加功能,比如在串口收到特定数据时反转一个 LED,然后通过逻辑分析仪验证你的预期。这三步做完,你对这套代码的理解程度会完全不一样。
更进阶一步的做法是“重写一遍”。二十年前我刚学单片机的时候,老师让我把例程背下来再默写,当时觉得无用,后来才明白这是建立肌肉记忆的必经之路。我们现在不需要背代码,但把例程从头敲一遍、边敲边理解每一行的作用,依然是最快的提升方式。
5.2 建立自己的模块库与搜商
我强烈建议每个做 STM32 的人都建立自己的“模块库”。每调通一个传感器、每搞定一个通信协议,就把驱动代码整理成标准接口形式保存下来。这个库不用一开始就很完美,哪怕只是把以前项目里能用的部分复制到一个文件夹里也好。等你做过三五个项目后,这个库就是你的私人“参考方案库”,效率提升巨大。
具体来说,模块库里的每个文件建议包含:硬件接口说明(用哪个串口、哪个引脚、电压多少)、初始化函数、收发函数、注意事项(比如 I2C 总线上拉了没有、必须接上拉电阻等)。给自己看的东西不用太正式,但一定要让三个月后的自己能看得懂。我吃过太多亏,省了几分钟写注释的时间,结果重新读自己的代码花了半小时。
最后说一个心得:找参考方案的能力,我把它叫作“搜商”。同样一个问题,有人十分钟找到完美方案,有人一下午还在原地打转,差别就在会不会拆解关键词、会不会交叉验证、会不会快速判断一个方案靠不靠谱。GitHub 上看到一个项目,先看 license,再看 Readme 里的硬件连接图,接着看示例代码的主函数,能快速判断这个项目是否能复现。在 CSDN 或论坛看到一段代码,先看评论区有没有人反馈问题,再看代码风格是否规范,通常就能知道值不值得花时间研究。
STM32 这条路,说长不长,说短不短。我自己从一开始找参考方案时一头雾水,到后来能快速定位问题、选型、集成,经历了很多个深夜和无数个调不通的瞬间。回头看,最重要的不是某一次成功的项目,而是那套“拆解需求、找参考、理解原理、改造集成”的方法论。希望这篇从资源到方法的汇总,能让你在每次打开搜索引擎的时候,都更有方向一些。