嵌入式硬件基础:微控制器与微处理器、常见架构(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 模拟量转换 传感器采集、音频输出

知识结构总览

下面这张图,把本章的核心知识点串起来了。你对照着看,心里就有谱了。

嵌入式硬件基础知识结构图 嵌入式硬件基础 MCU vs MPU MCU:集成 MPU:外挂 uA级功耗 mA~A级 CPU架构 ARM:生态 RISC-V:开源 Cortex-M/R/A 工具链碎片 外设接口 GPIO/UART SPI/I2C CAN/USB ADC/PWM 选型核心:应用场景决定MCU/MPU,生态决定架构,外设决定接口方案

选型实战:一个真实案例

去年我做了一个便携式数据采集器,需求如下:

  • 4路模拟量输入(0-10V,12位精度)
  • 1路CAN总线,与PLC通信
  • 1路RS485,接Modbus仪表
  • 本地存储到SD卡
  • 电池供电,续航8小时
  • 成本控制在150元以内

我的选型思路:

  1. MCU还是MPU? 不需要跑Linux,没有UI,纯控制逻辑。选MCU。
  2. ARM还是RISC-V? 项目周期紧,团队熟悉ARM。选ARM Cortex-M4。
  3. 具体型号? 需要2路ADC(片内)、1路CAN(片内)、1路UART转RS485(外挂芯片)、SDIO(片内)。最终选了STM32F407VGT6。

结果:项目按时交付,单板BOM成本128元。如果当时为了尝鲜选RISC-V,光调试CAN驱动可能就要多花两周。所以,选型不是炫技,是权衡。

小结

嵌入式硬件选型,说白了就是三个问题:用MCU还是MPU?用ARM还是RISC-V?外设够不够用? 把这三个问题想清楚,方案就定了七八成。剩下的,就是看数据手册、画原理图、调驱动了。