pins_dynamic.lua 3.7 KB

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