main.lua 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "uart_ymodem"
  3. VERSION = "1.0.0"
  4. log.style(1)
  5. log.info("main", PROJECT, VERSION)
  6. -- 引入必要的库文件(lua编写), 内部库不需要require
  7. sys = require("sys")
  8. if wdt then
  9. --添加硬狗防止程序卡死,在支持的设备上启用这个功能
  10. wdt.init(9000)--初始化watchdog设置为9s
  11. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  12. end
  13. local uartid = 1 -- 根据实际设备选取不同的uartid
  14. --初始化
  15. local result = uart.setup(
  16. uartid,--串口id
  17. 115200,--波特率
  18. 8,--数据位
  19. 1--停止位
  20. )
  21. local ymodem_running = false
  22. local rxbuff = zbuff.create(1024 + 32)
  23. local ymodem_handler = ymodem.create("/","save.bin")
  24. local function ymodem_to()
  25. if not ymodem_running then
  26. uart.write(uartid, "C")
  27. ymodem.reset(ymodem_handler)
  28. end
  29. end
  30. sys.timerLoopStart(ymodem_to,500)
  31. local function ymodem_rx(id,len)
  32. uart.rx(id,rxbuff)
  33. log.info(rxbuff:used())
  34. local result,ack,flag,file_done,all_done = ymodem.receive(ymodem_handler,rxbuff)
  35. ymodem_running = result
  36. log.info(ymodem_running,ack,flag,file_done,all_done)
  37. rxbuff:del()
  38. if result then
  39. rxbuff:copy(0, ack,flag)
  40. uart.tx(id, rxbuff)
  41. end
  42. if all_done then
  43. ymodem_running = false --再次开始接收
  44. end
  45. rxbuff:del()
  46. end
  47. uart.on(uartid, "receive", ymodem_rx)
  48. uart.on(uartid, "sent", function(id)
  49. log.info("uart", "sent", id)
  50. end)
  51. -- 用户代码已结束---------------------------------------------
  52. -- 结尾总是这一句
  53. sys.run()
  54. -- sys.run()之后后面不要加任何语句!!!!!