外观
GPIO 输入示例
2026-05-15
概述
本文介绍如何在 睿擎工业开发平台 中创建并运行 GPIO 输入检测 示例工程。通过配置一个引脚为输出模式并连接至另一个被配置为输入模式的引脚,演示了基础的电平信号读写逻辑。
GPIO 子系统
GPIO(通用输入输出)子系统是 RT-Thread 等操作系统中管理芯片引脚的核心框架。它提供了标准化的接口,开发者可以通过这些接口轻松实现引脚模式设置(输入/输出)、电平读写控制以及中断绑定等功能,从而完成对底层硬件的灵活操作。
GPIO 输入简介
GPIO(通用输入输出)是嵌入式系统中连接硬件外设最基础的接口,通过配置引脚的输入输出模式,系统可以实现对外围电路的控制与状态读取。输出模式允许 MCU 控制外部设备(如 LED、继电器),而输入模式则允许 MCU 获取外部传感器的信号或按键状态。
获取 GPIO 的输入电平信号
本示例旨在演示如何读取 GPIO 的输入电平信号。我们将使用两个 GPIO 引脚:一个配置为“输出模式”以持续改变电平状态,另一个配置为“输入模式”来实时读取该信号,从而直观地验证 GPIO 输入功能。
引脚连接
为保证代码与实际操作一致,本示例在 TL3576-EVM 开发板上,请使用杜邦线将 GPIO2_D7(即 95 号引脚,作为输入端)与 GPIO0_C5(即 21 号引脚,作为输出端)连接起来:

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

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

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

创建完成。

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

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

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

固件下载点击展开
固化驱动

固化 APP

核心示例代码
GPIO 输入示例相关代码说明
rt_pin_mode:是RT-Thread操作系统里,专门用来设置 GPIO 引脚工作模式的函数rt_pin_read:读取 GPIO 引脚当前高低电平rt_pin_write:给 GPIO 引脚 输出高电平 / 低电平
gpio_input_example.c
static void _usage(const char *func_name)
{
rt_kprintf("usage: %s <input_pin> <output_pin>\n", func_name);
rt_kprintf(" %s -h\n", func_name);
rt_kprintf("\n");
rt_kprintf("input_pin Input pin (e.g: p2.31)\n");
rt_kprintf("output_pin Output pin (e.g: p0.21)\n");
rt_kprintf("\n");
}
int gpio_input_example(int argc, char *argv[])
{
rt_uint8_t value = 0;
rt_uint32_t count = 5;
if (argc < 3 || strcmp(argv[1], "-h") == 0)
{
_usage(__func__);
return 0;
}
rt_base_t out_pin = rt_pin_get(argv[1]);
rt_base_t in_pin = rt_pin_get(argv[2]);
rt_pin_mode(out_pin, PIN_MODE_OUTPUT);// 设置21号引脚为输出模式
rt_pin_mode(in_pin, PIN_MODE_INPUT);// 设置95号引脚为输入模式
rt_kprintf("GPIO dynamic test start: OUT=%d, IN=%d\n", out_pin, in_pin);
while (count--)
{
rt_pin_write(out_pin, PIN_HIGH);// 21号引脚设置高电平
rt_thread_mdelay(100);
value = rt_pin_read(in_pin);// 读取95号引脚电平
rt_kprintf("[%d] Set OUT HIGH -> IN%d reads: %s\n", count, in_pin,
value ? "HIGH" : "LOW");
rt_thread_mdelay(1000);
rt_pin_write(out_pin, PIN_LOW);// 21号引脚设置低电平
rt_thread_mdelay(100);
value = rt_pin_read(in_pin);// 读取95号引脚电平
rt_kprintf("[%d] Set OUT LOW -> IN%d reads: %s\n", count, in_pin,
value ? "HIGH" : "LOW");
rt_thread_mdelay(1000);
}
rt_kprintf("GPIO dynamic test finished\n");
return RT_EOK;
}运行示例
操作步骤
- 将 GPIO2_D7(作为输入脚) 与 GPIO0_C5(作为输出脚) 通过杜邦线连接
- 将工程编译完成后的程序下载到开发板中
- 打开串口终端工具,与开发板建立连接
- 在终端命令行中输入 gpio_input_example P2.31 P0.21 并回车运行
预期结果
- 程序通过 MSH 获取用户输入的两个引脚编号,并分别初始化为输出模式与输入模式
- 程序循环 5 次控制输出引脚电平翻转,并在延时稳定后通过输入引脚读取其实时状态
- 串口实时打印每次设置电平后的对比结果,验证输入引脚读取到的逻辑值与输出端是否一致
- 最终程序在完成预设的循环次数后自动停止打印,并输出测试完成的结束语提示
RT-Thread 终端
msh />gpio_input_example P2.31 P0.21
P2.31 --> gpio2.31 --> gpio2.D7
P0.21 --> gpio0.21 --> gpio0.C5
GPIO dynamic test start: OUT=95, IN=21
[4] Set OUT HIGH -> IN21 reads: HIGH
[4] Set OUT LOW -> IN21 reads: LOW
[3] Set OUT HIGH -> IN21 reads: HIGH
[3] Set OUT LOW -> IN21 reads: LOW
[2] Set OUT HIGH -> IN21 reads: HIGH
[2] Set OUT LOW -> IN21 reads: LOW
[1] Set OUT HIGH -> IN21 reads: HIGH
[1] Set OUT LOW -> IN21 reads: LOW
[0] Set OUT HIGH -> IN21 reads: HIGH
[0] Set OUT LOW -> IN21 reads: LOW
GPIO dynamic test finished