main.lua 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "soft uart"
  3. VERSION = "1.0.0"
  4. log.info("main", PROJECT, VERSION)
  5. -- 引入必要的库文件(lua编写), 内部库不需要require
  6. sys = require("sys")
  7. if wdt then
  8. --添加硬狗防止程序卡死,在支持的设备上启用这个功能
  9. wdt.init(9000)--初始化watchdog设置为9s
  10. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  11. end
  12. log.info("main", "soft uart demo")
  13. local function resouce()
  14. local rtos_bsp = rtos.bsp()
  15. if rtos_bsp == "AIR101" then
  16. return nil,nil,nil,nil,nil,nil,nil
  17. elseif rtos_bsp == "AIR103" then
  18. return nil,nil,nil,nil,nil,nil,nil
  19. elseif rtos_bsp == "AIR105" then
  20. return pin.PA07,0,pin.PA06,1,115200,-20,-10
  21. elseif rtos_bsp == "ESP32C3" then
  22. return nil,nil,nil,nil,nil,nil,nil
  23. elseif rtos_bsp == "ESP32S3" then
  24. return nil,nil,nil,nil,nil,nil,nil
  25. elseif rtos_bsp == "EC618" then
  26. return 17,0,1,2,19200,0,-10
  27. else
  28. log.info("main", "bsp not support")
  29. return
  30. end
  31. end
  32. local tx_pin,tx_timer,rx_pin,rx_timer,br,tx_adjust,rx_adjust = resouce()
  33. local uartid = uart.createSoft(tx_pin,tx_timer,rx_pin,rx_timer,tx_adjust,rx_adjust)
  34. --初始化
  35. local result = uart.setup(
  36. uartid,--串口id
  37. br,--软件串口波特率根据平台的软硬件配置有不同的极限
  38. 8,--数据位
  39. 1,--停止位
  40. uart.ODD
  41. )
  42. --循环发数据
  43. -- sys.timerLoopStart(uart.write,1000, uartid, "test")
  44. -- 收取数据会触发回调, 这里的"receive" 是固定值
  45. uart.on(uartid, "receive", function(id, len)
  46. local s = ""
  47. repeat
  48. -- 如果是air302, len不可信, 传1024
  49. -- s = uart.read(id, 1024)
  50. s = uart.read(id, len)
  51. if #s > 0 then -- #s 是取字符串的长度
  52. -- 如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
  53. -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
  54. log.info("uart", "receive", id, #s, s:toHex())
  55. uart.write(id, s)
  56. end
  57. until s == ""
  58. end)
  59. -- 并非所有设备都支持sent事件
  60. uart.on(uartid, "sent", function(id)
  61. log.info("uart", "sent", id)
  62. end)
  63. -- 用户代码已结束---------------------------------------------
  64. -- 结尾总是这一句
  65. sys.run()
  66. -- sys.run()之后后面不要加任何语句!!!!!