banner
NEWS LETTER

嵌入式外设入门:GPIO、UART、I2C、SPI 怎么理解

Scroll down

一、为什么外设总线重要

嵌入式开发经常要和硬件打交道。传感器、屏幕、Flash、按键、LED、通信模块都需要通过某种接口和主控芯片连接。

最常见的外设接口:

  • GPIO。
  • UART。
  • I2C。
  • SPI。
  • PWM。
  • ADC。

理解这些接口,是从应用开发走向板级开发和驱动开发的基础。

二、GPIO

GPIO 是通用输入输出引脚,可以输出高低电平,也可以读取外部电平。

常见用途:

  • 点亮 LED。
  • 读取按键。
  • 控制复位脚。
  • 控制电源使能。
  • 读取硬件状态。

输出控制:

1
2
0 -> 低电平
1 -> 高电平

输入读取:

1
2
0 -> 外部低电平
1 -> 外部高电平

Linux 下可以通过 gpiod 工具调试:

1
2
3
4
gpiodetect
gpioinfo
gpioget gpiochip0 12
gpioset gpiochip0 12=1

三、UART

UART 是串口通信,嵌入式调试最常用。

常见参数:

1
115200 8N1

含义:

  • 波特率:115200。
  • 数据位:8。
  • 校验位:None。
  • 停止位:1。

Linux 下串口设备常见名称:

1
2
3
/dev/ttyS0
/dev/ttyUSB0
/dev/ttyAMA0

使用 picocom

1
picocom -b 115200 /dev/ttyUSB0

UART 常见问题:

  • TX/RX 接反。
  • GND 没共地。
  • 波特率不一致。
  • 电平不匹配,TTL 和 RS232 不能直接接。

四、I2C

I2C 是两线总线:

1
2
SCL 时钟
SDA 数据

特点:

  • 支持多个从设备。
  • 每个设备有地址。
  • 速度通常不高。
  • 常用于传感器、EEPROM、RTC、电源管理芯片。

Linux 调试工具:

1
sudo apt install -y i2c-tools

查看总线:

1
i2cdetect -l

扫描设备:

1
i2cdetect -y 1

读取寄存器:

1
i2cget -y 1 0x50 0x00

写寄存器:

1
i2cset -y 1 0x50 0x00 0x12

I2C 常见问题:

  • 没有上拉电阻。
  • 地址写错,7 位地址和 8 位地址混淆。
  • 设备没供电。
  • 设备被内核驱动占用。
  • 时序或电压不匹配。

五、SPI

SPI 常见四根线:

1
2
3
4
SCLK 时钟
MOSI 主发从收
MISO 主收从发
CS 片选

特点:

  • 速度快。
  • 全双工。
  • 没有统一设备地址,通过 CS 选择设备。
  • 常用于屏幕、Flash、ADC、无线模块。

关键参数:

  • 时钟频率。
  • CPOL。
  • CPHA。
  • bit order。
  • 片选极性。

Linux 下常见设备:

1
2
/dev/spidev0.0
/dev/spidev1.0

SPI 常见问题:

  • mode 配错。
  • CS 不对。
  • 频率太高。
  • MOSI/MISO 接反。
  • 设备需要额外 reset 或 dc 引脚。

六、PWM

PWM 是脉宽调制,通过控制占空比模拟不同输出效果。

常见用途:

  • LED 亮度。
  • 蜂鸣器。
  • 电机调速。
  • 舵机控制。

关键参数:

  • 周期。
  • 占空比。
  • 极性。

示例:

1
周期 20ms,占空比 1.5ms,常用于舵机中位

七、ADC

ADC 用于把模拟电压转换成数字值。

常见用途:

  • 电池电压。
  • 电位器。
  • 光照传感器。
  • 温度传感器。

关注点:

  • 分辨率:例如 12 bit。
  • 参考电压。
  • 采样率。
  • 输入范围。
  • 噪声和滤波。

八、调试外设的顺序

遇到外设不工作,不要直接怀疑驱动,按顺序检查:

  1. 原理图连接是否正确。
  2. 电源是否正常。
  3. GND 是否共地。
  4. 复位脚和使能脚是否正确。
  5. 管脚复用是否配置正确。
  6. 设备树是否开启。
  7. 总线是否能扫描到设备。
  8. 驱动是否加载。
  9. 应用层参数是否正确。

九、学习建议

建议从 UART 和 GPIO 开始,因为反馈最直接。然后学习 I2C 读取传感器,再学习 SPI 驱动屏幕或 Flash。

每学一个外设,都要同时理解:

  • 硬件连接。
  • 时序协议。
  • Linux 设备节点。
  • 调试工具。
  • 典型错误。

嵌入式开发最重要的是把软件现象和硬件信号联系起来。

其他文章
目录导航 置顶
  1. 1. 一、为什么外设总线重要
  2. 2. 二、GPIO
  3. 3. 三、UART
  4. 4. 四、I2C
  5. 5. 五、SPI
  6. 6. 六、PWM
  7. 7. 七、ADC
  8. 8. 八、调试外设的顺序
  9. 9. 九、学习建议
请输入关键词进行搜索