Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
PIN_GPIO通用驱动
一、RT-Thread PIN设备学习
发布于 2022-03-13 16:13:40 浏览:2800
订阅该版
[tocm] # 一、PIN设备学习 PIN设备是RTT最简单的一个设备,通过RTT Studio来建工程基本已经配置好了,在drivers 中的gpio.c 里已经定义完成,接下来入门一下PIN设备。 PIN设备主要是对GPIO进行操作,比如 GPIO输出, 按键输入,外部中断等等都是由PIN设备完成,这里的外部中断不是单片机的中断,而是由RTOS产生的软件中断,和单片机的中断是一样的。 ## 1. PIN设备常用函数 ### 1. 获取GPIO编号 其实在drivers这个文件夹里的 drv_gpio.c里已经定义好了所有的引脚,这里给出RTT内部函数来获取引脚编号的方式。 ```c GET_PIN(port, pin) ``` port是引脚的 A,B,C,D等等的大编号, pin是具体编号,比如01 比如获取编号PA0的 Demo如下,尽量使用宏定义使软件与硬件脱离开,增加代码可读性。 ```c #define LED0_PIN GET_PIN(A, 0) ``` ### 2. 设置引脚模式 这里的设置引脚模式跟裸机的设置GPIO 一样,有5种宏定义来配置。 ```c void rt_pin_mode(rt_base_t pin, rt_base_t mode); ``` **rt_base_t pin** 就是上面获取的GPIO编号,可以直接填宏定义值 **rt_base_t mode** 就是GPIO的输入输入模式,具体见下表格。 | PIN_MODE_OUTPUT | 输出 | | :---------------------: | :------: | | PIN_MODE_INPUT | 输入 | | PIN_MODE_INPUT_PULLUP | 上拉输入 | | PIN_MODE_INPUT_PULLDOWN | 下拉输入 | | PIN_MODE_OUTPUT_OD | 开漏输出 | ### 3. 设置引脚电平 RTT设置引脚电平非常简单 ``` void rt_pin_write(rt_base_t pin, rt_base_t value); ``` **rt_base_t pin** 同上, 为引脚编号,尽量通过宏定义传递进来 **rt_base_t value** 是想要输出的电平, **PIN_LOW** / **PIN_HIGH** ### 4. 读取引脚电平 当GPIO设置为输入模式时,可读取GPIO的电平值。 ```c int rt_pin_read(rt_base_t pin); ``` **rt_base_t pin** 同上, 为引脚编号,尽量通过宏定义传递进来 返回值是 当前引脚电平的值,返回值跟设置电平一样,为 **PIN_LOW** / **PIN_HIGH**,可添加一个变量来接收返回值。 ### 5. 绑定引脚中断回调函数 RTT非常方便的一点就是可以对每个输入引脚绑定中断函数,相当于扩展了外部中断。 ```c rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode,void (*hdr)(void *args), void *args); ``` **rt_int32_t pin** 同上, 为引脚编号,尽量通过宏定义传递进来 **rt_uint32_t mode** 设置中断触发模式,可选择下面5个值 | PIN_IRQ_MODE_RISING | 上升沿触发 | | :-------------------------: | :--------------: | | PIN_IRQ_MODE_FALLING | 下降沿触发 | | PIN_IRQ_MODE_RISING_FALLING | 上升下降沿都触发 | | PIN_IRQ_MODE_HIGH_LEVEL | 高电平触发 | | PIN_IRQ_MODE_LOW_LEVEL | 低电平触发 | **hdr** 中断回调函数,需要自己定义 **args** 中断回调函数需要传递的参数,没有就填RT_NULL ### 6. 使能引脚中断 跟裸机开发一样,中断可以使能也可以失能。 ```c rt_err_t rt_pin_irq_enable(rt_base_t pin, rt_uint32_t enabled); ``` **rt_base_t pin** 同上, 为引脚编号,尽量通过宏定义传递进来 **rt_uint32_t enabled** 状态选择,可以是使能也可以是失能 | PIN_IRQ_ENABLE | 使能 | | :-------------: | :--: | | PIN_IRQ_DISABLE | 失能 | ## 2. PIN设备使用Demo ```c /* * Copyright (c) 2006-2021, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2022-03-12 desktop the first version */ //通过命令行 调用 pin_read_sample 命令,然后按下按键会触发中断 // ULOG会输出字符串 // RT-Thread PIN 设备学习Demo #include
#include
#include
#include
#define DBG_TAG "PIN_Device" #define DBG_LVL DBG_LOG // PE11 PE14 PE10 #define KEY_0 GET_PIN(E, 10) #define KEY_1 GET_PIN(E, 11) #define KEY_2 GET_PIN(E, 14) static void hold_on(void *args) { LOG_I("Hello RT-Thread!\t\n"); } static void pin_read_sample(void) { /* 按 键0引 脚 为 输 入 模 式 */ rt_pin_mode(KEY_0, PIN_MODE_INPUT_PULLUP); /* 绑定引脚中断函数 */ rt_pin_attach_irq(KEY_0, PIN_IRQ_MODE_FALLING, hold_on, RT_NULL); /* 使能PIN设备中断函数 */ rt_pin_irq_enable(KEY_0, PIN_IRQ_ENABLE); } MSH_CMD_EXPORT(pin_read_sample, pin read sample); ```
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
乐乐爱学习
这家伙很懒,什么也没写!
文章
8
回答
3
被采纳
0
关注TA
发私信
相关文章
1
PIN绑定引脚中断回调函数没有反应
2
rtthread PIN设备
3
关于引脚宏定义的一些疑惑
4
关于gpio引脚实在不懂了,求大家帮助
5
GET_PIN(A, 1) 提示 'A' 未定义
6
关于4.0.2版本中STM32的PIN设备外部中断的相关问题
7
自己按照官方手册 在drv_gpio.c里面找不到PIN脚信息
8
关于多个PIN设备同时读写的问题
9
翻车在一个GPIO上 开启pin中断 导致程序卡死
10
外部中断回调函数执行问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部