LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。
参考帖子:
1、H7-TOOL的LUA小程序教程第6期:文件系统API方便大家SPI,CANFD,I2C和串口操作目标设备就可以实现脱机数据记录2022-08-30
https://www.armbbs.cn/forum.php?mod=viewthread&tid=115122
2、H7-TOOL的LUA小程序教程第5期:串口开发,含Modbus(2023-06-10)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=110616
1、简易功能实现:
a、CSV格式逗号是分割,\r\n是下一行。
b、先提供一个简易的LUA离线版串口日志功能,以CSV格式存储到eMMC中。
c、目标板程序每秒发送一次数据
printf("%d,%d,%d", a++, b++, c++);
数据逗号分隔即可,然后LUA小程序里面给这个数据加了个时间戳,末尾加上\r\n,这样就是一条完整的CSV信息。再f_write写入到eMMC磁盘。
2、H7-TOOL进入虚拟U盘
上电首界面长按S键 -> 系统设置 -> USB eMMC磁盘, 进入eMMC模拟U盘后,在如下路径新建文件夹
串口日志LUA
串口日志记录
将LUA文件存到日志LUA文件夹里面
uart.lua (1.58KB)
3、操作显示屏,进入LUA接收状态。
目标板还没有发数据时,提示如下信息。
目标板子,每秒发送一次信息,记录效果如下,大家根据需要修改LUA小程序来适配每次接收超时时间,当前LUA小程序设置是发送速度的一半,即500ms
len, str = uart_recive(1, 100, 500) -- 串口1接收,最大100个字符,超时时间500ms
点击C键,可以退出监测:
进入eMMC虚拟U盘,可以看到test.csv文件,打开后看
4、LUA小程序内容,大家也可以在上位机上运行这个LUA小程序,也是可以的:
[C] 纯文本查看 复制代码 -------------------------------------------------------
-- H7-TOOL 串口日志
-------------------------------------------------------
local str
local len
local offset
local count
local totalstr
local filepath = "0:/H7-TOOL/Lua/串口日志记录/test.csv" -- csv文件记录路径
local reccout
local ret
local key
function printf(...) print(string.format(...)) end
-------------------------------------------------------
-- 第2步:设置串口波特率115200,奇偶校验位无,数据位8,停止位1
-------------------------------------------------------
uart_cfg(1, 115200, 0, 8, 1)
count = 0
offset = 0
reccout = 100 -- 接收100次
printf("进入串口日志接收模式")
-------------------------------------------------------
-- 第3步:执行操作
-------------------------------------------------------
while(reccout > 0)
do
delayms(1) -- 加上这个延迟方便显示屏版展示信息
len, str = uart_recive(1, 100, 500) -- 串口1接收,最大100个字符,超时时间500ms
if(len ~= 0) then -- 接收成功
reccout = reccout - 1
count = count + 1
printf("成功接收数据次数=%d", count)
time = os.time()
hms = os.date("%H:%M:%S,", time)
totalstr = hms..str.."\r\n" -- 合并字符串
ret = f_write(filepath, offset, totalstr) -- 写入到eMMC
if(ret == 1) then
printf("成功写入CSV文件地址偏移=%d", offset)
offset = offset + #totalstr
else
printf("写入CSV文件失败")
end
else -- 接收超时
printf("100ms等待超时")
end
key = get_key() -- 监测到C键单击,退出监测
if(key == 8) then
reccout = 0
printf("终止记录")
end
end
使用上位机可以方便验证LUA程序的正确性,不用每次都导入到eMMC测试是否正确
|