嵌入式¶
嵌入式系统是以应用为中心、以计算机技术为基础,软硬件可裁剪的专用计算机系统。从智能手表到工业机器人,从汽车 ECU 到火星探测器,嵌入式无处不在。
一、什么是嵌入式?¶
一个常见的误解是:嵌入式 = 单片机编程。实际上,嵌入式系统的范围远比这大。
嵌入式系统的定义
嵌入式系统(Embedded System) 是嵌入到目标设备中、为特定功能设计的计算机系统。与通用计算机(PC)相比,它通常:
- 面向特定任务(不是通用计算)
- 有实时性/可靠性/功耗要求
- 软硬件紧密结合
- 资源受限(内存、算力、功耗)
graph TB
subgraph "嵌入式系统的光谱"
A["裸机单片机<br>8-bit MCU<br>几 KB RAM"]
B["RTOS 单片机<br>32-bit MCU<br>几百 KB RAM"]
C["嵌入式 Linux<br>MPU/SoC<br>几百 MB RAM"]
D["边缘计算设备<br>GPU/NPU<br>几 GB RAM"]
end
A -->|复杂度递增| B -->|复杂度递增| C -->|复杂度递增| D
style A fill:#69db7c
style B fill:#ffd43b
style C fill:#ffa94d
style D fill:#ff6b6b
嵌入式 vs 非嵌入式¶
| 特性 | 嵌入式系统 | 通用计算机(PC/服务器) |
|---|---|---|
| 目的 | 特定功能 | 通用计算 |
| 操作系统 | 无 / RTOS / 嵌入式 Linux | Windows / macOS / Linux |
| 用户界面 | 无 / 简单 / 触摸屏 | 完整 GUI |
| 实时性 | 通常要求 | 通常不要求 |
| 资源 | 受限 | 充裕 |
| 开发方式 | 交叉编译 | 本地编译 |
| 典型代表 | STM32 控制电机、ESP32 采集数据 | 笔记本写代码、服务器跑网站 |
二、电机用单片机控制 vs 用 Linux 上位机控制?¶
这是一个很好的问题,答案是:都是嵌入式,但层级不同。
典型架构¶
graph TB
subgraph "方案 A:纯 MCU"
A1[传感器] --> A2[STM32<br>读取传感器 + PID + PWM]
A2 --> A3[电机驱动]
end
subgraph "方案 B:MCU + 上位机"
B1[传感器] --> B2[STM32<br>实时控制 / PID / PWM]
B4[Linux 上位机<br>ROS / 路径规划 / 视觉] --> B2
B2 --> B3[电机驱动]
B5[摄像头] --> B4
end
subgraph "方案 C:纯 Linux"
C1[传感器] --> C2[树莓派 / Jetson<br>Linux + GPIO / PWM]
C2 --> C3[电机驱动]
end
| 方案 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| 纯 MCU | 简单控制(舵机、步进电机、小车) | 成本低、实时性好、功耗低 | 算力有限,无法处理复杂算法 |
| MCU + Linux 上位机 | 机器人、无人机、自动驾驶 | 各取所长:MCU 做实时控制,Linux 做算法 | 系统复杂、需要通信协议 |
| 纯 Linux | 对实时性要求不高的场景 | 开发快速、生态丰富 | 实时性差、功耗高 |
怎么选?
- 需要 微秒级实时控制(PID、FOC 电机控制、高频 PWM)→ 必须用 MCU
- 需要 视觉/AI/路径规划(SLAM、深度学习推理)→ 需要 Linux 上位机
- 两者都需要 → MCU + 上位机组合(这是机器人领域最常见的架构)
- 控个灯、读个传感器 → MCU 足矣
- 做个 Web 服务器控制家电 → ESP32 或树莓派都行
上位机也是嵌入式吗?¶
是的。树莓派、Jetson Nano 运行的虽然是 Linux,但它们:
- 嵌入到特定设备中(机器人、无人机)
- 面向特定任务(视觉处理、运动规划)
- 通过 GPIO / 串口 / CAN 和硬件交互
这属于 嵌入式 Linux 的范畴。嵌入式 ≠ 裸机编程,嵌入式是一个从 8 位单片机到高性能 SoC 的连续光谱。
三、MCU 主流平台一览¶
按架构分类¶
| 架构 | 位宽 | 代表芯片 | 特点 | 典型应用 |
|---|---|---|---|---|
| 8051 | 8-bit | STC89C52、AT89S52 | 经典入门,资源极少 | 教学、简单控制 |
| AVR | 8-bit | ATmega328P(Arduino UNO) | 简单易用,Arduino 生态 | 原型验证、创客 |
| ARM Cortex-M0/M0+ | 32-bit | STM32F0、RP2040 | 低功耗入门级 ARM | 可穿戴、传感器节点 |
| ARM Cortex-M3 | 32-bit | STM32F1、GD32F103 | 经典通用型 | 工业控制、消费电子 |
| ARM Cortex-M4 | 32-bit | STM32F4、nRF52840 | 带 FPU + DSP | 电机 FOC、音频处理 |
| ARM Cortex-M7 | 32-bit | STM32H7、i.MX RT1060 | 高性能 MCU 天花板 | 高速通信、工业网关 |
| ARM Cortex-M33 | 32-bit | STM32L5、STM32U5 | M4 升级 + TrustZone | 安全 IoT |
| RISC-V | 32-bit | ESP32-C3、CH32V、GD32VF | 开源指令集,新兴 | IoT、国产替代 |
| Xtensa | 32-bit | ESP32、ESP32-S3 | 双核 + WiFi/BLE | IoT、智能家居 |
| ARM Cortex-A | 32/64-bit | 全志 H3、RK3588、BCM2711 | 应用处理器,跑 Linux | 机器人上位机、边缘 AI |
按厂商分类¶
graph LR
subgraph "MCU 厂商"
ST["ST<br>STM32 系列"]
TI["TI<br>MSP430 / TM4C"]
NXP["NXP<br>i.MX RT / LPC"]
ESP["乐鑫<br>ESP32 系列"]
Nordic["Nordic<br>nRF52 / nRF53"]
Microchip["Microchip<br>PIC / AVR / SAM"]
GD["兆易创新<br>GD32"]
WCH["沁恒<br>CH32"]
end
| 厂商 | 主要产品 | 强项领域 | 生态 |
|---|---|---|---|
| ST(意法半导体) | STM32F/G/H/L/U/W | 通用 MCU 之王 | CubeMX、HAL 库 |
| 乐鑫(Espressif) | ESP32/S2/S3/C3/C6/H2 | WiFi + BLE IoT | Arduino、ESP-IDF |
| Nordic | nRF52840、nRF5340 | 低功耗蓝牙(BLE) | nRF Connect SDK |
| TI(德州仪器) | MSP430、CC2652、TM4C | 超低功耗、无线 | CCS、TI-RTOS |
| NXP(恩智浦) | i.MX RT、LPC、Kinetis | 高性能、汽车 | MCUXpresso |
| Microchip | PIC、AVR、SAMD | 经典 8-bit、Arduino | MPLAB |
| 兆易创新 | GD32F103/303/450 | STM32 国产替代 | 兼容 HAL |
| 沁恒 | CH32V/F | RISC-V 先锋 | MounRiver |
初学者如何选?
- 入门学习:Arduino(ATmega328P)— 门槛最低
- 深入理解 MCU:STM32F103 / STM32F407 — 资料最多,就业需求大
- IoT 物联网:ESP32 — WiFi + BLE 一体
- 低功耗蓝牙:nRF52840 — BLE 领域标杆
- 机器人/电机控制:STM32F4/H7 — 高性能 + FPU + 定时器丰富
四、RTOS 操作系统¶
当项目复杂到一定程度,裸机(while 大循环)就不够用了,这时需要 实时操作系统(RTOS):
| RTOS | 许可证 | 特点 | 典型搭配 |
|---|---|---|---|
| FreeRTOS | MIT | 最流行、轻量、ESP32 内置 | STM32、ESP32 |
| RT-Thread | Apache 2.0 | 国产、组件丰富、类 Linux 体验 | STM32、RISC-V |
| Zephyr | Apache 2.0 | Linux 基金会、现代化、安全 | nRF52、STM32 |
| ThreadX (Azure RTOS) | MIT | 微软支持、医疗/航空认证 | STM32、Renesas |
| μC/OS | 商业/教育 | 经典教科书、代码清晰 | 教学 |
| LiteOS | BSD | 华为、NB-IoT | 海思芯片 |
graph TB
subgraph "何时需要 RTOS?"
Q1{任务数量?} -->|"1~2 个"| A1[裸机 while 循环<br>+ 状态机]
Q1 -->|"3+ 个"| Q2{需要精确时序?}
Q2 -->|否| A2[裸机 + 定时器中断<br>够用但难维护]
Q2 -->|是| A3[✅ 使用 RTOS]
end
裸机 vs RTOS
- 裸机:简单项目(控个灯、读个传感器),代码可控,不需要学调度
- RTOS:多个独立任务(传感器采集 + 通信 + 显示 + 控制),需要优先级管理、任务间通信
五、开发工具链全景¶
编译工具链¶
嵌入式开发通常使用==交叉编译==(在 PC 上编译,在 MCU 上运行):
| 工具链 | 目标平台 | 说明 |
|---|---|---|
| arm-none-eabi-gcc | ARM Cortex-M | GCC 的 ARM 裸机版,最常用 |
| armclang (ARM Compiler 6) | ARM Cortex-M/A | Keil MDK 内置,商业 |
| xtensa-esp32-elf-gcc | ESP32 | 乐鑫定制的 GCC |
| riscv32-unknown-elf-gcc | RISC-V | GCC 的 RISC-V 版 |
| avr-gcc | AVR (Arduino) | Arduino 底层编译器 |
IDE / 编辑器¶
| 工具 | 类型 | 优势 | 适用场景 |
|---|---|---|---|
| Keil MDK | 商业 IDE | 调试强大、STM32 首选 | STM32(教学/企业) |
| STM32CubeIDE | 免费 IDE | ST 官方、集成 CubeMX | STM32 |
| CLion | 商业 IDE | 现代 C++ 体验、CMake | 专业开发 |
| VS Code + PlatformIO | 编辑器 + 扩展 | 跨平台、多框架 | Arduino、ESP32、STM32 |
| Arduino IDE | 免费 IDE | 最简单上手 | Arduino、ESP32 入门 |
| ESP-IDF (命令行) | 官方框架 | 最完整的 ESP32 功能 | ESP32 深度开发 |
| SEGGER Embedded Studio | 免费(Nordic) | 调试好、Nordic 官方 | nRF52 |
调试工具¶
| 工具 | 接口 | 说明 |
|---|---|---|
| ST-Link | SWD | STM32 标配,CubeIDE/Keil 直接支持 |
| J-Link | SWD / JTAG | 业界标杆,速度快,支持几乎所有 ARM |
| DAPLink / CMSIS-DAP | SWD | 开源,便宜,VS Code 友好 |
| ESP-Prog | JTAG | ESP32 官方调试器 |
| 串口 + printf | UART | 最原始但最常用的调试方式 |
| 逻辑分析仪 | GPIO | 抓取通信波形(I2C/SPI/UART) |
| 示波器 | 模拟信号 | 看 PWM、ADC、噪声 |
烧录方式¶
| 方式 | 说明 | 典型用法 |
|---|---|---|
| SWD(Serial Wire Debug) | ARM 标准调试 + 烧录 | ST-Link / J-Link 连接 STM32 |
| JTAG | 通用调试接口(4~5 线) | J-Link、ESP-Prog |
| UART Bootloader | 串口下载 | STM32 ISP、ESP32 默认 |
| USB DFU | USB 直接下载 | STM32 部分型号、Arduino |
| OTA(Over The Air) | 无线下载 | ESP32 WiFi OTA |
六、嵌入式软件开发的知识体系¶
graph TB
subgraph "硬件基础"
HW1[电路基础<br>电阻/电容/三极管]
HW2[数字电路<br>逻辑门/时序]
HW3[PCB 设计<br>原理图/Layout]
end
subgraph "MCU 核心"
MC1[GPIO / 中断 / 定时器]
MC2[通信协议<br>UART / SPI / I2C / CAN]
MC3[ADC / DAC / DMA]
MC4[时钟系统与电源管理]
end
subgraph "软件技能"
SW1[C 语言<br>指针/结构体/位操作]
SW2[RTOS<br>任务/队列/信号量]
SW3[驱动开发<br>传感器/显示/存储]
SW4[通信协议栈<br>TCP/IP / BLE / MQTT]
end
subgraph "系统集成"
SY1[嵌入式 Linux<br>驱动/设备树/Buildroot]
SY2[ROS 机器人中间件]
SY3[上位机通信<br>串口/CAN/以太网]
end
HW1 --> MC1
HW2 --> MC1
MC1 --> SW1
SW1 --> SW2
SW2 --> SW3
SW3 --> SW4
SW4 --> SY1
SW4 --> SY2
SW4 --> SY3
学习路线建议
七、嵌入式常见应用领域¶
| 领域 | 典型产品 | 常用平台 | 关键技术 |
|---|---|---|---|
| 消费电子 | 智能手表、耳机、遥控器 | STM32L、nRF52 | 低功耗、BLE |
| 工业控制 | PLC、变频器、机器人控制器 | STM32F4/H7 | CAN 总线、实时控制 |
| 汽车电子 | ECU、ADAS、车载网关 | TC3xx、S32K、TDA4 | AutoSAR、功能安全 |
| 物联网 IoT | 智能家居、环境监测 | ESP32、nRF52 | WiFi、BLE、MQTT |
| 机器人 | 电机驱动、运动控制 | STM32 + Linux | PID/FOC、ROS |
| 医疗设备 | 血氧仪、呼吸机 | STM32、Renesas | 可靠性、认证 |
| 航空航天 | 卫星、飞控 | 特殊 MCU | RTOS、冗余设计 |
八、本站嵌入式笔记导航¶
| 板块 | 内容 | 适合人群 |
|---|---|---|
| Arduino | GPIO、通信、中断定时器、传感器、库管理 | 零基础入门 |
| STM32 | 时钟、GPIO、中断、定时器、通信、ADC/DAC、DMA | 深入理解 MCU |
| FreeRTOS | 任务、队列、信号量、软件定时器、中断管理、内存管理 | RTOS 多任务编程 |
| ESP32 | GPIO、WiFi、蓝牙、通信协议、多核任务、低功耗 | IoT 物联网开发 |