LuatOS入门指南6-UART

发布时间:2024年01月18日

一,生成固件

在这里插入图片描述
这里我们使用云编译来生成芯片的相关固件
具体使用参考官方文档https://wiki.luatos.com/develop/compile/Cloud_compilation.html
在这里插入图片描述
在这里插入图片描述
生成后,我们下载下来在这里插入图片描述

二,UART测试

测试串口发送和串口接收,具体参考芯片来选择串口进行使用

我们这里以串口2使用作介绍
在这里插入图片描述

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "Test"
VERSION = "1.0.0"

-- 打印版本信息
log.info("main", PROJECT, VERSION)

-- 一定要添加sys.lua !!!!
sys = require("sys")

USE_ZBUFF = true
uart.setup(2, 115200, 8, 1, uart.None)--初始化UART1,波特率为1152008位数据位,1位停止位,无校验


--注册串口事件回调
uart.on(2, "receive", function(id, len)
    local data = uart.read(id, len)
    log.info("uart", id, len, data)
end)

sys.timerLoopStart(function()
    uart.write(2, "Hi,I am Air601\n")
    log.info("main", PROJECT, VERSION)
end, 2000)

--第一个任务
sys.taskInit(function()

    while true do
        -- log.info("task1","wow")
        sys.wait(1000) --延时1秒,这段时间里可以运行其他代码
    end
end)

--第二个任务
sys.taskInit(function()

    while true do
        -- log.info("task2","wow")
        sys.wait(5000) --延时0.5秒,这段时间里可以运行其他代码
    end
end)


-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!


在这里插入图片描述
烧录上我们生成的固件还有编写的脚本文件即可

具体UART库函数参考地址https://wiki.luatos.com/api/uart.html#uart-on-id-event-func

UART示例代码

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "uart_irq"
VERSION = "1.0.0"

log.info("main", PROJECT, VERSION)

-- 引入必要的库文件(lua编写), 内部库不需要require
sys = require("sys")

if wdt then
    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
    wdt.init(9000)--初始化watchdog设置为9s
    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end

log.info("main", "uart demo")

local uartid = 2 -- 根据实际设备选取不同的uartid

--初始化
local result = uart.setup(
    uartid,--串口id
    115200,--波特率
    8,--数据位
    1--停止位
)


--循环发数据
sys.timerLoopStart(uart.write,1000, uartid, "test")
-- 收取数据会触发回调, 这里的"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)

-- 并非所有设备都支持sent事件
uart.on(uartid, "sent", function(id)
    log.info("uart", "sent", id)
end)

-- sys.taskInit(function()
--     while 1 do
--         sys.wait(500)
--     end
-- end)


-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

文章来源:https://blog.csdn.net/weixin_51029119/article/details/135643010
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。