外观
gpio 中断输入示例
2025-10-29
本文介绍了如何在 RuiChing Studio 中创建一个 gpio_input_interrupt 示例工程,并将其编译后在开发板上调试运行。旨在帮助读者进一步熟悉 RuiChing Studio 开发环境,掌握 gpio 中断模式的基本配置与使用方法,以及命令的创建和运用。
GPIO 子系统
GPIO 子系统是 Linux、RT-Thread 等操作系统中用于管理通用输入输出引脚的核心框架。在 RT-Thread 中,GPIO 子系统提供引脚编号获取、输入输出模式配置、电平读写控制及中断回调绑定等功能,支持通过标准化接口实现芯片引脚的多功能管理与操作。
通过中断获取 GPIO 的输入电平信号
本示例以设置 GPIO 的边沿触发中断实践目标,一个 GPIO 作为输出模式,另外一个 GPIO 作为输入模式,实现获取 GPIO 边沿电平信号的效果。
引脚连接
GPIO1_A0(32) 与 GPIO1_A1(33) 通过杜邦线连接:

创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化设备树

固化 APP

核心示例代码
GPIO 示例相关 API 说明
rt_pin_attach_irq(INPUT_GPIO, PIN_IRQ_MODE_RISING_FALLING, gpio_isr, RT_NULL):设置 GPIO 的中断模式,并且绑定中断触发回调函数;rt_pin_irq_enable(INPUT_GPIO, PIN_IRQ_ENABLE):使能 GPIO 中断;rt_pin_detach_irq(INPUT_GPIO):取消 GPIO 中断的绑定;rt_pin_irq_enable(INPUT_GPIO, PIN_IRQ_DISABLE):失能 GPIO 中断。
gpio_input_interrupt_example.c
#define OUTPUT_GPIO 33 // 定义33号为输出引脚
#define INPUT_GPIO 32 // 定义32号为输入引脚
static void gpio_isr(void *args) // gpio 中断回调函数
{
LOG_I("input gpio %d irq trigger, level is %d", INPUT_GPIO,
rt_pin_read((INPUT_GPIO)));
}
rt_err_t gpio_interrupt_example(void)
{
rt_uint32_t count = 10;
rt_pin_mode(OUTPUT_GPIO, PIN_MODE_OUTPUT); // 设置33号引脚为输出模式
rt_pin_mode(INPUT_GPIO, PIN_MODE_INPUT); // 设置32号引脚为输入模式
// 设置 32 号引脚为中断模式,并且绑定中断触发回调函数
rt_pin_attach_irq(
INPUT_GPIO, PIN_IRQ_MODE_RISING_FALLING, gpio_isr, RT_NULL);
rt_pin_irq_enable(INPUT_GPIO, PIN_IRQ_ENABLE);
LOG_I("gpio interrupt startup");
while (count--)
{
rt_pin_write(OUTPUT_GPIO, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(OUTPUT_GPIO, PIN_LOW);
rt_thread_mdelay(500);
}
// 取消 32 号引脚的中断绑定
rt_pin_detach_irq(INPUT_GPIO);
rt_pin_irq_enable(INPUT_GPIO, PIN_IRQ_DISABLE);
LOG_I("gpio interrupt end");
return RT_EOK;
}运行程序
开发板运行程序后,然后在终端输入 gpio_input_interrupt_example 命令,GPIO 输出引脚每隔 1 秒转换 1 次电平,输入引脚会检测电平的变化,然后触发 GPIO 中断,在中断回调函数中会打印出当前电平:
msh />gpio_input_interrupt_example
[I/example.gpio] gpio interrupt startup
[I/example.gpio] input gpio 32 irq trigger, level is 1
[I/example.gpio] input gpio 32 irq trigger, level is 0
[I/example.gpio] input gpio 32 irq trigger, level is 1
[I/example.gpio] input gpio 32 irq trigger, level is 0
[I/example.gpio] input gpio 32 irq trigger, level is 1
[I/example.gpio] input gpio 32 irq trigger, level is 0
[I/example.gpio] input gpio 32 irq trigger, level is 1
[I/example.gpio] input gpio 32 irq trigger, level is 0
[I/example.gpio] input gpio 32 irq trigger, level is 1
[I/example.gpio] input gpio 32 irq trigger, level is 0
[I/example.gpio] input gpio 32 irq trigger, level is 1
[I/example.gpio] input gpio 32 irq trigger, level is 0
[I/example.gpio] input gpio 32 irq trigger, level is 1
[I/example.gpio] input gpio 32 irq trigger, level is 0
[I/example.gpio] input gpio 32 irq trigger, level is 1
[I/example.gpio] input gpio 32 irq trigger, level is 0
[I/example.gpio] input gpio 32 irq trigger, level is 1
[I/example.gpio] input gpio 32 irq trigger, level is 0
[I/example.gpio] input gpio 32 irq trigger, level is 1
[I/example.gpio] input gpio 32 irq trigger, level is 0
[I/example.gpio] gpio interrupt end