440 字
2 分钟
开源鸿蒙系统配置 GPIO

GPIO 输入#

运行时可通用地按“bank 编号 + 引脚号 + 上下拉模式”配置。D1 的 PIO 规则如下:

  • GPIO编号 = bank编号 × 32 + 引脚号
  • bank 编号:PA=0、PB=1、PC=2、PD=3、PE=4、PF=5、PG=6
  • 引脚号:每个 bank 内的引脚编号,例如 PG8 的 pin 为 8
  • 上下拉值:0=浮空/禁用1=上拉2=下拉
  • Toybox 使用 devmem 地址 4 [值],其中 4 是 32 位访问。
Terminal window
set_pull()
{
bank=$1 # PA=0, PB=1, PC=2, PD=3, PE=4, PF=5, PG=6
pin=$2 # 该 bank 内的引脚号,例如 PG8 的 pin 为 8
pull=$3 # 0=浮空, 1=上拉, 2=下拉
addr=$((0x02000000 + bank * 0x30 + 0x24 + (pin / 16) * 4))
shift=$((2 * (pin % 16)))
val=$(devmem "$addr" 4)
devmem "$addr" 4 $(( (val & ~(0x3 << shift)) | (pull << shift) ))
}

使用范例:

Terminal window
# PG4(GPIO196)设为上拉输入
set_pull 6 4 1
# PG5(GPIO197)设为下拉输入
set_pull 6 5 2
# PG8(GPIO200)设为浮空输入
set_pull 6 8 0

再通过 sysfs 将对应引脚复用为 GPIO 输入,例如刚才配置的 PG4(GPIO196):

Terminal window
echo 196 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio196/direction

上下拉是电气属性;echo in 仅将引脚设为 GPIO 输入,不会改变上拉、下拉或浮空状态。直接写寄存器的设置会在重启后失效,也可能被启用该引脚的外设驱动覆盖。

最后通过 cat 读取 GPIO 输入值:

Terminal window
cat /sys/class/gpio/gpio196/value

读取到 0 表示低电平,读取到 1 表示高电平。

NOTE

使用其它接口时需要修改对应的GPIO编号。

GPIO 输出#

参考 GPIO 输入的配置方法,确定 GPIO 编号后,可以进行如下配置,例如配置 PG9(GPIO201)为输出:

Terminal window
echo 201 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio201/direction

然后配置输出电平:

Terminal window
echo 0 > /sys/class/gpio/gpio201/value # 低电平
echo 1 > /sys/class/gpio/gpio201/value # 高电平
NOTE

使用其它接口时需要修改对应的GPIO编号。

开源鸿蒙系统配置 GPIO
https://blog.wely.fun/posts/开源鸿蒙系统配置gpio/
作者
Wely
发布于
2026-07-24
许可协议
CC BY-NC-SA 4.0