Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
内核学习营
PIN设备函数整理
发布于 2020-03-18 15:23:09 浏览:1435
订阅该版
[tocm] #### PIN设备 输出模式一般包括:推挽、开漏、上拉、下拉。引脚为输出模式时,可以通过配置引脚输出的电平状态为高电平或低电平来控制连接的外围设备。 输入模式一般包括:浮空、上拉、下拉、模拟。引脚为输入模式时,可以读取引脚的电平状态,即高电平或低电平。 应用程序通过 RT-Thread 提供的 PIN 设备管理接口来访问 GPIO,相关接口如下所示: |函数| 描述|定义|返回值| |:-----|:-------|:-------|:-------| |rt_pin_mode() |设置引脚模式|void rt_pin_mode(rt_base_t pin, rt_base_t mode);| |rt_pin_write()| 设置引脚电平|void rt_pin_write(rt_base_t pin, rt_base_t value);| |rt_pin_read()| 读取引脚电平|int rt_pin_read(rt_base_t pin);|PIN_LOW 低电平/PIN_HIGH 高电平| |rt_pin_attach_irq() |绑定引脚中断回调函数|rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode,void (* hdr)(void * args), void * args);|RT_EOK 绑定成功/错误码 绑定失败| |rt_pin_irq_enable() |使能引脚中断|rt_err_t rt_pin_irq_enable(rt_base_t pin, rt_uint32_t enabled);|RT_EOK 脱离成功/错误码 脱离失败| |rt_pin_detach_irq() |脱离引脚中断回调函数|rt_err_t rt_pin_detach_irq(rt_int32_t pin);|RT_EOK 脱离成功/错误码 脱离失败| |GET_PIN(port, pin)|获取引脚编号| ``` 如果使用其他 BSP 则需要查看 PIN 驱动代码 drv_gpio.c 文件确认引脚编号。此文件里有一个数组存放了每个 PIN 脚对应的编号信息,如下所示: static const rt_uint16_t pins[] = { __STM32_PIN_DEFAULT, __STM32_PIN_DEFAULT, __STM32_PIN(2, A, 15), __STM32_PIN(3, B, 5), __STM32_PIN(4, B, 8), __STM32_PIN_DEFAULT, __STM32_PIN_DEFAULT, __STM32_PIN_DEFAULT, __STM32_PIN(8, A, 14), __STM32_PIN(9, B, 6), ... ... } 以__STM32_PIN(2, A, 15)为例,2 为 RT-Thread 使用的引脚编号,A 为端口号,15 为引脚号,所以 PA15 对应的引脚编号为 2。 //----------------------------------------------- //引脚工作模式 #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 /* 开漏输出 */ //--------------------------------------------------- //中断触发模式 #define PIN_IRQ_MODE_RISING 0x00 /* 上升沿触发 */ #define PIN_IRQ_MODE_FALLING 0x01 /* 下降沿触发 */ #define PIN_IRQ_MODE_RISING_FALLING 0x02 /* 边沿触发(上升沿和下降沿都触发)*/ #define PIN_IRQ_MODE_HIGH_LEVEL 0x03 /* 高电平触发 */ #define PIN_IRQ_MODE_LOW_LEVEL 0x04 /* 低电平触发 */ //------------------------------------------------------- //中断回调实例 #define KEY0_PIN_NUM 55 /* PD8 */ /* 中断回调函数 */ void beep_on(void *args) { rt_kprintf("turn on beep!
"); rt_pin_write(BEEP_PIN_NUM, PIN_HIGH); } static void pin_beep_sample(void) { /* 按键0引脚为输入模式 */ rt_pin_mode(KEY0_PIN_NUM, PIN_MODE_INPUT_PULLUP); /* 绑定中断,上升沿模式,回调函数名为beep_on */ rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_on, RT_NULL); } //*--------------------------------------------- ``` ```c /* * 程序清单:这是一个 PIN 设备使用例程 * 例程导出了 pin_beep_sample 命令到控制终端 * 命令调用格式:pin_beep_sample * 程序功能:通过按键控制蜂鸣器对应引脚的电平状态控制蜂鸣器 */ #include
#include
/* 引脚编号,通过查看设备驱动文件drv_gpio.c确定 */ #ifndef BEEP_PIN_NUM #define BEEP_PIN_NUM 35 /* PB0 */ #endif #ifndef KEY0_PIN_NUM #define KEY0_PIN_NUM 55 /* PD8 */ #endif #ifndef KEY1_PIN_NUM #define KEY1_PIN_NUM 56 /* PD9 */ #endif void beep_on(void *args) { rt_kprintf("turn on beep!
"); rt_pin_write(BEEP_PIN_NUM, PIN_HIGH); } void beep_off(void *args) { rt_kprintf("turn off beep!
"); rt_pin_write(BEEP_PIN_NUM, PIN_LOW); } static void pin_beep_sample(void) { /* 蜂鸣器引脚为输出模式 */ rt_pin_mode(BEEP_PIN_NUM, PIN_MODE_OUTPUT); /* 默认低电平 */ rt_pin_write(BEEP_PIN_NUM, PIN_LOW); /* 按键0引脚为输入模式 */ rt_pin_mode(KEY0_PIN_NUM, PIN_MODE_INPUT_PULLUP); /* 绑定中断,下降沿模式,回调函数名为beep_on */ rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_on, RT_NULL); /* 使能中断 */ rt_pin_irq_enable(KEY0_PIN_NUM, PIN_IRQ_ENABLE); /* 按键1引脚为输入模式 */ rt_pin_mode(KEY1_PIN_NUM, PIN_MODE_INPUT_PULLUP); /* 绑定中断,下降沿模式,回调函数名为beep_off */ rt_pin_attach_irq(KEY1_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_off, RT_NULL); /* 使能中断 */ rt_pin_irq_enable(KEY1_PIN_NUM, PIN_IRQ_ENABLE); } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(pin_beep_sample, pin beep sample); ```
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
1.4k
关于作者
水蜜桃菌
这家伙很懒,什么也没写!
提问
9
回答
10
被采纳
0
关注TA
发私信
相关问题
1
【内核学习】rtthread内核移植记录-STM32F103ZET6-HAL库
2
《内核学习营》+水一方+自用STM32F103VC 板RT-Thread内核移植分享
3
《内核学习营》+水一方+项目中创建标准的 RT-Thread工程
4
内核学习营+坦然+探索者stm32f407板子RT-thread循环点亮led灯
5
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口字符点灯
6
<内核学习营>+坦然+探索者stm32f407板子RT-thread的pwm点灯实验
7
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口实验
8
<内核学习营>+坦然+野火stm32f103板子RT-thread读写SD卡实验
9
<内核学习营>+坦然+探索者stm32f407板子RT-thread的RTC闹钟实验
10
【内核学习营】+王秀峰+led_rgb
推荐文章
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组件
最新文章
1
RT Thread 源码分析笔记 :线程和调度器
2
RT-Thread项目助手v0.2.0 - 支持Env Windows
3
RttreadV5.10上,GD32F450Z RTC时间显示问题
4
rt-smart启动流程分析
5
EtherKit快速上手PROFINET
热门标签
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在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部