RT-Thread引脚管理及IO设备模型

本文详细介绍了RT-Thread操作系统中PIN管理和IO设备模型。PIN管理包括PIN设备简介、访问PIN设备的各个步骤,如设置引脚模式、电平及中断功能。IO设备模型部分涵盖了IO设备的框架、分类、创建、注册和访问方法,包括设备的查找、初始化、打开、关闭、控制、读写以及数据收发回调的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、PIN管理

1.1 PIN设备简介

芯片上的引脚一般分为 4 类:电源时钟控制Input/Output
I/O 口在使用模式上又分为通用I/O(General Purpose Input Output,即GPIO)、复用 I/O(如 SPI/I2C/UART 等),引脚的功能特性和裸机编程相同。

1.2 访问PIN设备

RT-Thread提供以下接口访问引脚:

函数 描述
rt_pin_mode() 设置引脚模式
rt_pin_write() 设置引脚电平
rt_pin_read() 读取引脚电平
rt_pin_attach_irq() 绑定引脚中断回调函数
rt_pin_irq_enable() 使能引脚中断
rt_pin_detach_irq() 脱离引脚中断回调函数

1.2.1 获取引脚编号

RT-Thread 提供的引脚编号需要和芯片的引脚号区分开来,它们并不是同一个概念,引脚编号由 PIN 设备驱动程序定义,和具体的芯片相关。有2种方式可以获取引脚编号:

  • 使用宏定义

如果使用 rt-thread/bsp/stm32 目录下的 BSP 则可以使用下面的宏获取引脚编号:

GET_PIN(port, pin)

例如在潘多拉开发板点亮红色LED,对着引脚PE7,则

#define LEDR_PIN        GET_PIN(E, 7)
  • 查看驱动文件

查看 PIN 驱动代码 drv_gpio.c文件确认引脚编号。此文件里有一个数组存放了每个 PIN 脚对应的编号信息,如下所示:

#if defined(GPIOE)
    __STM32_PIN(64,  E, 0),
    __STM32_PIN(65,  E, 1),
    __STM32_PIN(66,  E, 2),
    __STM32_PIN(67,  E, 3),
    __STM32_PIN(68,  E, 4),
    __STM32_PIN(69,  E, 5),
    __STM32_PIN(70,  E, 6),
    __STM32_PIN(71,  E, 7),
    ……

以我们的红色LED PE7为例,其端口号为E,引脚号为7,对应上述的__STM32_PIN(71, E, 7),则其引脚编号为71。

1.2.2 设置引脚模式

引脚在使用前需要先设置好工作模式,通过如下函数完成:

void rt_pin_mode(rt_base_t pin, rt_base_t mode);
//pin为引脚编号
//mode为工作模式

RT-Thread 支持的引脚工作模式可取如下所示的 5 种宏定义值之一:

#define PIN_MODE_OUTPUT 0x00            /* 输出 */
#define PIN_MODE_INPUT 0x01             /* 输入 */
#define PIN_MODE_INPUT_PULLUP 0x02      /* 上拉输入 */
#define PIN_MODE_INPUT_PULLDOWN 0x03    /* 下拉输入 */
#define PIN_MODE_OUTPUT_OD 0x04         /* 开漏输出 */

1.2.3 设置引脚电平

设置引脚输出电平的函数如下所示:

void rt_pin_write(rt_base_t pin, rt_base_t value);
//pin:引脚编号
//value:电平逻辑值,可取 2 种宏定义值之一:PIN_LOW 或PIN_HIGH

1.2.4 读取引脚电平

读取引脚电平的函数如下所示:

int rt_pi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值