GPIO
一、GPIO 概述
GPIO 是通用型输入输出的简称,一个 GPIO 引脚可以用于输入、输出或其他特殊功能。
二、演示功能概述
本文将介绍 724UG GPIO 的输入与输出 DEMO 讲解与效果演示。
三、准备硬件环境
3.1 开发板准备
使用 Air724UG-NFM 开发板,如下图所示:
淘宝购买链接:Air724UG-NFM 开发板淘宝购买链接 ;
此开发板的详细使用说明参考:Air724UG 产品手册 中的 《EVB_Air724UG_AXX开发板使用说明》,写这篇文章时最新版本的使用说明为:《EVB_Air724UG_A14开发板使用说明》;开发板使用过程中遇到任何问题,可以直接参考这份使用说明文档。
3.2 数据通信线
请准备一根用于连接 Air724UG-NFM 开发板和 PC 电脑的数据线,该数据线将实现业务逻辑的控制与交互。
- USB 数据线(其一端为 micro-B 接口(俗称老安卓口),用于连接 Air724UG-NFM 开发板)。通常,这种数据线的外观如下示意图所示:
USB 数据线:此数据线不仅用于为测试板供电,还可用于查看抓取 lua 脚本上层和底层 core 日志。其一端为 micro-B 接口,连接 Air724UG-NFM 开发板;另一端为标准 USB 接口,连接 PC 电脑。
3.3 PC 电脑
WINDOWS 系统,其他暂无特别要求;
四、准备软件环境
4.1 源码和工具
- 724UG 模块使用固件为 LuatOS-Air_V4030_RDA8910_TTS_NOLVGL_FLOAT.pac
下载最新版本的底层 CORE,解压后会出现多个版本的固件,本教程使用的是 LuatOS-Air_V4030_RDA8910_TTS_NOLVGL_FLOAT.dfota.bin。
- 本教程使用的 demo:https://gitee.com/openLuat/LuatOS-Air724UG/tree/master/script_LuaTask/demo/gpio/gpioSingle
- 将固件和脚本烧录到模块中,使用说明参考:Luatools 下载和详细使用 源码和固件已打包,如下所示: 右键点我,另存为,下载完整压缩文件包
4.2 烧录代码
首先,确保你的 Luatools 的版本大于或者等于 3.0.6 版本.
在 Luatools 的左上角上有版本显示的,如图所示:
Luatools 版本没问题的话, 就点击 Luatools 右上角的“项目管理测试”按钮,如下图所示:
这时会弹出项目管理和烧录管理的对话框,如下图:
选择对应的项目烧录代码。
五、GPIO 软硬件资料
5.1 相关硬件接口
Air724UG 模块引脚共支持 28 个 GPIO,部分引脚上电前后状态不同,如使用这些管脚,需根据实际情况使用。
管脚定义:
VLCD、VMMC、VSIM1相关引脚电压域会根据外部硬件,其内部自动调整其输出电压,为1.8V/3V/3.3V
At reset, after reset 都默认指的就是function 0功能的状态(即GPIO 配置还没生效前的状态)
GPIO0~5 电压域默认关闭,所以at reset, after reset状态都是L
GPIO29~31 电压域默认关闭,所以at reset, after reset状态都是L
参考硬件设计手册中的管脚描述
5.2 相关 API 介绍
GPIO 相关 API: https://doc.openluat.com/wiki/21?wiki_page_id=2286
六、功能示例
6.1 GPIO 简介
GPIO(General-Purpose Input/Output) 指通用输入输出口。在软件运行期间能够动态配置和控制的通用引脚,实现某时刻电平状态的输出与输入,即可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。
6.2 输入模式简介
GPIO 的输入模式是指将 GPIO 配置为接收外部信号的模式。
6.2.1 核心代码
--GPIO19配置为输入,可通过getGpio19Fnc()获取输入电平
local getGpio19Fnc = pins.setup(pio.P0_19)
--循环输出GPIO19电平
sys.timerLoopStart(function()
log.info("testGpioSingle.getGpio19Fnc",getGpio19Fnc())
end,1000)
6.2.2 示例效果展示
使用杜邦线短接 VDD1V8 和 GPIO19。
使用杜邦线短接 GND 和 GPIO19。
6.3 输出模式简介
GPIO 的输出模式是指将 GPIO 配置为向外界输出高低电平的模式。
6.3.1 核心代码
local level = 0
--GPIO18配置为输出,默认输出低电平,可通过setGpio18Fnc(0或者1)设置输出电平
local setGpio18Fnc = pins.setup(pio.P0_18,0)
--循环设置GPIO18电平为0,1
sys.timerLoopStart(function()
level = level==0 and 1 or 0
setGpio18Fnc(level)
log.info("testGpioSingle.setGpio18Fnc",level)
end,1000)
6.3.2 示例效果展示:
6.4 中断模式简介
当 GPIO 检测到电平变化且满足触发条件时,触发中断,CPU 就会暂停当前任务,执行中断回调函数中的内容,当中断回调函数中的内容执行完毕时,再继续执行之前没有执行完的任务。除了中断回调方式,还有中断计数模式。中断计数模式时,中断时不回调。
6.4.1 核心代码
function gpio13IntFnc(msg)
log.info("testGpioSingle.gpio13IntFnc",msg,getGpio13Fnc())
--上升沿中断
if msg==cpu.INT_GPIO_POSEDGE then
--下降沿中断
else
end
end
--GPIO13配置为中断,可通过getGpio13Fnc()获取输入电平,产生中断时,自动执行gpio13IntFnc函数
getGpio13Fnc = pins.setup(pio.P0_13,gpio13IntFnc)
6.4.2 示例效果展示:
使用杜邦线将 GPIO13 短接下 VDD1V8.
七、总结
本节我们学习了有关 GPIO 的知识。其中包括输入模式,输出模式,中断模式。
合宙 Cat.1 模块具有多种不同的 GPIO 接口,部分 GPIO 口同时可复用为其他功能,并且模块的 GPIO 管脚输入输出电压能力按照不同的电压域区分,特珠管脚的使用需要打开对应的电压域方能使用。
八、常见问题
1. 为什么 GPIO4 管脚操作没反应?
答:GPIO4 管脚为 VCC_LCD 电压域,需要先配置 pmd.ldoset(2,pmd.LDO_VLCD)打开,才能正常操作该管脚。
九、扩展
脉冲统计个数:
使用杜邦线短接 GPIO23 和 GPIO11
---------------------------------------脉冲统计个数功能演示---------------------------------------
--脉冲产生器:GPIO11一直输出1KHz的方波
pio.pin.pwm(pio.P0_11,500,500,-1)
--脉冲检测:GPIO23用来检测,短接GPIO11和GPIO23
sys.taskInit(function()
--关闭软件和硬件防抖功能
pio.pin.setdebounce(0xffffffff)
--配置GPIO23位脉冲检测模式
pio.pin.setdir(pio.INT,pio.P0_23,pio.CONT)
--恢复默认防抖配置20毫秒
pio.pin.setdebounce(20)
--每隔一秒检测一次输入脉冲的数量
--检测1分钟
local seconds = 0
while seconds<60 do
-- 读取检测到的脉冲个数,数据为table类型,格式如下:
-- {
-- low = 10, -- 低电平个数
-- high = 10, -- 高电平个数
-- duration = 2000000, -- 距离上次读取的时间(单位us)
-- }
local tPlusInfo = pio.pin.getval(pio.P0_23)
log.info("testGpioSingle.gpio23 tPlusInfo",tPlusInfo.low,tPlusInfo.high,tPlusInfo.duration)
sys.wait(1000)
seconds = seconds+1
end
--关闭GPIO23脉冲检测功能
pio.pin.close(pio.P0_23)
end)
---------------------------------------脉冲统计个数功能演示---------------------------------------
示例效果展示:
给读者的话
本篇文章由
魏健强
开发;本篇文章描述的内容,如果有错误、细节缺失、细节不清晰或者其他任何问题,总之就是无法解决您遇到的问题;
请登录合宙技术交流论坛,点击文档找错赢奖金-Air724UG-LuatOS-软件指南-硬件驱动-GPIO;
用截图标注+文字描述的方式跟帖回复,记录清楚您发现的问题;
我们会迅速核实并且修改文档;
同时也会为您累计找错积分,您还可能赢取月度找错奖金!