合宙Air780EG开发板系列教程—06 串口uart的数据接收和发送(基于luatos的开发)

一、下载串口调试工具

这里我下载的是合宙官方的串口工具,点击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()之后后面不要加任何语句!!!!!

效果演示

在这里插入图片描述
注意看秒数,每秒发送一次。
发送和接收不冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值