嵌入式入门不需要先背完一本寄存器手册,但有一批概念绕不开:程序怎么跑、外设干什么、怎样不烧掉板子。本文对应机器人栈里的「实时控制层」,系列入口见 机器人栈分层。
MCU 程序怎么跑起来
典型上电流程(简化):
- 复位:CPU 从复位向量取指令
- 初始化时钟、GPIO、外设
- 进入
main/loop - 中断到来时跳进 ISR,处理完再回去
和桌面程序的差别:
- 没有完整 OS 服务(很多板子是裸机或轻量 RTOS)。
- 程序通常烧录进 Flash,掉电还在。
- 资源紧:RAM/Flash 以 KB~几百 KB 计。
- Bug 表现常常是看门狗复位、卡死、外设配错——不一定有漂亮堆栈。
必会外设(按出现频率)
| 外设 | 干什么 | 机器人里常见用途 |
|---|---|---|
| GPIO | 高低电平输入输出 | LED、按键、继电器、片选 |
| UART | 串口异步通信 | 调试打印、接主机 / 模组 |
| I2C | 两线总线,多设备 | OLED、部分 IMU、EEPROM |
| SPI | 高速同步总线 | Flash、部分屏 / 传感器 |
| PWM | 脉冲宽度调制 | 舵机、直流电机调速、灯光 |
| ADC | 模拟→数字 | 电位器、部分模拟传感器 |
| 定时器 | 精确计时 / 触发 | 控制环节拍、输入捕获测速 |
| 中断 | 事件来了再处理 | 编码器边沿、急停、串口收包 |
建议顺序:GPIO → UART → 定时器/PWM → ADC → I2C/SPI → 中断。
电压、电平与「烧掉板子」
- 常见逻辑电平:3.3V(STM32/ESP32 多数)与 5V(部分 Arduino / 外设)。
- 不要默认都能直接互连:5V 推到 3.3V 引脚可能损坏。
- 电机、舵机往往要独立供电,逻辑地与功率地正确共地,避免 USB 口扛大电流。
- 面包板适合信号,不适合大电流电机回路。
开发方式速览
| 方式 | 代表 | 特点 |
|---|---|---|
| Arduino IDE / 框架 | Uno、部分 ESP32、STM32 核心 | 上手快,setup/loop,库多 |
| 厂商 IDE + HAL | STM32CubeIDE、Keil 等 | 工业向,外设配置器强 |
| ESP-IDF | ESP32 官方 | FreeRTOS、Wi‑Fi/BLE 完整 |
| PlatformIO | VS Code 生态 | 多平台工程化友好 |
| MicroPython 等 | ESP32 等 | 试验快,实时性弱于 C |
入门可用 Arduino 框架建立成就感;要深入 STM32 时钟树与外设,再转 Cube / 寄存器。板型怎么选见 选板指南。
裸机 vs RTOS(先有印象)
- 裸机:一个大循环 + 中断。简单项目够用。
- RTOS(如 FreeRTOS):多任务、队列、延时;ESP-IDF 默认就带。
- 硬实时控制对抖动敏感:不是「上了 RTOS 就自动实时」。
ROS 2 跑在 Linux 上,和 MCU 里的 FreeRTOS 不是同一层东西。
「Arduino」到底指什么
讨论时要拆开:
- 生态 / 框架(Arduino API)
- 某块具体板(Uno、Mega…)
- 板上的 MCU(ATmega328P 等)
所以「学 Arduino」≠「只学一种芯片」;很多 ESP32 / STM32 板也能用 Arduino 框架烧录。
最小实验清单
- 闪烁 LED(GPIO + 延时)
- 串口打印 Hello(UART)
- PWM 驱动舵机到 0°/90°/180°
- I2C 读一个传感器并打印
- 外部中断:按键触发翻转 LED
- (进阶)电机 + 编码器粗测转速
完整周计划见 机器人学习路径。
