- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
127 lines
3.7 KiB
Lua
127 lines
3.7 KiB
Lua
--[[
|
||
@module pins_dynamic
|
||
@summary pins_dynamic测试功能模块
|
||
@version 1.0
|
||
@date 2025.10.15
|
||
@author 马亚丹
|
||
@usage
|
||
本demo演示的功能为:使用Air780EPM核心板,演示动态修改管脚复用功能
|
||
核心逻辑:
|
||
1.加载自定义的管脚配置文件my.json配置管脚功能
|
||
文件中配置
|
||
pin28功能是UART2_RXD
|
||
|
||
pin29功能是UART2_TXD
|
||
|
||
pin55功能是CAM_RX0
|
||
|
||
pin56功能是CAM_RX1
|
||
|
||
2.通过pins.setup接口动态修改管脚复用功能,
|
||
|
||
这里演示把pin28由原UART2_RXD功能配置为GPIO12,
|
||
|
||
pin29由原UART2_TXD功能配置为GPIO13,
|
||
|
||
pin55由原CAM_RX0功能配置为UART2_RXD,
|
||
|
||
pin56由原CAM_RX1功能配置为UART2_TXD,
|
||
|
||
3.演示重新配置的串口管脚的功能,通过串口工具收发数据。
|
||
|
||
|
||
]]
|
||
|
||
|
||
--如果需要debug,在任何需要的地方添加这一行
|
||
--log.info ("打开debug",pins.debug(true))
|
||
|
||
--如果打开debug后需要关闭debug,在任何需要的地方添加这一行
|
||
--log.info ("打开debug",pins.debug(false))
|
||
|
||
|
||
--自定义配置文件要通过pins.loadjson加载
|
||
--如果烧录了pins_Air780EPM.json,在内核固件运行时,已经自动加载pins_Air780EPM.json,并且按照pins_Air780EPM.json的配置初始化所有io引脚功能,
|
||
--此处再加载my.json文件,会覆盖pins_Air780EPM.json中配置的所有io引脚功能,按照my.json的配置再次初始化所有io引脚功能,
|
||
--my.json文件中:
|
||
--pin28默认为UART2_RXD,
|
||
--pin29默认为UART2_TXD,
|
||
--pin55默认为CAM_RX0,
|
||
--pin56默认为CAM_RX1,
|
||
--通过下面的配置管脚复用的代码将这四个脚重新配置:
|
||
--pin28由默认UART2_RXD修改配置为GPIO12,
|
||
--pin29由默认UART2_TXD修改配置为GPIO13,
|
||
--pin55由默认CAM_RX0配置为UART2_RXD,
|
||
--pin56由默认CAM_RX1配置为UART2_TXD
|
||
|
||
--烧录多个.json文件时以最后一个文件的配置初始化所有io引脚功能
|
||
log.info("加载自定义的配置文件", pins.loadjson("/luadb/my.json"))
|
||
|
||
--=======配置管脚复用=========--
|
||
|
||
log.info("uart", "重新配置uart2到新管脚")
|
||
uart.close(2)
|
||
local r1 = pins.setup(28, "GPIO12")
|
||
log.info("配置pin28脚即UART2_RXD为GPIO12", r1)
|
||
local r2 = pins.setup(29, "GPIO13")
|
||
log.info("配置pin29脚即UART2_TXD为GPIO13", r2)
|
||
gpio.close(12)
|
||
gpio.close(13)
|
||
|
||
local r3 = pins.setup(55, "UART2_RX")
|
||
log.info("配置pin55脚即CAM_RX0为UART2_RXD", r3)
|
||
local r4 = pins.setup(56, "UART2_TX")
|
||
log.info("配置pin56脚即CAM_RX1为UART2_TXD", r4)
|
||
|
||
|
||
|
||
--========验证复用的管脚的功能=========--
|
||
local uartid = 2
|
||
|
||
--初始化 参数都可以根据实施情况修改
|
||
uart.setup(
|
||
--串口id
|
||
uartid,
|
||
--波特率
|
||
115200,
|
||
8, --数据位
|
||
1 --停止位
|
||
)
|
||
|
||
log.info("uart", "uart2重新配置完成")
|
||
local function ur_rec(id, len)
|
||
local s = ""
|
||
repeat
|
||
s = uart.read(id, 128)
|
||
-- #s 是取字符串的长度
|
||
if #s > 0 then
|
||
-- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
|
||
log.info("uart", "receive", id, #s, s)
|
||
-- 如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到,可以用以hex格式打印
|
||
log.info("uart", "receive(hex)", id, #s, s:toHex())
|
||
end
|
||
until s == ""
|
||
end
|
||
-- 收取数据会触发回调, 这里的 "receive" 是固定值不要修改。
|
||
uart.on(uartid, "receive", ur_rec)
|
||
|
||
|
||
--向串口发送数据
|
||
local function uart_test()
|
||
local n = 0
|
||
while n < 10 do
|
||
sys.wait(2000)
|
||
log.info("这是第" .. n .. "次向串口发数据")
|
||
-- 写入可见字符串
|
||
--uart.write(uartid, "test data.")
|
||
-- 写入十六进制字符串
|
||
uart.write(uartid, string.char(0x55, 0xAA, 0x4B, 0x03, 0x86))
|
||
n = n + 1
|
||
sys.wait(2000)
|
||
end
|
||
end
|
||
|
||
|
||
|
||
sys.taskInit(uart_test)
|