main.lua 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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,-1
  27. elseif string.find(rtos_bsp,"EC718")then
  28. return 2,0,3,2,9600,0,0
  29. else
  30. log.info("main", "bsp not support")
  31. return
  32. end
  33. end
  34. local tx_pin,tx_timer,rx_pin,rx_timer,br,tx_adjust,rx_adjust = resouce()
  35. local uartid = uart.createSoft(tx_pin,tx_timer,rx_pin,rx_timer,tx_adjust,rx_adjust)
  36. --初始化
  37. local result = uart.setup(
  38. uartid,--串口id
  39. br,--软件串口波特率根据平台的软硬件配置有不同的极限
  40. 8,--数据位
  41. 1,--停止位
  42. uart.ODD
  43. )
  44. --循环发数据
  45. --sys.timerLoopStart(uart.write,1000, uartid, "test")
  46. -- 收取数据会触发回调, 这里的"receive" 是固定值
  47. uart.on(uartid, "receive", function(id, len)
  48. local s = ""
  49. repeat
  50. -- s = uart.read(id, 1024)
  51. s = uart.read(id, len)
  52. if #s > 0 then -- #s 是取字符串的长度
  53. -- 如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
  54. -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
  55. log.info("uart", "receive", id, #s, s, s:toHex())
  56. uart.write(id, s)
  57. end
  58. until s == ""
  59. end)
  60. -- 并非所有设备都支持sent事件
  61. uart.on(uartid, "sent", function(id)
  62. log.info("uart", "sent", id)
  63. end)
  64. -- 用户代码已结束---------------------------------------------
  65. -- 结尾总是这一句
  66. sys.run()
  67. -- sys.run()之后后面不要加任何语句!!!!!