嵌入式技术论坛
直播中

jsqueh

9年用户 1297经验值
私信 关注
[经验]

怎样通过RT-Thread提供的PIN设备管理接口来访问GPIO呢

引脚简介

芯片上的引脚一般分为 4 类:电源、时钟、控制与 I/O,I/O 口在使用模式上又分为 General Purpose Input Output(通用输入 / 输出),简称 GPIO,与功能复用 I/O(如 SPI/I2C/UART 等)。

大多数 MCU 的引脚都不止一个功能。不同引脚内部结构不一样,拥有的功能也不一样。可以通过不同的配置,切换引脚的实际功能。通用 I/O 口主要特性如下:

访问 PIN 设备

应用程序通过 RT-Thread 提供的 PIN 设备管理接口来访问 GPIO,相关接口如下所示:

获取引脚编号

RT-Thread 提供的引脚编号需要和芯片的引脚号区分开来,它们并不是同一个概念,引脚编号由 PIN 设备驱动程序定义,和具体的芯片相关。有3种方式可以获取引脚编号: API 接口获取、使用宏定义或者查看PIN 驱动文件。

使用 API

使用 rt_pin_get() 获取引脚编号,如下获取 PF9 的引脚编号:

使用宏定义

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

查看驱动文件

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

以__STM32_PIN(2, A, 15)为例,2 为 RT-Thread 使用的引脚编号,A 为端口号,15 为引脚号,所以 PA15 对应的引脚编号为 2。

设置引脚模式

引脚在使用前需要先设置好输入或者输出模式,通过如下函数完成:


目前 RT-Thread 支持的引脚工作模式可取如所示的 5 种宏定义值之一,每种模式对应的芯片实际支持的模式需参考 PIN 设备驱动程序的具体实现:

使用示例如下所示:

设置引脚电平

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


使用示例如下所示:

读取引脚电平

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


使用示例如下所示:

绑定引脚中断回调函数

若要使用到引脚的中断功能,可以使用如下函数将某个引脚配置为某种中断触发模式并绑定一个中断回调函数到对应引脚,当引脚中断发生时,就会执行回调函数:


中断触发模式 mode 可取如下 5 种宏定义值之一:

使用示例如下所示:

使能引脚中断

绑定好引脚中断回调函数后使用下面的函数使能引脚中断:


使用示例如下所示:

脱离引脚中断回调函数

可以使用如下函数脱离引脚中断回调函数:


引脚脱离了中断回调函数以后,中断并没有关闭,还可以调用绑定中断回调函数再次绑定其他回调函数。

PIN 设备使用示例

PIN 设备的具体使用方式可以参考如下示例代码,示例代码的主要步骤如下:

可编程控制中断:中断触发模式可配置,一般有下图所示 5 种中断触发模式:

输入输出模式可控制。

输出模式一般包括:推挽、开漏、上拉、下拉。引脚为输出模式时,可以通过配置引脚输出的电平状态为高电平或低电平来控制连接的外围设备。

输入模式一般包括:浮空、上拉、下拉、模拟。引脚为输入模式时,可以读取引脚的电平状态,即高电平或低电平。

设置蜂鸣器对应引脚为输出模式,并给一个默认的低电平状态。

设置按键 0 和 按键1 对应引脚为输入模式,然后绑定中断回调函数并使能中断。

按下按键 0 蜂鸣器开始响,按下按键 1 蜂鸣器停止响。

原作者:文江博客

更多回帖

发帖
×
20
完善资料,
赚取积分