RK3576开发板GPIO驱动入门教程,基于触觉智能开发板教学-上
2026/7/14 5:24:50 网站建设 项目流程

触觉智能Purple Pi OH2开发板板载双20Pin的GPIO排针(兼容树莓派),提供了丰富的拓展空间。本文基于Purple Pi OH2为大家讲解GPIO概念、原理、代码示例、调试方法灯。

一、GPIO基本概念

1.1什么是GPIO

GPIOGeneral Purpose Input/Output,通用输入输出)是嵌入式系统中最基础的外设接口。每个GPIO引脚可以被配置为:

输入模式:读取外部信号(如按键、传感器)

输出模式:控制外部设备(如LED、继电器)

中断模式:检测边沿变化触发中断

1.2 RK3576 GPIO资源

RK3576芯片共有5GPIOGPIO0~GPIO4),每组包含32个引脚(A0-A7, B0-B7, C0-C7, D0-D7)。

从设备树可以看到:

gpio0 = &gpio0; gpio1 = &gpio1; gpio2 = &gpio2; gpio3 = &gpio3; gpio4 = &gpio4;

1.3 GPIO命名规则

RK平台使用GPIOx_PYz的命名方式:

x: GPIO组号(0-4

Y:端口(ABCD

z:引脚号(0-7

例如:GPIO0_PB4表示GPIO0组的B端口第4号引脚

二、GPIO工作原理

2.1内部结构

2.2工作模式

模式

说明

典型应用

输入模式

高阻态,读取外部电平

按键检测

输出模式

驱动外部电路

LED控制

中断模式

边沿/电平触发

事件通知

复用模式

作为其他功能(UART/I2C等)

引脚复用

三、GPIO设备树配置

3.1在设备树中添加GPIO节点

编辑设备树文件(如ido-evb7609-v1a.dtsi):

// 定义 LED 设备节点 / { leds: leds { status = "okay"; compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&leds_gpio>; work_led: work { gpios = <&gpio4 RK_PC7 GPIO_ACTIVE_HIGH>; linux,default-trigger = "heartbeat"; }; hub_rst { gpios = <&gpio4 RK_PD0 GPIO_ACTIVE_HIGH>; default-state="on"; }; }; // USB 电源控制 cgpio:cgpios{ status = "okay"; compatible = "cust,cgpio"; usb_pwr { //SD-card、USB-A、Wi-Fi gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>; init-status = <1>; }; }; };
3.2 pinctrl 引脚配置
&pinctrl { // LED 引脚配置 led_pins: led-pins { rockchip,pins = <0 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>; }; // 按键引脚配置 key_pins: key-pins { rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>; }; };

3.3 GPIO上下拉配置详解

RK3576GPIO支持多种上下拉配置,通过rockchip,pins属性的最后一个参数指定。

上下拉配置类型

配置

设备树值

说明

典型应用

上拉

&pcfg_pull_up

引脚默认上拉到高电平

按键输入、I2C SDA/SCL

下拉

&pcfg_pull_down

引脚默认下拉到低电平

复位信号、使能信号

无上下拉

&pcfg_pull_none

浮空输入,无上拉电阻

LED输出、GPIO输出

保持

&pcfg_pull_bus

总线保持器

低功耗场景

实际设备树配置示例

&pinctrl { /* LED 引脚 - 无上拉(输出模式不需要) */ leds_gpio: leds-gpio { rockchip,pins = <4 RK_PC7 RK_FUNC_GPIO &pcfg_pull_none>, /* work_led */ <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>; /* hub_rst */ }; /* USB 电源 - 无上拉 */ usb_pwr: usb-pwr { rockchip,pins = <0 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>; }; /* 耳机检测 - 上拉(按键检测) */ hp_det: hp-det { rockchip,pins = <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>; }; /* WiFi 唤醒 - 下拉 */ wifi_host_wake_irq: wifi-host-wake-irq { rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_down>; }; /* 按键输入 - 上拉 */ adc_keys_pins: adc-keys-pins { rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>; }; /* I2C 引脚 - 上拉(I2C 标准需要) */ i2c2m0_xfer: i2c2m0-xfer { rockchip,pins = <1 RK_PB3 9 &pcfg_pull_up>, /* i2c2_sda_m0 */ <1 RK_PB4 9 &pcfg_pull_up>; /* i2c2_scl_m0 */ }; };

上下拉选择原则

注意事项

1.输出模式:通常使用&pcfg_pull_none,因为GPIO输出是推挽驱动

2.输入按键:必须使用&pcfg_pull_up,确保按键未按下时读到高电平

3.I2C总线:必须使用&pcfg_pull_upI2C是开漏输出需要上拉电阻

4.中断引脚:根据触发方式选择,上升沿触发用下拉,下降沿触发用上拉

今天就先写到这里 下期带来驱动代码示例和调试方法 以及常见问题解决

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询