嵌入式基础入门
嵌入式开发是把软件运行在特定硬件设备上的开发方式。它不像普通应用只关注业务逻辑,还要理解芯片、外设、内存、功耗、实时性和硬件通信。
常见嵌入式设备包括智能手环、路由器、摄像头、工业控制器、汽车电子、智能家居、医疗设备和物联网终端。
一、嵌入式系统是什么
嵌入式系统通常由硬件和软件共同组成,用来完成特定功能。
例子:
- 温湿度计:采集传感器数据并显示。
- 智能门锁:识别指纹、控制电机、联网通信。
- 无人机:读取姿态传感器,控制电机保持稳定。
二、嵌入式和普通软件开发的区别
| 对比项 | 普通软件 | 嵌入式开发 |
|---|---|---|
| 运行环境 | 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 时序。
- 看门狗:防止程序卡死后设备无法恢复。
调试时要先确认硬件供电、时钟、引脚复用,再看软件逻辑。
八、学习路线
建议顺序:
- C 语言基础:指针、结构体、位运算。
- 数电基础:电平、上拉下拉、时钟、复位。
- 单片机入门:GPIO、按键、LED。
- 外设驱动:UART、I2C、SPI、ADC、PWM。
- 中断和定时器。
- RTOS:任务、队列、信号量、互斥锁。
- 通信模块:Wi-Fi、BLE、CAN、以太网。
- 低功耗和可靠性设计。
- Linux 嵌入式:驱动、设备树、交叉编译。
九、入门练习项目
推荐做一个“环境监测终端”:
可以练到:
- GPIO;
- I2C;
- UART;
- 定时器;
- 状态机;
- 简单联网。
十、常见误区
- 只会调用库,不理解寄存器和时序。
- 只看代码,不看原理图和数据手册。
- 不重视电源和接地,导致问题难查。
- 日志太少,调试全靠猜。
- 不考虑异常恢复,设备现场容易死机。
总结
嵌入式开发的核心是软件和硬件一起思考:
入门时先用开发板做小项目,再逐步深入外设、RTOS、通信协议和 Linux 嵌入式。