Sfoglia il codice sorgente

add:新增8000-pins-demo

马亚丹 4 mesi fa
parent
commit
dc8749634f

+ 9 - 3
module/Air8000/demo/pins/main.lua

@@ -6,7 +6,10 @@
 @author  马亚丹
 @usage
 本demo是演示合宙pins核心库接口功能,
-通过pins核心库设置模组管脚功能,详细逻辑请看pins_test.lua 文件
+通过pins核心库设置模组管脚功能,
+在main.lua中加载以下两个文件其一,按自己的需求选择即可,另外一个注释。
+1.pins_default :功能应用模块 ,演示加载pins_AirXXX.json以及串口数据收发功能,详细逻辑请看pins_default.lua 文件
+2.pins_dynamic 功能应用模块,演示加载my.json、pins.setup动态配置、串口数据收发功能, 详细逻辑请看pins_dynamic.lua 文件
 
 ]]
 
@@ -66,8 +69,11 @@ end
 
 
 
---加载"pins_test"功能模块
-require"pins_test"
+--加载"pins_default"功能模块
+-- require"pins_default"
+
+--加载"pins_dynamic"功能模块
+require"pins_dynamic"
 
 -- 用户代码已结束---------------------------------------------
 -- 结尾总是这一句

+ 93 - 0
module/Air8000/demo/pins/pins_default.lua

@@ -0,0 +1,93 @@
+--[[
+@module  pins_default
+@summary pins_default测试功能模块
+@version 1.0
+@date    2025.10.15
+@author  马亚丹
+@usage
+本demo演示的功能为:使用Air8000核心板,演示动态修改管脚复用功能
+核心逻辑:
+1.烧录管脚配置文件luadb/pins_Air8000.json配置管脚功能
+
+2.烧录pins_Air8000.json之前,
+pin41脚默认功能是SPI1_CS,
+pin40脚默认功能是SPI1_MOSI,
+
+烧录了pins_Air8000.json后,在内核固件运行时,自动加载pins_Air8000.json,并且按照pins_Air8000.json的配置初始化所有io引脚功能,
+该文件中把
+pin41脚即原SPI1_CS功能配置为UART2_RX,
+pin40脚即原SPI1_MOSI功能配置为UART2_TX,
+
+即烧录pins_Air8000.json文件后,
+pin41脚功能为UART2_RX,
+pin40脚功能为UART2_TX
+
+3.演示重新配置的串口管脚的功能,通过串口工具收发数据。
+
+
+
+]]
+
+
+--如果需要debug,在任何需要的地方添加这一行
+--log.info ("打开debug",pins.debug(true))
+
+--如果打开debug后需要关闭debug,在任何需要的地方添加这一行
+--log.info ("打开debug",pins.debug(false))
+
+--如果烧录了pins_Air8000.json,在内核固件运行时,会自动加载pins_Air8000.json,并且按照pins_Air8000.json的配置初始化所有io引脚功能,
+-- 其中 $model是模组型号, 例如 Air8000, 默认加载的是 luadb/pins_Air8000.json,其他格式的不会自动加载
+
+
+
+
+
+--========验证复用的管脚的功能=========--
+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)

+ 97 - 0
module/Air8000/demo/pins/pins_dynamic.lua

@@ -0,0 +1,97 @@
+--[[
+@module  pins_dynamic
+@summary pins_dynamic测试功能模块
+@version 1.0
+@date    2025.10.15
+@author  马亚丹
+@usage
+本demo演示的功能为:使用Air8000核心板,演示动态修改管脚复用功能
+核心逻辑:
+1.加载自定义的管脚配置文件my.json配置管脚功能
+该文件中
+pin41脚配置为SPI1_CS,
+pin40脚配置为SPI1_MOSI
+
+2.通过pins.setup接口动态修改管脚复用功能,
+
+这里演示
+pin41脚由原SPI1_CS功能复用为UART2_RX,
+pin40脚由原SPI1_MOSI功能复用为UART2_TX
+
+3.演示重新配置的串口管脚的功能,通过串口工具收发数据。
+
+
+]]
+
+
+--如果需要debug,在任何需要的地方添加这一行
+--log.info ("打开debug",pins.debug(true))
+
+--如果打开debug后需要关闭debug,在任何需要的地方添加这一行
+--log.info ("打开debug",pins.debug(false))
+
+
+--烧录多个.json文件时以最后一个文件的配置初始化所有io引脚功能
+--自定义配置文件要通过pins.loadjson加载
+--如果烧录了pins_Air8000.json,在内核固件运行时,已经自动加载pins_Air8000.json,并且按照pins_Air8000.json的配置初始化所有io引脚功能,
+--此处再加载my.json文件,会覆盖pins_Air8000.json中配置的所有io引脚功能,按照my.json的配置再次初始化所有io引脚功能
+--my.json文件中pin41脚配置为SPI1_CS,pin40脚配置为SPI1_MOSI
+log.info ("加载自定义的配置文件",pins.loadjson("/luadb/my.json"))
+
+--=======配置管脚复用=========--
+local r1=pins.setup(41, "UART2_RX")
+log.info ("配置pin41脚即SPI1_CS为UART2_RX",r1)
+local r2=pins.setup(40, "UART2_TX")
+log.info ("配置pin40脚即SPI1_MOSI为UART2_TX",r2)
+
+
+
+--========验证复用的管脚的功能=========--
+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)

+ 139 - 46
module/Air8000/demo/pins/readme.md

@@ -1,20 +1,76 @@
 ## 功能模块介绍:
 
-1、main.lua:主程序入口
+1、main.lua:主程序入口
 
-2、pins_test.lua:   功能演示核心脚本,动态修改管脚复用功能,演示复用后的管脚的功能等,在main.lua中加载运行;
+2、my.json:   自定义管脚配置示例文件,用于演示 pins.loadjson(path)接口加载自定义管脚配置文件的功能,该文件手动编写容易出错,建议使用合宙LuatIO可视化工具 [LuatIO初始化配置工具 ](https://docs.openluat.com/air780epm/common/luatio/)自动生成。
 
-3、my.json:   管脚配置示例文件,用于演示 pins.loadjson(path)接口加载自定义管脚配置文件的功能,该文件手动编写容易出错,建议使用合宙LuatIO可视化工具 [LuatIO初始化配置工具 ](https://docs.openluat.com/air780epm/common/luatio/)自动生成;
+3、pins_Air8000.json: Air8000核心板管脚配置示例文件,底层自动加载该文件完成管脚配置,使用合宙LuatIO可视化工具自动生成。
 
-4、pins_Air8000.json: 管脚配置示例文件,用于演示 pins.loadjson(path)接口加载自定义管脚配置文件的功能,或者底层自动加载该文件,使用合宙LuatIO可视化工具自动生成。
+4、pins_default.lua:功能演示模块,在main.lua中加载运行。
+
+5、pins_dynamic.lua:功能演示模块,在main.lua中加载运行。
 
 ## 演示功能概述:
 
-1.加载管脚配置文件,初始化所有io引脚功能;
+**pins_default.lua:**
+
+1.烧录管脚配置文件luadb/pins_Air8000.json配置管脚功能
+
+
+
+2.烧录pins_Air8000.json之前,
+
+pin41脚默认功能是SPI1_CS,
+
+pin40脚默认功能是SPI1_MOSI,
+
+
+
+烧录了pins_Air8000.json后,在内核固件运行时,自动加载pins_Air8000.json,并且按照pins_Air8000.json的配置初始化所有io引脚功能,
+
+该文件中把
+
+pin41脚即原SPI1_CS功能配置为UART2_RX,
+
+pin40脚即原SPI1_MOSI功能配置为UART2_TX,
+
+
+
+即烧录pins_Air8000.json文件后,
+
+pin41脚功能为UART2_RX,
+
+pin40脚功能为UART2_TX
+
+
+
+3.演示重新配置的串口管脚的功能,通过串口工具收发数据。
+
+
+
+**pins_dynamic.lua:**
+
+1.加载自定义的管脚配置文件my.json配置管脚功能
 
-2.动态修改管脚复用功能,这里演示SPI管脚pin41脚即SPI1_CS复用为UART2_RX,pin40脚即SPI1_MOSI复用为UART2_TX;
+该文件中
 
-3.演示复用的串口管脚的功能,通过串口工具收发数据。
+pin41脚配置为SPI1_CS,
+
+pin40脚配置为SPI1_MOSI
+
+
+
+2.通过pins.setup接口动态修改管脚复用功能,
+
+这里演示
+
+pin41脚由原SPI1_CS功能复用为UART2_RX,
+
+pin40脚由原SPI1_MOSI功能复用为UART2_TX
+
+
+
+3.演示重新配置的串口管脚的功能,通过串口工具收发数据。
 
 
 
@@ -34,11 +90,11 @@
 
 3、USB转TTL串口线一根,串口线usb口连接电脑USB口,Air8000核心板和串口线,按以下方式接线:
 
-| Air8000核心板 | 串口线     |
-| ---------- | ------- |
-| SPI1_CS    | uart_tx |
-| SPI1_MOSI  | uart_rx |
-| GND        | GND     |
+| Air8000核心板      | 串口线     |
+| --------------- | ------- |
+| pin40/SPI1_MOSI | uart_rx |
+| pin41/SPI1_CS   | uart_tx |
+| GND             | GND     |
 
 
 
@@ -53,13 +109,13 @@
 
 
 
-   pins_test.lua
+   pins_default.lua
 
+   pins_dynamic.lua
 
 
-   my.json
-
 
+   my.json
 
    pins_Air8000.json
 
@@ -73,45 +129,82 @@
 
 1、搭建好硬件环境
 
-2、demo脚本文件pins_test.lua中,设置了方式1和方式2两种加载管脚配置文件的方式,方式1在pins_Air8000.json文件中,pin40配置为UART2_TXD,pin41配置为UART2_RXD,
-
-方式2在my.json文件中pin40配置为SPI1_MOSI,pin41配置为SPI1_CS,通过脚本中配置管脚复用的两行代码将这两个脚配置为UART2使用。
-
-按照自己的需求选择其一,脚本中默认是方式2:加载my.json自定义管脚配置文件。
+2、main.lua中,加载pins_default.lua或者pins_dynamic.lua
 
 3、Luatools烧录内核固件和修改后的demo脚本代码
 
 4、烧录成功后,代码会自动运行,查看打印日志,如果正常运行,会打印加载配置文件,配置管脚,以及配置完成后向串口发消息,通过SSCOM串口工具查看串口收到的消息,SSCOM也可以向模组发送消息进行交互。
 
-如下log显示:其中 I/user.uart receive日志是串口工具向模组发数据,模组收到数据触发打印,
+如下log显示使用pins_dynamic功能模块:其中 I/user.uart receive日志是串口工具向模组发数据,模组收到数据触发打印,
+
+图片中蓝框是SSCOM串口工具收到模组发来的消息,红框是模组收到SSCOM串口工具发来的消息。
+
+```
+[2025-11-10 11:27:14.025][000000000.610] I/user.main Air8000_pins 001.000.000
+[2025-11-10 11:27:14.041][000000000.623] E/pins _STB不是可配置的外设功能
+[2025-11-10 11:27:14.054][000000000.623] W/pins pins 35 CAN_STB setup failed
+[2025-11-10 11:27:14.068][000000000.626] I/user.加载自定义的配置文件 true 0
+[2025-11-10 11:27:14.083][000000000.627] I/user.配置pin41脚即SPI1_CS为UART2_RX true
+[2025-11-10 11:27:14.101][000000000.627] I/user.配置pin40脚即SPI1_MOSI为UART2_TX true
+[2025-11-10 11:27:14.113][000000000.627] Uart_ChangeBR 1338:uart2, 115200 115203 26000000 3611
+[2025-11-10 11:27:14.123][000000000.628] I/user.uart uart2重新配置完成
+[2025-11-10 11:27:14.493][000000001.474] D/mobile cid1, state0
+[2025-11-10 11:27:14.510][000000001.475] D/mobile bearer act 0, result 0
+[2025-11-10 11:27:14.529][000000001.475] D/mobile NETIF_LINK_ON -> IP_READY
+[2025-11-10 11:27:14.545][000000001.495] D/mobile TIME_SYNC 0
+[2025-11-10 11:27:15.573][000000002.628] I/user.这是第0次向串口发数据
+[2025-11-10 11:27:19.582][000000006.629] I/user.这是第1次向串口发数据
+[2025-11-10 11:27:23.579][000000010.630] I/user.这是第2次向串口发数据
+[2025-11-10 11:27:27.580][000000014.630] I/user.这是第3次向串口发数据
+[2025-11-10 11:27:31.581][000000018.631] I/user.这是第4次向串口发数据
+[2025-11-10 11:27:32.143][000000019.196] I/user.uart receive 2 11 123456789
+
+[2025-11-10 11:27:32.150][000000019.196] I/user.uart receive(hex) 2 11 3132333435363738390D0A 22
+[2025-11-10 11:27:33.165][000000020.207] I/user.uart receive 2 11 123456789
+
+[2025-11-10 11:27:33.179][000000020.207] I/user.uart receive(hex) 2 11 3132333435363738390D0A 22
+[2025-11-10 11:27:35.587][000000022.632] I/user.这是第5次向串口发数据
+[2025-11-10 11:27:39.587][000000026.633] I/user.这是第6次向串口发数据
+[2025-11-10 11:27:43.592][000000030.634] I/user.这是第7次向串口发数据
+[2025-11-10 11:27:47.596][000000034.635] I/user.这是第8次向串口发数据
+[2025-11-10 11:27:51.594][000000038.636] I/user.这是第9次向串口发数据
+
 
-图片中红框是SSCOM串口工具收到模组发来的消息,蓝框是模组收到SSCOM串口工具发来的消息。
 
 ```
-[2025-10-28 13:18:00.720][000000000.360] I/user.main Air8000_pins 001.000.000
-[2025-10-28 13:18:00.726][000000000.376] E/pins _STB不是可配置的外设功能
-[2025-10-28 13:18:00.730][000000000.376] W/pins pins 35 CAN_STB setup failed
-[2025-10-28 13:18:00.734][000000000.384] I/user.加载自定义的配置文件 true 0
-[2025-10-28 13:18:00.739][000000000.385] I/user.配置pin41脚即SPI1_CS为UART2_RX true
-[2025-10-28 13:18:00.743][000000000.385] I/user.配置pin40脚即SPI1_MOSI为UART2_TX true
-[2025-10-28 13:18:00.748][000000000.385] Uart_ChangeBR 1338:uart2, 115200 115203 26000000 3611
-[2025-10-28 13:18:02.418][000000002.386] I/user.这是第0次向串口发数据
-[2025-10-28 13:18:06.419][000000006.387] I/user.这是第1次向串口发数据
-[2025-10-28 13:18:07.776][000000007.752] I/user.uart receive 2 11 123456789
-
-[2025-10-28 13:18:07.784][000000007.753] I/user.uart receive(hex) 2 11 3132333435363738390D0A 22
-[2025-10-28 13:18:10.424][000000010.387] I/user.这是第2次向串口发数据
-[2025-10-28 13:18:14.408][000000014.387] I/user.这是第3次向串口发数据
-[2025-10-28 13:18:16.289][000000016.264] I/user.uart receive 2 11 123456789
-
-[2025-10-28 13:18:16.295][000000016.265] I/user.uart receive(hex) 2 11 3132333435363738390D0A 22
-[2025-10-28 13:18:18.423][000000018.387] I/user.这是第4次向串口发数据
-[2025-10-28 13:18:22.420][000000022.387] I/user.这是第5次向串口发数据
-[2025-10-28 13:18:26.414][000000026.387] I/user.这是第6次向串口发数据
-[2025-10-28 13:18:30.418][000000030.387] I/user.这是第7次向串口发数据
-[2025-10-28 13:18:34.416][000000034.387] I/user.这是第8次向串口发数据
-[2025-10-28 13:18:38.409][000000038.387] I/user.这是第9次向串口发数据
+
+![](https://docs.openluat.com/air8000/product/image/sscom.jpg)
+
+如下log显示使用pins_default功能模块:其中 I/user.uart receive日志是串口工具向模组发数据,模组收到数据触发打印,
+
+图片中蓝框是SSCOM串口工具收到模组发来的消息,红框是模组收到SSCOM串口工具发来的消息。
+
+```
+[2025-11-10 11:34:24.566][000000000.377] I/user.main Air8000_pins 001.000.000
+[2025-11-10 11:34:24.575][000000000.387] Uart_ChangeBR 1338:uart2, 115200 115203 26000000 3611
+[2025-11-10 11:34:24.584][000000000.388] I/user.uart uart2配置完成
+[2025-11-10 11:34:26.078][000000002.394] I/user.这是第0次向串口发数据
+[2025-11-10 11:34:26.083][000000002.395] D/mobile cid1, state0
+[2025-11-10 11:34:26.086][000000002.396] D/mobile bearer act 0, result 0
+[2025-11-10 11:34:26.092][000000002.396] D/mobile NETIF_LINK_ON -> IP_READY
+[2025-11-10 11:34:26.099][000000002.454] D/mobile TIME_SYNC 0
+[2025-11-10 11:34:30.047][000000006.395] I/user.这是第1次向串口发数据
+[2025-11-10 11:34:34.045][000000010.396] I/user.这是第2次向串口发数据
+[2025-11-10 11:34:38.038][000000014.397] I/user.这是第3次向串口发数据
+[2025-11-10 11:34:40.566][000000016.927] I/user.uart receive 2 11 123456789
+
+[2025-11-10 11:34:40.576][000000016.927] I/user.uart receive(hex) 2 11 3132333435363738390D0A 22
+[2025-11-10 11:34:42.044][000000018.397] I/user.这是第4次向串口发数据
+[2025-11-10 11:34:42.568][000000018.929] I/user.uart receive 2 11 123456789
+
+[2025-11-10 11:34:42.575][000000018.929] I/user.uart receive(hex) 2 11 3132333435363738390D0A 22
+[2025-11-10 11:34:46.046][000000022.398] I/user.这是第5次向串口发数据
+[2025-11-10 11:34:50.044][000000026.399] I/user.这是第6次向串口发数据
+[2025-11-10 11:34:54.041][000000030.400] I/user.这是第7次向串口发数据
+[2025-11-10 11:34:58.055][000000034.401] I/user.这是第8次向串口发数据
+[2025-11-10 11:35:02.050][000000038.402] I/user.这是第9次向串口发数据
+
 
 ```
 
-![](https://docs.openluat.com/air8000//luatos/image/8000-pins.jpg)
+![](https://docs.openluat.com/air8000/product/image/sscom1.jpg)