跳转至

嵌入式

嵌入式系统是以应用为中心、以计算机技术为基础,软硬件可裁剪的专用计算机系统。从智能手表到工业机器人,从汽车 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

学习路线建议

C 语言基础
└── Arduino 入门(快速体验嵌入式)
    └── STM32 HAL(理解寄存器、中断、时钟)
        ├── FreeRTOS(多任务编程)
        ├── ESP32(IoT 物联网)
        └── 嵌入式 Linux(进阶方向)
            └── ROS(机器人方向)

七、嵌入式常见应用领域

领域 典型产品 常用平台 关键技术
消费电子 智能手表、耳机、遥控器 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 物联网开发