Skip to content

模拟电路把物理世界变成电信号,数字电路把它变成 0 和 1,接下来要运算、控制、通信——这就是嵌入式。这篇从全局讲嵌入式开发的整体轮廓:单片机 vs 嵌入式 Linux、STM32 是什么、开发流程、常见外设,以及为什么它和纯软件不一样。

一、嵌入式在解决什么问题

普通软件跑在通用电脑上(CPU + 操作系统 + 无限内存)。嵌入式不一样:

  • 专用:一个芯片只为特定任务(采集温度、控制电机、蓝牙通信)
  • 资源受限:几 KB 到几 MB 内存、几十 MHz 主频
  • 实时/硬实时:传感器中断来了必须立刻响应(毫秒级)
  • 直接碰硬件:程序要读写寄存器控制 GPIO 引脚

简单说:嵌入式 = 让芯片上的软件直接控制物理世界。你的《模拟电路》和《数字电路》知识在这里汇合。

二、两个世界:单片机 vs 嵌入式 Linux

维度单片机(MCU)嵌入式 Linux(MPU)
代表STM32、ESP32、AVRRaspberry Pi、全志/瑞芯微
内核Cortex-M(无 MMU)Cortex-A(有 MMU,跑 Linux)
操作系统裸机 / FreeRTOS(实时)Linux(非实时,可用 RT 补丁)
资源KB 级 RAM、几十 MHzMB 级 RAM、GHz 级
应用家电、仪表、电机、传感器节点路由器、网关、机器人、工业平板
开发交叉编译 + 烧录(ST-Link)交叉编译 + SD 卡/镜像刷写

你已经有《树莓派实践》——树莓派就是典型的嵌入式 Linux。本篇讲的是另一侧:单片机(STM32),更贴近硬件、更能理解"软件怎么控制硬件"。

三、STM32 是什么

STM32 是意法半导体(STMicroelectronics)的 32 位微控制器系列,基于 ARM Cortex-M 内核。为什么它几乎是入门标准:

  • 生态最完整:官方 STM32CubeMX(图形化配置引脚/时钟)+ STM32CubeIDE(集成开发环境)+ HAL 库
  • 型号覆盖广:从 F1(入门)到 F4(高性能)到 H7(旗舰),同一套开发方式
  • 外设齐全:GPIO、ADC、UART、I2C、SPI、TIM(定时器)、DMA、USB、CAN
  • 资料多:中文社区、教程、开发板(正点原子/野火)极多
STM32 芯片内部(粗略):
┌─────────────────────────────┐
│  ARM Cortex-M 内核(算力)     │ ← 上一篇的逻辑门/触发器构成
│  Flash(存程序)+ RAM(跑数据) │
│  外设:GPIO / ADC / UART ...  │ ← 和物理世界打交道
└─────────────────────────────┘

四、开发流程:一套完整的上手路径

嵌入式技术栈分层

  1. 硬件准备:STM32 开发板(如 STM32F103C8T6 最小系统板,几十元)+ ST-Link 烧录器
  2. 工程生成:STM32CubeMX 选芯片 → 勾选外设(如 ADC + UART)→ 配置时钟 → 生成初始化代码
  3. 写业务逻辑:在 main.c 里用 HAL 库函数写应用(HAL_ADC_Start()HAL_UART_Transmit()
  4. 编译烧录:STM32CubeIDE 编译 → ST-Link 烧录到 Flash
  5. 调试:SWD 调试器断点/变量观察 + 串口打印日志

从零到点灯(GPIO 控制 LED)大概半天;到 ADC 采样 + 串口输出,一天内能跑通——门槛比想象低,关键是要有一块开发板

五、常见外设(从软到硬的理解)

外设干什么和你的知识呼应
GPIO通用输入输出:读按键、控制 LED/继电器逻辑门的物理出口
ADC模拟转数字:采样电压模拟电路》:运放放大 + RC 滤波 → ADC
UART串口通信:调试日志、对接模块最常用的"printf"通道
I2C双线总线:接传感器(温湿度/加速度)地址寻址、时序
SPI高速四线总线:接屏幕/Flash速率更高的总线
TIM/PWM定时器/脉宽调制:控制舵机、LED 亮度时间维度控制

最值得第一个打通的外设是 ADC——它把《模拟电路》的两篇文章串起来:传感器 → 运放放大 → RC 滤波 → STM32 的 ADC 引脚采样 → 串口输出数值。这条链路就是"模拟世界数字化"的完整演示。

六、软件工程师学嵌入式的优势与坑

优势:你会写代码、懂状态机、懂数据结构——嵌入式应用层开发(采集逻辑、协议解析、状态机)对你很自然。

(纯软件背景最容易踩):

  1. 交叉编译:代码在本机编译,运行在芯片上——工具链(arm-none-eabi-gcc)和链接脚本(.ld 文件)和普通程序完全不同
  2. 没有内存保护:指针写错直接死机(没有 OS 兜底),要养成"寄存器/缓冲区边界"意识
  3. 中断思维:主循环 + 中断回调,并发问题比多线程更难查
  4. 查错靠硬件:串口日志、逻辑分析仪、示波器——不是 printf 就能解决一切

小结

  • 嵌入式 = 让芯片上的软件直接控制物理世界,分单片机(STM32/裸机/FreeRTOS)嵌入式 Linux(树莓派)两路
  • STM32 = ARM Cortex-M + ST 生态(CubeMX 图形化配置 + CubeIDE + HAL 库),开发门槛低、资料多
  • 技术栈分层:应用 → RTOS → HAL 库 → 寄存器 → 芯片
  • 第一条实战链路建议:传感器 → 运放 → RC 滤波 → ADC 采样 → 串口输出(把模电两篇全部用上)
  • 需要开发板实跑;本文静态核对标注:无硬件,未实跑

接下来可以看《数字电路》(触发器和 CPU 的记忆)、《模拟电路》(ADC 前级)、《树莓派实践》(嵌入式 Linux 实例)。