嵌入式硬件基础:微控制器与微处理器、常见架构(ARM、RISC-V)、外设接口
做嵌入式这行,你首先得搞清楚你手里的“芯”到底是什么。很多人干了三五年,还在把单片机当电脑用,或者反过来。今天咱们就把这事掰扯清楚。
微控制器 vs 微处理器:到底差在哪?
我面试新人时,第一个问题经常是:“你觉得STM32和树莓派,哪个是MCU,哪个是MPU?”
其实区分它们很简单,看三点:集成度、功耗、实时性。
| 对比维度 | 微控制器(MCU) | 微处理器(MPU) |
|---|---|---|
| 典型代表 | STM32、ESP32、AVR | i.MX、树莓派CM4、RK3588 |
| 片内存储 | 集成Flash + SRAM | 无片内Flash,需外挂DDR |
| 外设集成 | ADC、DAC、定时器、PWM全在片内 | 大部分外设需外接芯片 |
| 功耗 | uA~mA级,可电池供电 | mA~A级,通常需要散热 |
| 实时性 | 硬实时,中断响应ns级 | 软实时,依赖OS调度 |
| 操作系统 | 裸机或RTOS | Linux、Android |
| 启动时间 | 毫秒级上电即跑 | 秒级,需加载Bootloader |
选型口诀:控制用MCU,处理用MPU。如果项目需要跑Linux、做复杂UI、处理视频流,别犹豫,上MPU。如果只是采集传感器、控制电机、跑个协议栈,MCU更香。
常见架构:ARM 与 RISC-V
架构决定了指令集,指令集决定了编译器怎么干活。目前嵌入式领域,ARM是绝对的老大,RISC-V是势头最猛的新玩家。
ARM:生态成熟,闭源但稳定
ARM的Cortex系列,我按应用场景分三类:
- Cortex-M系列:主打MCU市场。M0/M0+用于超低功耗,M3/M4是性能均衡王,M7/M33/M55开始卷DSP和AI。
- Cortex-R系列:实时处理器,用于汽车、硬盘控制器。我很少碰,除非做车规级项目。
- Cortex-A系列:应用处理器,跑Linux/Android。A5/A7/A53/A72,核心数越多越贵。
ARM最大的优势是生态。Keil、IAR、GCC全支持,ST、NXP、TI、Microchip都在出ARM核的芯片。你遇到问题,网上随便一搜就有答案。
我的习惯:做量产产品,优先选ARM。不是因为技术多先进,而是因为供应链稳定、工具链成熟、招人容易。老板不会因为你用了冷门架构而夸你,但会因为交不了货而骂你。
RISC-V:开源免费,但生态还在长
RISC-V是个有意思的东西。指令集开源,意味着你可以自己定制指令,也可以免去ARM那笔不菲的授权费。
我去年帮一家创业公司做方案,他们选了RISC-V核的MCU。原因很简单:成本敏感。一颗RISC-V的MCU比同性能的ARM便宜30%以上,而且他们团队有能力自己改编译器。
但RISC-V也有坑:
- 工具链碎片化:每家厂商的RISC-V核都有点小差异,GCC版本不统一。
- 调试器兼容性:J-Link对RISC-V支持有限,OpenOCD配置起来比ARM麻烦。
- 中间件少:FreeRTOS移植好了,但一些协议栈、加密库需要自己适配。
我曾经踩过的坑:用某国产RISC-V芯片做I2C从机,发现硬件I2C模块的时序和标准不完全一致。查了三天手册,最后只能用GPIO模拟。所以,用RISC-V前,一定先确认外设IP的成熟度。
外设接口:嵌入式工程师的“手和脚”
芯片再强,也得跟外界打交道。外设接口就是沟通的桥梁。我按使用频率排个序:
1. GPIO — 最基础也最容易被忽视
GPIO看似简单,但配置错了能让你抓狂。我见过有人把推挽输出当开漏用,结果I2C死活不通。
- 推挽输出:能输出高和低,驱动能力强。用于LED、蜂鸣器。
- 开漏输出:只能拉低,高电平靠上拉电阻。用于I2C、多设备共享总线。
- 浮空输入:电平不确定,必须外部拉高或拉低。
- 上拉/下拉输入:内部有弱上拉/下拉,适合按键检测。
2. UART — 调试必备,通信万金油
UART是串行异步通信,三根线:TX、RX、GND。波特率要匹配,否则全是乱码。
// 典型的UART初始化(STM32 HAL库)
UART_HandleTypeDef huart1;
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
HAL_UART_Init(&huart1);
避坑指南:调试时用115200波特率,量产时如果线缆长,降到9600更稳。我曾经在产线上因为波特率太高,导致部分设备通信失败,最后全改9600才解决。
3. SPI — 高速,全双工
SPI有四线:SCK、MOSI、MISO、CS。速度可以跑到几十MHz,适合LCD、Flash、SD卡。
- 模式0~3:由时钟极性(CPOL)和相位(CPHA)决定。主从必须一致。
- 多从机:每个从机一根CS线,或者用菊花链。
4. I2C — 两线制,多设备
I2C只有SDA和SCL,靠地址区分设备。速度慢(标准100kHz,快速400kHz),但省引脚。
- 7位地址 vs 10位地址:大部分传感器用7位。
- 上拉电阻:通常4.7kΩ,总线电容大时换小一点。
我曾经遇到的坑:I2C总线挂死。从机拉低SDA不放,主机等不到应答。解决办法:硬件上做超时复位,或者用GPIO模拟I2C,手动控制时钟脉冲把从机“抖”出来。
5. 其他常用接口
| 接口 | 特点 | 典型应用 |
|---|---|---|
| CAN | 差分信号,抗干扰强,多主通信 | 汽车、工业控制 |
| USB | 即插即用,支持OTG | 数据采集、固件升级 |
| SDIO | 4位并行,高速 | SD卡、WiFi模块 |
| I2S | 音频专用,左右声道分离 | 麦克风、扬声器 |
| PWM | 脉宽调制,控制功率 | 电机调速、LED调光 |
| ADC/DAC | 模拟量转换 | 传感器采集、音频输出 |
知识结构总览
下面这张图,把本章的核心知识点串起来了。你对照着看,心里就有谱了。
选型实战:一个真实案例
去年我做了一个便携式数据采集器,需求如下:
- 4路模拟量输入(0-10V,12位精度)
- 1路CAN总线,与PLC通信
- 1路RS485,接Modbus仪表
- 本地存储到SD卡
- 电池供电,续航8小时
- 成本控制在150元以内
我的选型思路:
- MCU还是MPU? 不需要跑Linux,没有UI,纯控制逻辑。选MCU。
- ARM还是RISC-V? 项目周期紧,团队熟悉ARM。选ARM Cortex-M4。
- 具体型号? 需要2路ADC(片内)、1路CAN(片内)、1路UART转RS485(外挂芯片)、SDIO(片内)。最终选了STM32F407VGT6。
结果:项目按时交付,单板BOM成本128元。如果当时为了尝鲜选RISC-V,光调试CAN驱动可能就要多花两周。所以,选型不是炫技,是权衡。
小结
嵌入式硬件选型,说白了就是三个问题:用MCU还是MPU?用ARM还是RISC-V?外设够不够用? 把这三个问题想清楚,方案就定了七八成。剩下的,就是看数据手册、画原理图、调驱动了。