一、下载串口调试工具
这里我下载的是合宙官方的串口工具,点击llcom串口调试工具下载。
功能列表
- 其他串口调试功能具有的功能
- 收发日志清晰明了,同时显示HEX值与实际字符串
- 自动保存串口与Lua脚本日志,并附带时间
- 串口断开后,如果再次连接,会自动重连
- 发送的数据可被用户自定义的Lua脚本提前处理
- 右侧快捷发送栏,快捷发送条目数量不限制
- 可独立运行Lua脚本,并拥有定时器与协程任务特性(移植自合宙Luat Task架构)
其他的串口调试工具也可以,看个人爱好
二、焊接引脚
-
由于我是直接用的官方的开发板,虽然官方把主串口引出来了,但是还是要我们焊接一个插排才能够使用
-
合宙780eg开发板的主串口也就是MAIN_XXX用来接收和发送数据,我们需要这两个引脚,和一个地
-
下面是我的开发板的焊接
-
焊接好了需要一个TTL–USB的工具
三、烧录代码
1、uart.read
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "uart_1"
VERSION = "1.0.0"
-- 引入必要的库文件(lua编写), 内部库不需要require
sys = require("sys")
local uartid = 1 -- 根据实际设备选取不同的uartid
--初始化
uart.setup(
uartid,--串口id
921600,--波特率
8,--数据位
1--停止位
)
-- 收取数据会触发回调, 这里的"receive" 是固定值
uart.on(uartid, "receive", function(id, len)
local s = ""
repeat
-- s = uart.read(id, 1024)
s = uart.read(id, len)
if #s > 0 then -- #s 是取字符串的长度
log.info("uart", "receive", id, #s, s)
log.info("uart", "receive", id, #s, s:toHex())
end
if #s == len then
break
end
until s == ""
end)
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
把写好的代码烧录到开发板中,不会烧录的请看我之前的帖子Luatools下载调试工具
效果演示
打开串口调试工具,打开串口
发送消息
可以看到 log.info("uart", "receive", id, #s, s) log.info("uart", "receive", id, #s, s:toHex())
的区别,
– 如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
– 关于收发hex值,请查阅 https://doc.openluat.com/article/583
- 我们可以把打印出来的值复制一下,我们看一下效果,如图
实际上打印的就是一个是字符串一个是hex数据
2、uart_write
我们直接每秒循环给串口发送数据吧
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "uart_1"
VERSION = "1.0.0"
-- 引入必要的库文件(lua编写), 内部库不需要require
sys = require("sys")
local uartid = 1 -- 根据实际设备选取不同的uartid
--初始化
uart.setup(
uartid,--串口id
921600,--波特率
8,--数据位
1--停止位
)
sys.timerLoopStart(function()
uart.write(uartid,"hello,cheney")
end,1000)
-- 收取数据会触发回调, 这里的"receive" 是固定值
uart.on(uartid, "receive", function(id, len)
local s = ""
repeat
-- s = uart.read(id, 1024)
s = uart.read(id, len)
if #s > 0 then -- #s 是取字符串的长度
-- 如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
-- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
log.info("uart", "receive", id, #s, s)
log.info("uart", "receive", id, #s, s:toHex())
end
if #s == len then
break
end
until s == ""
end)
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
效果演示
注意看秒数,每秒发送一次。
发送和接收不冲突