GPIO控制
# 简介
GPIO(General-Purpose Input/Output) 指通用输入输出口。在软件运行期间能够动态配置和控制的通用引脚,实现某时刻电平状态的输出与输入,即可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。除了通用输入输出功能外,还可能有上拉、下拉、中断或其它复用功能。
---
合宙Cat.1模块具有多种不同的GPIO接口,部分GPIO口同时可复用为其他功能,并且模块的GPIO管脚输入输出电压能力按照不同的电压域区分,特珠管脚的使用需要打开对应的电压域方能使用。
-- ---
# GPIO接口控制
GPIO的库由底层core实现,相关API接口如下:
|API接口| 描述|
| --- | --- |
| pins.setup()| GPIO接口配置,配置使用管脚,模式 |
> 详细的API介绍见[pins API](https://doc.openluat.com/wiki/21?wiki_page_id=2286 "pins API")章节
# GPIO使用示例
GPIO 的具体使用方式可以参考如下示例代码,示例代码的主要步骤如下:
1. 配置操作的GPIO接口管脚及工作模式。
2. 在代码运行中操作GPIO口工作状态。
```lua
module(...,package.seeall)
require"pins"
--[[
有些GPIO需要打开对应的ldo电压域才能正常工作,电压域和对应的GPIO关系如下
pmd.ldoset(x,pmd.LDO_VSIM1) -- GPIO 29、30、31
pmd.ldoset(x,pmd.LDO_VLCD) -- GPIO 0、1、2、3、4
pmd.ldoset(x,pmd.LDO_VMMC) -- GPIO 24、25、26、27、28
x=0时:关闭LDO
x=1时:LDO输出1.716V
x=2时:LDO输出1.828V
x=3时:LDO输出1.939V
x=4时:LDO输出2.051V
x=5时:LDO输出2.162V
x=6时:LDO输出2.271V
x=7时:LDO输出2.375V
x=8时:LDO输出2.493V
x=9时:LDO输出2.607V
x=10时:LDO输出2.719V
x=11时:LDO输出2.831V
x=12时:LDO输出2.942V
x=13时:LDO输出3.054V
x=14时:LDO输出3.165V
x=15时:LDO输出3.177V
]]
local level = 0
--GPIO18配置为输出,默认输出低电平,可通过setGpio18Fnc(0或者1)设置输出电平
local setGpio18Fnc = pins.setup(pio.P0_18,0)
sys.timerLoopStart(function()
level = level==0 and 1 or 0
setGpio18Fnc(level)
log.info("testGpioSingle.setGpio18Fnc",level)
end,1000)
--GPIO19配置为输入,可通过getGpio19Fnc()获取输入电平
local getGpio19Fnc = pins.setup(pio.P0_19)
sys.timerLoopStart(function()
log.info("testGpioSingle.getGpio19Fnc",getGpio19Fnc())
end,1000)
--pio.pin.setpull(pio.PULLUP,pio.P0_19) --配置为上拉
--pio.pin.setpull(pio.PULLDOWN,pio.P0_19) --配置为下拉
--pio.pin.setpull(pio.NOPULL,pio.P0_19) --不配置上下拉
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)
```
# 硬件设计
见硬件设计指南 [GPIO接口 章节](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/AJYjwZih)