嵌入式硬件基础:MCU选型、外设接口与最小系统设计
各位同学,咱们今天聊点实在的。做嵌入式开发,硬件是地基。地基没打好,后面RTOS跑得再欢,也容易翻车。我见过不少项目,软件逻辑完美,结果板子一上电就死机,查到最后,往往是MCU选型留的余量不够,或者某个引脚电平没处理好。
这一章,咱们就把硬件基础夯结实。说白了,就是三件事:怎么挑芯片、怎么用外设、怎么搭最小系统。
MCU选型:别光看主频和Flash
很多新手选MCU,上来就问:“主频多高?Flash多大?” 嗯,这俩指标确实重要,但远远不够。我个人的习惯是,先列一个需求清单,再反过来挑芯片。
| 评估维度 | 关键问题 | 我的经验 |
|---|---|---|
| 处理性能 | 需要跑RTOS吗?有无浮点运算? | 跑RTOS建议Cortex-M4以上,带FPU更省心 |
| 存储资源 | 代码量多大?需不需要OTA升级? | OTA至少留双Bank,Flash翻倍 |
| 外设接口 | 需要几路UART/SPI/I2C? | 我建议多留1-2路备用,调试时你就懂了 |
| 功耗约束 | 电池供电?待机电流要求? | 选带多种低功耗模式的型号,比如STM32L系列 |
| 封装与成本 | 板子空间有限?BOM成本敏感? | QFN封装省空间,但焊接难度大,量产要考虑 |
| 供货与生态 | 芯片交期多久?开发工具链成熟吗? | 千万别选冷门型号,我曾经被交期坑过三个月 |
常见外设接口:GPIO、UART、SPI、I2C
这四种接口,基本覆盖了90%的嵌入式通信场景。咱们一个一个过,重点讲实际项目中容易踩的坑。
GPIO:最基础,也最容易翻车
GPIO看似简单,就是读高低电平。但你真的用对了吗?
- 推挽输出 vs 开漏输出: 推挽适合驱动LED、蜂鸣器;开漏用于I2C总线或电平转换。我见过有人用推挽接I2C,结果总线拉不低,通信失败。
- 上拉/下拉电阻: 按键输入必须外部上拉,内部上拉太弱,容易受干扰。嗯,这里要注意,悬空引脚是万恶之源。
- 电流驱动能力: 普通GPIO一般只能输出几mA,直接驱动继电器?别想了,加三极管或MOS管。
UART:串口通信的“万金油”
UART是调试的标配,也是很多传感器、GPS模块的通信方式。你想想看,几乎每个嵌入式工程师都离不开它。
- 波特率匹配: 两边必须一致,常见的115200、9600。我曾经遇到过晶振不准导致波特率偏移,数据全是乱码。
- 流控: 高速通信(如1Mbps以上)建议用硬件流控(RTS/CTS),否则容易丢包。
- 电平转换: MCU一般是3.3V,如果接5V的RS232或RS485,必须加电平转换芯片,比如MAX3232。
SPI:高速、全双工,但线多
SPI适合高速数据传输,比如SD卡、显示屏、ADC。它需要4根线:SCK、MOSI、MISO、CS。
- 时钟极性(CPOL)和相位(CPHA): 主从设备必须一致,否则数据对不上。我建议直接看从设备数据手册的时序图,别猜。
- 片选(CS)控制: 多设备共用SPI总线时,CS必须由软件控制,不能硬件自动拉低,否则容易总线冲突。
- 布线注意: SCK线尽量短,不要跟大电流信号并行走,否则干扰严重。
I2C:两线制,但协议复杂
I2C只需要SDA和SCL两根线,支持多主多从,但协议比SPI复杂。
- 地址冲突: 每个I2C设备有7位或10位地址,同一总线上不能重复。我遇到过两个传感器地址一样,只能换型号。
- 上拉电阻: SDA和SCL必须外部上拉,阻值一般4.7kΩ。总线电容大时,阻值要减小,否则上升沿太慢。
- 时钟拉伸: 从设备可以拉低SCL让主设备等待,很多MCU的I2C外设不支持这个特性,选型时要注意。
最小系统设计:让MCU跑起来的最简电路
所谓最小系统,就是让MCU能正常工作的最低硬件要求。说白了,就是电源、时钟、复位、调试接口这四样。
电源电路
MCU对电源纹波很敏感,尤其是ADC采样时。我建议在电源入口加10μF电解电容 + 0.1μF瓷片电容,靠近每个电源引脚再加0.1μF去耦电容。别省这几个电容,省了就是给自己挖坑。
时钟电路
外部晶振比内部RC振荡器精度高得多,涉及UART通信或实时时钟时,必须用外部晶振。负载电容要根据晶振手册选,一般18pF或22pF。嗯,这里要注意,晶振走线要短,不要过孔,否则容易起振失败。
复位电路
最简单的复位电路就是一个电阻+电容,上电时RESET引脚保持低电平一段时间。但工业环境建议用专用复位芯片,比如MAX809,能提供更可靠的复位信号。
调试接口
SWD只需要两根线(SWDIO、SWCLK),比JTAG省引脚,是我个人最常用的。记得在板子上留出调试接口的排针,别等板子焊好了才发现烧不了程序。