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()
相关推荐
Messy create2 小时前
【储能系统三大核心】
网络·stm32·单片机·算法·能源
Nomarsgo2 小时前
生产车间产线巡检解决方案:基于联控 Lionconit PTC-1006 工业手持平板电脑打造移动化、数字化车间巡检终端
单片机·嵌入式硬件·电脑
IT实战课堂之秋老师2 小时前
基于IOT技术的太阳能板表面清洁程度检测系统设计
单片机
智购科技无人售货机厂家2 小时前
2026自动售货机出货口防夹手设计:从红外检测到电机反转的工程实践~YH
大数据·linux·单片机·嵌入式硬件·微信
2601_966799042 小时前
酷嗨米J300:多平台同步直播的硬件级解法,一台相机三路输出不卡顿
嵌入式硬件
CHENKONG_CK3 小时前
晨控CK-FR08系列与欧姆龙NX系列PLC配置MODBUSTCP例程使用手册
网络·单片机·嵌入式硬件
XiHongShi20163 小时前
51基础学习视频分享(2),三极管,点亮LED灯
单片机·学习
youshi66685 小时前
stm32-看门狗
stm32·单片机·嵌入式硬件
M158227690555 小时前
三格串口服务器:RS232/485 设备联网解决方案
运维·服务器·单片机
自小吃多5 小时前
PCB Editor放置元器件笔记
笔记·嵌入式硬件