嵌入式开发平台横向对比
最后更新: 2025年12月
经历了智能车竞赛、无人机开发、矿业物联网以及变电站科研项目,踩过了不少坑,也积累了一些心得。这篇文章整理了我在 Arduino / STM32 / ESP32 / TC264(英飞凌) 这四款主流嵌入式平台上的实战经验,供大家选型和入坑参考。
Arduino
Arduino 是最适合嵌入式入门的平台,没有之一。标志性的 setup() / loop() 两函数结构让你在完全不理解寄存器的情况下就能驱动 LED、读传感器。
硬件参数(Uno)
- 主控: ATmega328P,16MHz
- 接口: 数字IO × 14,模拟IO × 6,UART / SPI / I2C
核心 API
// 基础 IO
pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH);
int val = analogRead(A0); // 10-bit ADC,范围 0~1023
// PWM 输出(占空比 50%)
analogWrite(pin, 128); // 0~255
// 非阻塞计时(替代 delay)
if (millis() - lastTime > 100) {
lastTime = millis();
doSomething();
}
适用场景: 第一块开发板、快速验证原型(如 PD 控制器仿真)、科普教学项目
踩坑记录: delay() 会阻塞整个程序,稍微复杂一点的逻辑就必须改用 millis() 计时。在普林斯顿的电机控制项目里,就是用 Arduino + 中断 + millis() 实现的自适应 PD 控制闭环。
STM32
从 Arduino 过渡到 STM32 的核心门槛是理解外设和时钟树,但一旦上手,性能天花板远高于 Arduino。
硬件参数(F4 系列)
- 内核: ARM Cortex-M4,168MHz
- 外设: 12-bit ADC、多路 UART / SPI / I2C、定时器、DMA
- 常用型号: STM32F103(蓝色药丸,经典入门)/ STM32F407(性能主力)
推荐工具链: STM32CubeMX + HAL 库
CubeMX 图形化配置时钟和外设,自动生成初始化代码,新手友好。
// UART 发送
HAL_UART_Transmit(&huart1, (uint8_t*)"Hello\r\n", 7, HAL_MAX_DELAY);
// 定时器 PWM 输出
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 500);
// DMA 非阻塞串口接收
HAL_UART_Receive_DMA(&huart1, rxBuf, BUF_SIZE);
项目经验: 智能车项目中,STM32F1 负责底层传感器读取,用 TIM + DMA 驱动编码器测速,用 SPI 与 OLED 屏通信,整体性能完全够用。
踩坑记录:
HAL_Delay()同样阻塞,中断服务函数(ISR)内禁止调用,改用DWT或uwTick- 时钟树配置错误是最常见 bug,CubeMX 改完记得重新生成代码
- Flash 擦写寿命有限,频繁调试建议开 RAM 调试模式(
ST-Link+SWD)
ESP32
ESP32 是目前嵌入式 IoT 项目的最优解:双核处理器 + 内置 WiFi/BT + 丰富外设 + 低价格,加上 Arduino 框架支持,上手成本极低。
硬件参数
- 双核 Xtensa LX6,240MHz,内置 4MB Flash
- 协议: WiFi 802.11 b/g/n + Bluetooth 4.2 / BLE 5.0
- 外设: 34个GPIO、12-bit ADC × 18、SPI / I2C / UART / Touch Sensor
网络与 MQTT
#include <WiFi.h>
#include <PubSubClient.h>
WiFi.begin("SSID", "password");
while (WiFi.status() != WL_CONNECTED) delay(500);
// MQTT 上云
client.publish("device/status", "{\"speed\": 1.2, \"battery\": 85}");
client.subscribe("device/cmd");
FreeRTOS 双核分工
ESP32 原生支持 FreeRTOS,可将传感器采集和网络上传分配到两个核心:
// Core 0: 网络/MQTT 任务
xTaskCreatePinnedToCore(networkTask, "Net", 4096, NULL, 1, NULL, 0);
// Core 1: 传感器采集任务
xTaskCreatePinnedToCore(sensorTask, "Sen", 4096, NULL, 1, NULL, 1);
项目经验:
无人机项目中,ESP32 实现 MAVLink 飞控通信 + UWB 定位数据融合 + MQTT 云端上报,双核的优势在这里非常明显,采集和通信完全不干扰。
矿业风门项目里,ESP32 作为远程控制板主控,通过 MQTT 与云平台对接,整套方案从设计到联调不到两周完成。
踩坑记录:
- ESP32 的 ADC 在 WiFi 启用时噪声增大,精密传感器建议走 I2C/SPI
Deep Sleep唤醒后 GPIO 状态重置,注意初始化顺序- 项目复杂时建议迁移到 ESP-IDF(比 Arduino 框架更接近底层,性能更好)
TC264
TC264(英飞凌 AURIX TC264DA)是全国大学生智能汽车竞赛的主流控制芯片,也是我在独轮机器人项目中的核心平台。双核 TriCore 架构,硬件实时性极强,但入门曲线比前三者陡峭不少。
硬件参数
- 双核 TriCore 1.6P,200MHz,8MB Flash / 1MB SRAM
- 特色: GTM 通用定时器模块(高精度 PWM / 编码器捕获),12-bit ADC
- 配套: 逐飞科技 TC264 核心板 + 开源 SDK
逐飞 SDK 示例
// 编码器测速
encoder_init(ENCODER_1, ENCODER1_A, ENCODER1_B);
int32_t count = encoder_get_count(ENCODER_1);
encoder_clear_count(ENCODER_1);
// 电机 PWM(17kHz)
pwm_init(ATOM0_CH0, 17000, 0);
pwm_set_duty(ATOM0_CH0, 5000); // 50% 占空比
// ADC 采集
adc_init(ADC_12BIT, ADC0, ADC_CH0, 0);
uint32_t val = adc_convert(ADC0, ADC_CH0);
项目经验: 独轮机器人同时跑:IMU(SPI)读取 + 编码器测速 + 串级 PID(姿态环 + 速度环)+ OpenMV 视觉通信(UART),5ms 主循环时间片,实时性完全满足需求。TC264 的 GTM 模块在编码器捕获精度上远超 STM32 的普通 TIM。
踩坑记录:
- GTM 模块配置较复杂,直接用逐飞封装,不要从手册从头写
- TriCore 无 OS 时,中断优先级管理要格外细心,高优先级 ISR 内避免耗时操作
- ADS(Aurix Development Studio)的 Watch Window 调试功能很强大,善用能大幅提升效率
横向对比
| 对比项 | Arduino Uno | STM32F4 | ESP32 | TC264 |
|---|---|---|---|---|
| 参考价格 | ¥30~50 | ¥20~60 | ¥15~40 | ¥200~400 |
| 主频 | 16 MHz | 168 MHz | 240 MHz | 200 MHz |
| 网络 | ✗ | ✗ | WiFi + BT ✓ | ✗ |
| 实时性 | 一般 | 好 | 好(RTOS) | 极好(GTM) |
| 入门难度 | ⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ |
| 适用场景 | 原型/教学 | 工业/科研 | IoT/无人机 | 智能车/高实时控制 |
选型建议
- 刚入门嵌入式 → Arduino,两周内上手,资料极多,先建立感性认识
- 需要 WiFi / 蓝牙 / 云端 → ESP32,性价比无敌,直接替代 Arduino + 网络模块的组合
- 工业控制 / 科研项目 → STM32,外设齐全,HAL 库生态成熟,企业界认可度高
- 参加智能车竞赛 / 高实时性控制 → TC264,逐飞开源库 + 竞赛社区生态完善
欢迎交流: jiacheng008@e.ntu.edu.sg