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()
相关推荐
智购科技无人售货机厂家21 小时前
自动售货机物联网平台为什么会出现在线状态不一致?~YH
python·单片机·嵌入式硬件·django·pygame
zhangrelay1 天前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
comyccccc1 天前
STM32F103C8T6最小系统板设计全解析学习笔记
单片机·1024程序员节
Industio_触觉智能1 天前
把NPU检测直接嵌进采集终端|RK3576 AI采集终端全链路拆解教程-下
嵌入式硬件·ai·硬件架构·npu·ai视觉·rk3576·采集终端
en.en..1 天前
STM32 GPIO ODR 与 BSRR 寄存器完整对比详解
单片机·嵌入式硬件
HQB20261 天前
EG1182|屹晶微电子 60V 内置高压管异步降压 DC‑DC
嵌入式硬件·硬件工程
LCG米1 天前
STM32硬件SPI驱动SSD1306 OLED实测:上电黑屏排查、页寻址模式与取模扫描方向陷阱
stm32·单片机·嵌入式硬件·嵌入式
深圳老胡1 天前
STM32C5A3ZG 网络调试总结:从启动失败到连续 Ping 稳定
笔记·stm32·单片机·代码规范
硅基造物主1 天前
STM32 从 0 到 1 做智能家居(八):PWM 控制风扇、加热片与 SG90 窗帘
stm32·嵌入式硬件·智能家居·hal库·pwm
简单电磁炮1 天前
关于adc采集
stm32·单片机