pins_dynamic.lua 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. --[[
  2. @module pins_dynamic
  3. @summary pins_dynamic测试功能模块
  4. @version 1.0
  5. @date 2025.10.15
  6. @author 马亚丹
  7. @usage
  8. 本demo演示的功能为:使用Air8000核心板,演示动态修改管脚复用功能
  9. 核心逻辑:
  10. 1.加载自定义的管脚配置文件my.json配置管脚功能
  11. 该文件中
  12. pin41脚配置为SPI1_CS,
  13. pin40脚配置为SPI1_MOSI
  14. 2.通过pins.setup接口动态修改管脚复用功能,
  15. 这里演示
  16. pin41脚由原SPI1_CS功能复用为UART2_RX,
  17. pin40脚由原SPI1_MOSI功能复用为UART2_TX
  18. 3.演示重新配置的串口管脚的功能,通过串口工具收发数据。
  19. ]]
  20. --如果需要debug,在任何需要的地方添加这一行
  21. --log.info ("打开debug",pins.debug(true))
  22. --如果打开debug后需要关闭debug,在任何需要的地方添加这一行
  23. --log.info ("打开debug",pins.debug(false))
  24. --烧录多个.json文件时以最后一个文件的配置初始化所有io引脚功能
  25. --自定义配置文件要通过pins.loadjson加载
  26. --如果烧录了pins_Air8000.json,在内核固件运行时,已经自动加载pins_Air8000.json,并且按照pins_Air8000.json的配置初始化所有io引脚功能,
  27. --此处再加载my.json文件,会覆盖pins_Air8000.json中配置的所有io引脚功能,按照my.json的配置再次初始化所有io引脚功能
  28. --my.json文件中pin41脚配置为SPI1_CS,pin40脚配置为SPI1_MOSI
  29. log.info ("加载自定义的配置文件",pins.loadjson("/luadb/my.json"))
  30. --=======配置管脚复用=========--
  31. local r1=pins.setup(41, "UART2_RX")
  32. log.info ("配置pin41脚即SPI1_CS为UART2_RX",r1)
  33. local r2=pins.setup(40, "UART2_TX")
  34. log.info ("配置pin40脚即SPI1_MOSI为UART2_TX",r2)
  35. --========验证复用的管脚的功能=========--
  36. local uartid = 2
  37. --初始化 参数都可以根据实施情况修改
  38. uart.setup(
  39. --串口id
  40. uartid,
  41. --波特率
  42. 115200,
  43. 8, --数据位
  44. 1 --停止位
  45. )
  46. log.info("uart", "uart2重新配置完成")
  47. local function ur_rec(id, len)
  48. local s = ""
  49. repeat
  50. s = uart.read(id, 128)
  51. -- #s 是取字符串的长度
  52. if #s > 0 then
  53. -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
  54. log.info("uart", "receive", id, #s, s)
  55. -- 如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到,可以用以hex格式打印
  56. log.info("uart", "receive(hex)", id, #s, s:toHex())
  57. end
  58. until s == ""
  59. end
  60. -- 收取数据会触发回调, 这里的 "receive" 是固定值不要修改。
  61. uart.on(uartid, "receive", ur_rec)
  62. --向串口发送数据
  63. local function uart_test()
  64. local n = 0
  65. while n < 10 do
  66. sys.wait(2000)
  67. log.info("这是第" .. n .. "次向串口发数据")
  68. -- 写入可见字符串
  69. --uart.write(uartid, "test data.")
  70. -- 写入十六进制字符串
  71. uart.write(uartid, string.char(0x55, 0xAA, 0x4B, 0x03, 0x86))
  72. n = n + 1
  73. sys.wait(2000)
  74. end
  75. end
  76. sys.taskInit(uart_test)