本文要介绍的内容
Air720 GPIO介绍
720SL 共有GPIO接口37个,电平均为1.8V 最大输出电流约2mA。 其中下侧引出GPIO口18个,上侧引出GPIO口为17个, 共35个,除被I2C2端口复用的GPIO49,50从右侧引脚单独引出外,上下两侧排针包括了模块所有GPIO,分布如下图
编写代码,通过串口调试助手控制IO口输出状态
Air720系列最常见的接口为UART串口,其中Air720SL支持两个硬件串口和三个软串口,其中名为 “ASR Modem Device 3 AT” 可以映射到Luat编程环境,Lua环境下虚拟串口ID为129,波特率自适应。
下面我们定义一个简单的小指令来控制GPIO的电平:
GPIO,<port#>,<status>
GPIO是关键字,port#是GPIO的序号,status为代表高电平,status为0代表低电平
然后编写如下代码,进行GPIO输出测试
DEMO.lua
--- 模块功能:GPIO 测试 DEMO.
-- @author openLuat
-- @module gpio.testGpioSingle
-- @license MIT
-- @copyright openLuat
-- @release 2020.01.07
require "utils"
require "pm"
require "pins"
module(..., package.seeall)
-------------------------------------------- 配置串口 --------------------------------------------
-- 串口ID,串口读缓冲区
local UART_ID, sendQueue, writeBuff, writeBusy = 129, {}, {{}, {}}, false
-- 串口超时,串口准备好后发布的消息
local uartimeout, recvReady = 25, "UART_RECV_ID"
--保持系统处于唤醒状态,不会休眠
pm.wake("mcuart")
uart.setup(UART_ID, 912600, 8, uart.PAR_NONE, uart.STOP_1, nil, 1)
uart.on(UART_ID, "receive", function(uid)
table.insert(sendQueue, uart.read(uid, 8192))
sys.timerStart(sys.publish, uartimeout, recvReady)
end)
--串口写入
function write(uid, str)
--软串口
uart.write(uid, str)
end
-- 向串口发送收到的字符串
sys.subscribe(recvReady, function()
local str = table.concat(sendQueue)
-- 串口的数据读完后清空缓冲区
if (string.sub(str,1,4)=="GPIO") then
--拆分解析命令
local splitlist = {}
string.gsub(str, '[^,]+', function(w) table.insert(splitlist, w) end)
--lua下标从1开始
local s_GPIO=splitlist[2]
local s_STATUS=splitlist[3]
--参数从字符串转换成数字
local i_GPIO=tonumber(s_GPIO)
local i_STATUS=tonumber(s_STATUS)
--设置GPIO
pins.setup(i_GPIO,i_STATUS)
end
sendQueue = {}
log.info("uart read length:", #str,"Port")
--执行成功则回送指令,并附加OK
write(UART_ID, str.."->OK")
end)
main.lua
PROJECT = "UART_GPIO_OUTPUT_TEST"
VERSION = "1.0.0"
--加载日志功能模块,并且设置日志输出等级
--如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可
require "log"
LOG_LEVEL = log.LOGLEVEL_TRACE
require "net"
--每1分钟查询一次GSM信号强度
--每1分钟查询一次基站信息
net.startQueryAll(60000, 60000)
require "errDump"
errDump.request("udp://ota.airm2m.com:9072")
require "demo"
--启动系统框架
sys.init(0, 0)
sys.run()
通过Luatools烧写脚本,并自动重启,然后打开LLC串口调试助手,输入指令
GPIO,32,1
即可将GPIO32,设置为高电平
输入指令
GPIO,32,0
即可将GPIO32,设置为低电平
##测试Air720SL 上电IO口初始状态
重复对所有的IO口进行上电及高低电平控制可以得到下表
DEMO板上测试结果为受控IO口27个,有15个初始状态为弱下拉低电平,10个为弱上拉状态,2个为高电平
总结一下:
可以通过外围电路让开机保持在任意电平的引脚为25个,开机只能配置为高电平的2个。
至此Air720SL的GPIO输出状态介绍完毕,谢谢您的阅读。