选对平台,少走弯路
刚开始搞嵌入式,很多人卡在第一步:用什么开发板?STM32、ESP32、还是树莓派Pico?其实别想太多。如果你是新手,建议从STM32F103C8T6(俗称“蓝丸”)入手。价格便宜,资料多,社区活跃,淘宝二十块钱包邮,烧录器也只要十几块。
我第一次上电的时候还烧了保险丝,因为把5V接到3.3V脚上了。所以接线前一定看清楚原理图,别像我一样拿万用表测了半天还以为是模块坏了。
环境搭建:别被IDE劝退
Windows下可以用Keil MDK,但注册麻烦还容易弹版权警告。推荐用VS Code + PlatformIO,跨平台、插件全,还能直接管理库文件。装好后新建一个STM32项目,选择对应的板型,PlatformIO会自动下载工具链。
如果用Linux,可以试试GCC ARM工具链配合OpenOCD和ST-Link下载。虽然命令行看着吓人,但写个Makefile之后,一键编译下载不是问题。
让LED闪起来才是正经事
硬件接好了,环境配完了,该写代码了。下面是一个最简单的GPIO控制示例,用来点亮连接在PA5上的LED:
#include <stm32f10x.h>
void delay(uint32_t time) {
for (uint32_t i = 0; i < time; i++) {
for (uint32_t j = 0; j < 800; j++);
}
}
int main(void) {
// 使能GPIOA时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
// 配置PA5为推挽输出模式,最大速度10MHz
GPIOA->CRL &= ~GPIO_CRL_MODE5;
GPIOA->CRL |= GPIO_CRL_MODE5_1;
GPIOA->CRL &= ~GPIO_CRL_CNF5;
while (1) {
GPIOA->BSRR = GPIO_BSRR_BR5; // PA5输出低电平,点亮LED
delay(1000);
GPIOA->BSRR = GPIO_BSRR_BS5; // PA5输出高电平,熄灭LED
delay(1000);
}
}这段代码没有用任何库函数,直接操作寄存器。虽然看起来硬核,但能让你明白时钟怎么开、端口怎么配。等你理解了这个,再去看HAL库就会觉得特别亲切。
加点外设:串口打印调试信息
光看LED闪烁太单调,加上串口就能输出“Hello from STM32”这种消息了。配置USART1需要设置波特率、使能TX引脚、开启中断等等。一旦通了,电脑上用串口助手看到自己单片机发来的数据,那种成就感比吃火锅还爽。
记得有一次我波特率设成了9600,结果电脑显示乱码,折腾半小时才发现代码里写的是115200。这种低级错误谁都犯过,关键是要学会用逻辑分析仪或者串口波形反推问题。
实战进阶:做个温湿度监控小设备
当你掌握了GPIO和UART,就可以整点实用的东西了。比如用DHT11读取温湿度,通过串口上传到电脑,或者用OLED屏本地显示。
我室友就做了个放在阳台的小装置,温度超过30度就自动打开继电器控制的风扇。他本来想用WiFi远程控制,结果发现信号穿不了两堵墙,最后改成蓝牙模块+手机APP,反而更稳定。
嵌入式项目就是这样,理论是一回事,实际布线、供电、抗干扰全是学问。有时候软件没问题,但电源一接上就复位,查来查去发现是滤波电容没焊好。
别怕出错,动手才是王道
很多人总想着准备齐全再动手,结果资料收藏了一大堆,开发板落灰。其实最好的学习方式就是买块板子,照着例程改,哪怕只是改个闪烁频率,也能加深理解。
有个朋友一开始连JTAG都分不清,现在已经在做电机驱动板了。他的经验就一条:每个功能只专注实现一次,懂了就换下一个。从点灯到串口,从ADC采样到PWM调光,一步步来,半年下来已经能独立接项目了。