eric2013 发表于 2023-12-19 00:16:17

H7-TOOL的LUA小程序教程第12期:离线串口日志功能,存储到TOOL的4GB容量eMMC磁盘(2023-12-19)

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
static/image/hrline/4.gif
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文件夹里面

https://www.armbbs.cn/static/image/filetype/zip.gifuart.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小程序,也是可以的:

-------------------------------------------------------
--   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测试是否正确



eric2013 发表于 2023-12-19 17:58:35

可以使用了


eric2013 发表于 2023-12-20 08:49:59

更新完成,已经发布。

Vxworks 发表于 2023-12-20 10:02:38

前几天我也实现了个,不过我是txt文本记录的。
页: [1]
查看完整版本: H7-TOOL的LUA小程序教程第12期:离线串口日志功能,存储到TOOL的4GB容量eMMC磁盘(2023-12-19)