Files
mobile_comm/luatos/air780epm/module/Air780EPM/demo/pins/pins_dynamic.lua
T
wangfq 173dd6874f init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码
- 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等)
- 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
2026-08-31 08:53:49 +08:00

127 lines
3.7 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
--[[
@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)