Sfoglia il codice sorgente

add:新增780EPM-pins-demo

马亚丹 4 mesi fa
parent
commit
d70d6ce20e

+ 81 - 0
module/Air780EPM/demo/pins/main.lua

@@ -0,0 +1,81 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑 
+@version 001.000.000
+@date    2025.10.15
+@author  马亚丹
+@usage
+本demo是演示合宙pins核心库接口功能,
+通过pins核心库设置模组管脚功能,
+在main.lua中加载以下两个文件其一,按自己的需求选择即可,另外一个注释。
+1.pins_default :功能应用模块 ,演示加载pins_AirXXX.json以及串口数据收发功能,详细逻辑请看pins_default.lua 文件
+2.pins_dynamic 功能应用模块,演示加载my.json、pins.setup动态配置、串口数据收发功能, 详细逻辑请看pins_dynamic.lua 文件
+
+]]
+
+
+--[[
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
+]]
+PROJECT = "Air780EPM_pins"
+VERSION = "001.000.000"
+
+
+-- 在日志中打印项目名和项目版本号
+log.info("main", PROJECT, VERSION)
+
+
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
+end
+
+
+-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
+-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
+-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
+-- 启动errDump日志存储并且上传功能,600秒上传一次
+-- if errDump then
+--     errDump.config(true, 600)
+-- end
+
+
+-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
+-- 可以使用合宙的iot.openluat.com平台进行远程升级
+-- 也可以使用客户自己搭建的平台进行远程升级
+-- 远程升级的详细用法,可以参考fota的demo进行使用
+
+
+-- 启动一个循环定时器
+-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
+-- 方便分析内存使用是否有异常
+-- sys.timerLoopStart(function()
+--     log.info("mem.lua", rtos.meminfo())
+--     log.info("mem.sys", rtos.meminfo("sys"))
+-- end, 3000)
+
+
+
+
+
+--加载"pins_default"功能模块
+-- require"pins_default"
+
+--加载"pins_dynamic"功能模块
+require"pins_dynamic"
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行

+ 52 - 0
module/Air780EPM/demo/pins/my.json

@@ -0,0 +1,52 @@
+{
+  "model": "Air780EHM",
+  "pins": [
+    [7, "PWR_KEY", ""],
+    [16, "GPIO27", ""],
+    [17, "UART1_RXD", ""],
+    [18, "UART1_TXD", ""],
+    [19, "GPIO22", ""],
+    [20, "PWM1", ""],
+    [22, "PWM0", ""],
+    [23, "ONEWIRE", ""],
+    [25, "CAN_TXD", ""],
+    [26, "PWM4", ""],
+    [28, "UART2_RXD", ""],
+    [29, "UART2_TXD", ""],
+    [30, "GPIO29", ""],
+    [31, "GPIO30", ""],
+    [32, "GPIO31", ""],
+    [33, "GPIO32", ""],
+    [38, "DBG_RXD", ""],
+    [39, "DBG_TXD", ""],
+    [49, "LCD_RST", ""],
+    [50, "LCD_SDA", ""],
+    [51, "LCD_RS", ""],
+    [52, "LCD_CS", ""],
+    [53, "LCD_CLK", ""],
+    [54, "CAM_MCLK", ""],
+    [55, "CAM_RX0", ""],
+    [56, "CAM_RX1", ""],
+    [57, "UART3_TXD", ""],
+    [58, "UART3_RXD", ""],
+    [61, "VBUS", ""],
+    [66, "I2C1_SDA", ""],
+    [67, "I2C1_SCL", ""],
+    [78, "GPIO28", ""],
+    [79, "USIM_DET", ""],
+    [80, "CAM_BCLK", ""],
+    [81, "CAM_CS", ""],
+    [82, "USB_BOOT", ""],
+    [83, "SPI0_CS", ""],
+    [84, "SPI0_MISO", ""],
+    [85, "SPI0_MOSI", ""],
+    [86, "SPI0_CLK", ""],
+    [97, "GPIO16", ""],
+    [99, "GPIO23", ""],
+    [100, "GPIO17", ""],
+    [101, "WAKEUP0", ""],
+    [102, "GPIO20", ""],
+    [106, "CAN_RXD", ""],
+    [107, "GPIO21", ""]
+  ]
+}

+ 52 - 0
module/Air780EPM/demo/pins/pins_Air780EPM.json

@@ -0,0 +1,52 @@
+{
+  "model": "Air780EPM",
+  "pins": [
+    [7, "PWR_KEY", ""],
+    [16, "GPIO27", ""],
+    [17, "UART1_RXD", ""],
+    [18, "UART1_TXD", ""],
+    [19, "GPIO22", ""],
+    [20, "PWM1", ""],
+    [22, "PWM0", ""],
+    [23, "ONEWIRE", ""],
+    [25, "CAN_TXD", ""],
+    [26, "PWM4", ""],
+    [28, "UART2_RXD", ""],
+    [29, "UART2_TXD", ""],
+    [30, "GPIO29", ""],
+    [31, "GPIO30", ""],
+    [32, "GPIO31", ""],
+    [33, "GPIO32", ""],
+    [38, "DBG_RXD", ""],
+    [39, "DBG_TXD", ""],
+    [49, "LCD_RST", ""],
+    [50, "LCD_SDA", ""],
+    [51, "LCD_RS", ""],
+    [52, "LCD_CS", ""],
+    [53, "LCD_CLK", ""],
+    [54, "CAM_MCLK", ""],
+    [55, "CAM_RX0", ""],
+    [56, "CAM_RX1", ""],
+    [57, "UART3_TXD", ""],
+    [58, "UART3_RXD", ""],
+    [61, "VBUS", ""],
+    [66, "I2C1_SDA", ""],
+    [67, "I2C1_SCL", ""],
+    [78, "GPIO28", ""],
+    [79, "USIM_DET", ""],
+    [80, "CAM_BCLK", ""],
+    [81, "CAM_CS", ""],
+    [82, "USB_BOOT", ""],
+    [83, "SPI0_CS", ""],
+    [84, "SPI0_MISO", ""],
+    [85, "SPI0_MOSI", ""],
+    [86, "SPI0_CLK", ""],
+    [97, "GPIO16", ""],
+    [99, "GPIO23", ""],
+    [100, "GPIO17", ""],
+    [101, "WAKEUP0", ""],
+    [102, "GPIO20", ""],
+    [106, "CAN_RXD", ""],
+    [107, "GPIO21", ""]
+  ]
+}

+ 91 - 0
module/Air780EPM/demo/pins/pins_default.lua

@@ -0,0 +1,91 @@
+--[[
+@module  pins_default
+@summary pins_default测试功能模块
+@version 1.0
+@date    2025.10.15
+@author  马亚丹
+@usage
+本demo演示的功能为:使用Air780EPM核心板,演示动态修改管脚复用功能
+核心逻辑:
+1.烧录管脚配置文件pins_Air780EPM.json配置管脚功能
+
+2.烧录pins_Air780EPM.json前,
+pin28默认功能是UART2_RXD
+pin29默认功能是UART2_TXD
+pin55默认功能是CAM_RX0
+pin56默认功能是CAM_RX1
+
+烧录了pins_Air780EPM.json后,在内核固件运行时,已经自动加载pins_Air780EPM.json,并且按照pins_Air780EPM.json的配置初始化所有io引脚功能,
+文件中把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))
+
+
+
+
+
+
+
+--========验证复用的管脚的功能=========--
+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)

+ 126 - 0
module/Air780EPM/demo/pins/pins_dynamic.lua

@@ -0,0 +1,126 @@
+--[[
+@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)

+ 235 - 0
module/Air780EPM/demo/pins/readme.md

@@ -0,0 +1,235 @@
+## 功能模块介绍:
+
+1、main.lua:主程序入口。
+
+2、my.json:   自定义管脚配置示例文件,用于演示 pins.loadjson(path)接口加载自定义管脚配置文件的功能,该文件手动编写容易出错,建议使用合宙LuatIO可视化工具 [LuatIO初始化配置工具 ](https://docs.openluat.com/air780epm/common/luatio/)自动生成。
+
+3、pins_Air780EPM.json: Air780EPM核心板管脚配置示例文件,底层自动加载该文件完成管脚配置,使用合宙LuatIO可视化工具自动生成。
+
+4、pins_default.lua:功能演示模块,在main.lua中加载运行。
+
+5、pins_dynamic.lua:功能演示模块,在main.lua中加载运行。
+
+## 演示功能概述:
+
+**pins_default.lua:**
+
+1.烧录管脚配置文件pins_Air780EPM.json配置管脚功能
+
+
+
+2.烧录pins_Air780EPM.json前,
+
+pin28默认功能是UART2_RXD
+
+pin29默认功能是UART2_TXD
+
+pin55默认功能是CAM_RX0
+
+pin56默认功能是CAM_RX1
+
+
+
+烧录了pins_Air780EPM.json后,在内核固件运行时,已经自动加载pins_Air780EPM.json,并且按照pins_Air780EPM.json的配置初始化所有io引脚功能,
+
+文件中把pin28由原UART2_RXD功能配置为GPIO12,
+
+pin29由原UART2_TXD功能配置为GPIO13,
+
+pin55由原CAM_RX0功能配置为UART2_RXD,
+
+pin56由原CAM_RX1功能配置为UART2_TXD,
+
+
+
+3.演示重新配置的串口管脚的功能,通过串口工具收发数据。
+
+
+
+**pins_dynamic.lua:**
+
+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.演示重新配置的串口管脚的功能,通过串口工具收发数据。
+
+
+
+## 演示硬件环境
+
+![netdrv_multi](https://docs.openluat.com/air780epm/image/780EHM.png)
+
+
+
+1、Air780EPM核心板一块
+
+2、TYPE-C USB数据线一根 ,Air780EPM核心板和数据线的硬件接线方式为:
+
+* Air780EPM核心板通过TYPE-C USB口供电;(外部供电/USB供电 拨动开关 拨到 USB供电一端)
+
+* TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口。 
+
+3、USB转TTL串口线一根,串口线usb口连接电脑USB口,Air780EPM核心板和串口线,按以下方式接线:
+
+| Air780EPM核心板  | 串口线     |
+| ------------- | ------- |
+| pin55/CAM_RX0 | uart_tx |
+| pin56/CAM_RX1 | uart_rx |
+| GND           | GND     |
+
+
+
+## 演示软件环境
+
+1、 Luatools下载调试工具
+
+2、 固件版本:LuatOS-SoC_V2016_Air780EPM_1,固件地址,如有最新固件请用最新 [https://docs.openluat.com/Air780EPM/luatos/firmware/]([固件版本 - luatos@air780epm - 合宙模组资料中心](https://docs.openluat.com/air780epm/luatos/firmware/version/))
+
+
+
+3、 脚本文件:
+    main.lua
+
+
+
+   pins_default.lua
+
+   pins_dynamic.lua
+
+
+
+   my.json
+
+
+
+   pins_Air780EPM.json
+
+  
+
+4、 pc 系统 win11(win10 及以上)
+
+5、sscom串口工具
+
+
+
+## 演示核心步骤
+
+1、搭建好硬件环境
+
+2、main.lua中,加载pins_default.lua或者pins_dynamic.lua
+
+3、Luatools烧录内核固件和修改后的demo脚本代码
+
+4、烧录成功后,代码会自动运行,查看打印日志,如果正常运行,会打印加载配置文件,配置管脚,以及配置完成后向串口发消息,通过SSCOM串口工具查看串口收到的消息,SSCOM也可以向模组发送消息进行交互。
+
+如下log显示使用pins_dynamic功能模块:其中 I/user.uart receive日志是串口工具向模组发数据,模组收到数据触发打印,
+
+图片中蓝框是SSCOM串口工具收到模组发来的消息,红框是模组收到SSCOM串口工具发来的消息。
+
+```
+[2025-11-10 10:47:00.089][000000000.233] D/pins /luadb/pins_Air780EPM.json 加载和配置完成
+[2025-11-10 10:47:00.100][000000000.237] D/main loadlibs luavm 4194296 16096 16096
+[2025-11-10 10:47:00.105][000000000.237] D/main loadlibs sys   3211688 104004 113640
+[2025-11-10 10:47:00.110][000000000.237] D/main loadlibs psram 3211688 104112 113640
+[2025-11-10 10:47:00.117][000000000.256] I/user.main Air780EPM_pins 001.000.000
+[2025-11-10 10:47:00.124][000000000.269] I/user.加载自定义的配置文件 true 0
+[2025-11-10 10:47:00.130][000000000.269] I/user.uart 重新配置uart2到新管脚
+[2025-11-10 10:47:00.135][000000000.269] Uart_TxStop 1180:uart2,br 0
+[2025-11-10 10:47:00.142][000000000.269] I/user.配置pin28脚即UART2_RXD为GPIO12 true
+[2025-11-10 10:47:00.149][000000000.270] I/user.配置pin29脚即UART2_TXD为GPIO13 true
+[2025-11-10 10:47:00.157][000000000.270] I/user.配置pin55脚即CAM_RX0为UART2_RXD true
+[2025-11-10 10:47:00.162][000000000.270] I/user.配置pin56脚即CAM_RX1为UART2_TXD true
+[2025-11-10 10:47:00.166][000000000.270] Uart_ChangeBR 1338:uart2, 115200 115203 26000000 3611
+[2025-11-10 10:47:00.172][000000000.271] I/user.uart uart2重新配置完成
+[2025-11-10 10:47:01.559][000000002.272] I/user.这是第0次向串口发数据
+[2025-11-10 10:47:05.565][000000006.272] I/user.这是第1次向串口发数据
+[2025-11-10 10:47:09.558][000000010.272] I/user.这是第2次向串口发数据
+[2025-11-10 10:47:13.556][000000014.272] I/user.这是第3次向串口发数据
+[2025-11-10 10:47:15.206][000000015.917] I/user.uart receive 2 11 123456789
+
+[2025-11-10 10:47:15.214][000000015.918] I/user.uart receive(hex) 2 11 3132333435363738390D0A 22
+[2025-11-10 10:47:16.336][000000017.042] I/user.uart receive 2 11 123456789
+
+[2025-11-10 10:47:16.348][000000017.043] I/user.uart receive(hex) 2 11 3132333435363738390D0A 22
+[2025-11-10 10:47:17.561][000000018.272] I/user.这是第4次向串口发数据
+[2025-11-10 10:47:21.565][000000022.272] I/user.这是第5次向串口发数据
+[2025-11-10 10:47:25.561][000000026.272] I/user.这是第6次向串口发数据
+[2025-11-10 10:47:29.564][000000030.272] I/user.这是第7次向串口发数据
+[2025-11-10 10:47:33.559][000000034.272] I/user.这是第8次向串口发数据
+[2025-11-10 10:47:37.565][000000038.272] I/user.这是第9次向串口发数据
+
+
+
+```
+
+![](https://docs.openluat.com/air780epm/image/sscom.jpg)
+
+如下log显示使用pins_default功能模块:其中 I/user.uart receive日志是串口工具向模组发数据,模组收到数据触发打印,
+
+图片中蓝框是SSCOM串口工具收到模组发来的消息,红框是模组收到SSCOM串口工具发来的消息。
+
+```
+[2025-11-10 10:56:02.315][000000000.233] D/pins /luadb/pins_Air780EPM.json 加载和配置完成
+[2025-11-10 10:56:02.321][000000000.236] D/main loadlibs luavm 4194296 16096 16096
+[2025-11-10 10:56:02.328][000000000.236] D/main loadlibs sys   3211688 104004 113640
+[2025-11-10 10:56:02.332][000000000.236] D/main loadlibs psram 3211688 104112 113640
+[2025-11-10 10:56:02.339][000000000.256] I/user.main Air780EPM_pins 001.000.000
+[2025-11-10 10:56:02.344][000000000.262] Uart_ChangeBR 1338:uart2, 115200 115203 26000000 3611
+[2025-11-10 10:56:02.347][000000000.262] I/user.uart uart2配置完成
+[2025-11-10 10:56:03.889][000000002.262] I/user.这是第0次向串口发数据
+[2025-11-10 10:56:07.880][000000006.263] I/user.这是第1次向串口发数据
+[2025-11-10 10:56:11.881][000000010.263] I/user.这是第2次向串口发数据
+[2025-11-10 10:56:15.893][000000014.263] I/user.这是第3次向串口发数据
+[2025-11-10 10:56:19.881][000000018.263] I/user.这是第4次向串口发数据
+[2025-11-10 10:56:23.880][000000022.263] I/user.这是第5次向串口发数据
+[2025-11-10 10:56:27.881][000000026.263] I/user.这是第6次向串口发数据
+[2025-11-10 10:56:31.882][000000030.263] I/user.这是第7次向串口发数据
+[2025-11-10 10:56:35.879][000000034.263] I/user.这是第8次向串口发数据
+[2025-11-10 10:56:39.882][000000038.263] I/user.这是第9次向串口发数据
+[2025-11-10 10:57:17.518][000000075.902] I/user.uart receive 2 11 123456789
+
+[2025-11-10 10:57:17.528][000000075.902] I/user.uart receive(hex) 2 11 3132333435363738390D0A 22
+[2025-11-10 10:57:18.404][000000076.781] I/user.uart receive 2 11 123456789
+
+[2025-11-10 10:57:18.413][000000076.782] I/user.uart receive(hex) 2 11 3132333435363738390D0A 22
+
+```
+
+![](https://docs.openluat.com/air780epm/image/sscom1.jpg)