跳到主要内容

嵌入式基础入门

嵌入式开发是把软件运行在特定硬件设备上的开发方式。它不像普通应用只关注业务逻辑,还要理解芯片、外设、内存、功耗、实时性和硬件通信。

常见嵌入式设备包括智能手环、路由器、摄像头、工业控制器、汽车电子、智能家居、医疗设备和物联网终端。

一、嵌入式系统是什么

嵌入式系统通常由硬件和软件共同组成,用来完成特定功能。

例子:

  • 温湿度计:采集传感器数据并显示。
  • 智能门锁:识别指纹、控制电机、联网通信。
  • 无人机:读取姿态传感器,控制电机保持稳定。

二、嵌入式和普通软件开发的区别

对比项普通软件嵌入式开发
运行环境PC、服务器、手机单片机、SoC、开发板
资源限制相对充足内存、Flash、算力有限
实时性一般不严格经常要求毫秒级响应
硬件依赖较少强依赖外设和电路
调试方式日志、断点串口、JTAG、示波器、逻辑分析仪
关注点业务和用户体验稳定性、功耗、时序、可靠性

三、核心硬件概念

1. MCU 和 SoC

MCU 是微控制器,常用于控制类场景,例如 STM32、ESP32、AVR。

SoC 是片上系统,集成 CPU、GPU、内存控制器、通信接口等,常用于 Linux 嵌入式设备,例如路由器、摄像头、开发板。

2. GPIO

GPIO 是通用输入输出引脚,可以读取高低电平或控制外设。

常见用途:

  • 点亮 LED;
  • 读取按键;
  • 控制继电器;
  • 读取简单传感器信号。

3. 中断

中断是硬件事件触发 CPU 暂停当前任务并处理紧急事件的机制。

适合:

  • 按键触发;
  • 定时器到期;
  • 串口收到数据;
  • 传感器数据就绪。

4. 定时器

定时器用于产生精确时间控制。

用途:

  • 周期采样;
  • PWM 输出;
  • 超时判断;
  • 延迟任务;
  • 电机控制。

四、常见通信协议

协议特点常见用途
UART简单串口通信调试日志、模块通信
I2C两根线,多设备传感器、EEPROM
SPI高速,全双工屏幕、Flash、无线模块
CAN抗干扰强汽车、工业控制
USB通用外设连接键盘、存储、调试
Ethernet有线网络网关、工业设备
Wi-Fi / BLE无线通信物联网、智能家居

入门建议先学 UART,再学 I2C 和 SPI。

五、嵌入式软件分层

一个嵌入式项目通常可以分成:

分层的好处是便于维护和移植。

六、裸机和 RTOS

1. 裸机开发

裸机是没有操作系统的开发方式,程序通常在 while(1) 循环里运行。

适合:

  • 功能简单;
  • 成本敏感;
  • 实时逻辑清晰;
  • 资源非常有限。

2. RTOS

RTOS 是实时操作系统,例如 FreeRTOS、RT-Thread。

它提供:

  • 任务调度;
  • 队列;
  • 信号量;
  • 互斥锁;
  • 软件定时器;
  • 内存管理。

适合功能复杂、任务较多的设备。

七、调试方法

嵌入式调试常用手段:

  • 串口日志:最常用,简单可靠。
  • LED 指示:快速判断程序走到哪里。
  • 断点调试:通过 JTAG/SWD 查看变量和寄存器。
  • 示波器:查看电压、电流、波形。
  • 逻辑分析仪:分析 UART、I2C、SPI 时序。
  • 看门狗:防止程序卡死后设备无法恢复。

调试时要先确认硬件供电、时钟、引脚复用,再看软件逻辑。

八、学习路线

建议顺序:

  1. C 语言基础:指针、结构体、位运算。
  2. 数电基础:电平、上拉下拉、时钟、复位。
  3. 单片机入门:GPIO、按键、LED。
  4. 外设驱动:UART、I2C、SPI、ADC、PWM。
  5. 中断和定时器。
  6. RTOS:任务、队列、信号量、互斥锁。
  7. 通信模块:Wi-Fi、BLE、CAN、以太网。
  8. 低功耗和可靠性设计。
  9. Linux 嵌入式:驱动、设备树、交叉编译。

九、入门练习项目

推荐做一个“环境监测终端”:

可以练到:

  • GPIO;
  • I2C;
  • UART;
  • 定时器;
  • 状态机;
  • 简单联网。

十、常见误区

  • 只会调用库,不理解寄存器和时序。
  • 只看代码,不看原理图和数据手册。
  • 不重视电源和接地,导致问题难查。
  • 日志太少,调试全靠猜。
  • 不考虑异常恢复,设备现场容易死机。

总结

嵌入式开发的核心是软件和硬件一起思考:

入门时先用开发板做小项目,再逐步深入外设、RTOS、通信协议和 Linux 嵌入式。