RTT-Pin设备模型

1. Pin 是什么?

Pin 设备本质上是对 MCU 的 GPIO 引脚进行统一封装。

它的作用是:不用直接操作寄存器,也能完成 LED 控制、按键读取、外部中断等功能;更换芯片时,上层应用代码通常无需大改。

2. GPIO 常见用途

  • 输出:控制 LED、蜂鸣器、继电器等。

  • 输入:读取按键、传感器状态。

  • 中断:按键状态变化时主动通知 CPU,比轮询更高效。

3. 引脚常见模式

模式 说明
PIN_MODE_OUTPUT 普通输出
PIN_MODE_OUTPUT_OD 开漏输出,常用于 I2C 等场景
PIN_MODE_INPUT 浮空输入
PIN_MODE_INPUT_PULLUP 上拉输入,按键常用
PIN_MODE_INPUT_PULLDOWN 下拉输入

使用引脚前,必须先设置模式:

复制代码
rt_pin_mode(pin, PIN_MODE_OUTPUT);

代码解析: pin 是引脚编号,PIN_MODE_OUTPUT 将该引脚配置为输出。引脚上电后的默认状态不一定符合需求,因此无论控制 LED 还是读取按键,都应先设置正确的工作模式。

4. Pin 设备模型的作用

RT-Thread 的 Pin 框架位于应用与芯片 GPIO 驱动之间:

复制代码
应用程序
   ↓
Pin 设备管理接口
   ↓
Pin 设备驱动框架
   ↓
芯片 GPIO 驱动
   ↓
硬件引脚

不同芯片厂商只需适配自己的 GPIO 驱动,上层统一使用 rt_pin_*() 接口即可。

5. 常用 API

接口 作用
rt_pin_get() 根据名称获取引脚编号
rt_pin_mode() 设置引脚模式
rt_pin_write() 设置输出电平
rt_pin_read() 读取输入电平
rt_pin_attach_irq() 绑定中断回调函数
rt_pin_irq_enable() 使能或关闭中断
rt_pin_detach_irq() 解绑中断回调函数

6. 控制 LED

复制代码
#define LED_PIN  35
​
rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
​
/* 输出高电平 */
rt_pin_write(LED_PIN, PIN_HIGH);
​
/* 输出低电平 */
rt_pin_write(LED_PIN, PIN_LOW);

代码解析: LED_PIN 是 LED 对应的 GPIO 编号;两次 rt_pin_write() 分别输出高、低电平。代码只负责改变引脚电平,LED 是否点亮取决于硬件接法:低电平点亮的板子需要用 PIN_LOW 点亮。

注意:有些开发板的 LED 是低电平点亮,实际亮灭逻辑要以原理图为准。

7. 读取按键

复制代码
#define KEY_PIN  55
​
rt_pin_mode(KEY_PIN, PIN_MODE_INPUT_PULLUP);
​
if (rt_pin_read(KEY_PIN) == PIN_LOW)
{
    /* 按键被按下 */
}

代码解析: 先把 KEY_PIN 设置为上拉输入,未按下时引脚被拉为高电平;按下后通常接地,因此读到 PIN_LOW。这种写法是轮询方式,适合简单场景,但会持续占用 CPU 查询按键状态。

按键常使用上拉输入:未按下为高电平,按下后接地变为低电平。

8. 按键中断

中断方式不需要一直循环查询按键状态。按键电平发生变化时,系统会自动执行回调函数。

复制代码
#define KEY_PIN  55
#define LED_PIN  35
​
static void key_irq_handler(void *args)
{
    rt_pin_write(LED_PIN, PIN_HIGH);
}
​
static void key_init(void)
{
    rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
    rt_pin_mode(KEY_PIN, PIN_MODE_INPUT_PULLUP);
​
    rt_pin_attach_irq(KEY_PIN,
                      PIN_IRQ_MODE_FALLING,
                      key_irq_handler,
                      RT_NULL);
​
    rt_pin_irq_enable(KEY_PIN, PIN_IRQ_ENABLE);
}

代码解析: key_irq_handler() 是按键中断触发后执行的回调函数;这里将 LED 输出为高电平。初始化函数先配置 LED 输出与按键上拉输入,再将按键的下降沿绑定到回调,最后使能中断。回调运行在中断上下文,应避免延时、阻塞和耗时操作;若需要复杂处理,建议在回调中通知线程。

常见中断触发方式:

  • PIN_IRQ_MODE_RISING:上升沿触发

  • PIN_IRQ_MODE_FALLING:下降沿触发

  • PIN_IRQ_MODE_RISING_FALLING:双边沿触发

  • PIN_IRQ_MODE_HIGH_LEVEL:高电平触发

  • PIN_IRQ_MODE_LOW_LEVEL:低电平触发

总结

Pin 设备模型让 GPIO 操作更加统一、简单。初学阶段重点掌握三类操作即可:

复制代码
输出控制:rt_pin_mode() + rt_pin_write()
输入读取:rt_pin_mode() + rt_pin_read()
中断处理:rt_pin_attach_irq() + rt_pin_irq_enable()
相关推荐
G***技6 小时前
告别物联网碎片化:杰和LH707+LM2-100-V0联合方案给出标准答案
人工智能·嵌入式硬件
SKH.6 小时前
ARM汇编
嵌入式硬件·arm
深圳市恒锐丰科技杨生7 小时前
EG2134 300V 三相独立半桥栅极驱动芯片|屹晶 EGmicro
嵌入式硬件·硬件工程
朝发如雪8 小时前
快速掌握单片机基础(1)(嵌入式基本概念)
单片机
szxinmai主板定制专家8 小时前
【嵌入式实战】RK3588+GMSL多路相机采集方案|SerDes长距离低延时视频流落地教程
人工智能·单片机·机器人·边缘计算·zynq
LCG元8 小时前
STM32F103 SPI 驱动 W5500 以太网模块实战:硬件协议栈寄存器体系、Socket 状态机避坑与 TCP 吞吐实测
stm32·单片机·嵌入式硬件
Zhang.Yi8 小时前
STM32-SPI
stm32·单片机·嵌入式硬件
en.en..8 小时前
网络分层封装 与 TCP粘包的因果关系
网络·单片机·嵌入式硬件
天空'之城9 小时前
单片机基础核心知识点汇总(三十九)
单片机·嵌入式硬件
mk0159 小时前
电动自行车汽车工业系统电机驱动100V高压恒定导向芯片进口替代
驱动开发·单片机·硬件工程·智能硬件·pcb工艺