硬汉嵌入式论坛

 找回密码
 立即注册
查看: 292|回复: 3
收起左侧

[问题解答] H7 TOOL 串口lua发送问题

[复制链接]

3

主题

1

回帖

10

积分

新手上路

积分
10
发表于 2025-12-3 16:48:59 | 显示全部楼层 |阅读模式
串口发送函数 uart_send(port, bin) 是只支持string类型,还有其他类型吗?
比如
bin = "\xAA\x00\x00\x00\x00\x00\x00\x00\x00\xF7\xD6" 数据 我想改变其中第三位数据,除了string.sub 截取添加还有其他方法吗
最好有类似于数组操作方法

回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120428
QQ
发表于 2025-12-3 19:14:15 | 显示全部楼层
[Lua] 纯文本查看 复制代码
local function modify_byte(bin, position, new_value)
    local bytes = {}
    -- 将字符串转换为字节表
    for i = 1, #bin do
        bytes[i] = string.byte(bin, i)
    end
    -- 修改指定位置
    bytes[position] = new_value
    -- 重新构建字符串
    return string.char(table.unpack(bytes))
end

-- 使用示例
local bin = "\xAA\x00\x00\x00\x00\x00\x00\x00\x00\xF7\xD6"

print("修改前:")
print_hex(bin)

bin = modify_byte(bin, 3, 0xFF)  -- 修改第三字节为0xFF
print("修改后:")
print_hex(bin)


1234.png
回复

使用道具 举报

3

主题

1

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2025-12-4 16:18:49 | 显示全部楼层
感谢,分享h7 tool 模拟响应代码,添加crc-xmodem
[Lua] 纯文本查看 复制代码
-- 模拟响应通讯协议
function main(void)
    uart_cfg(1, 115200, 0, 8, 1) -- 初始化串口
    uart_send(1, "start")
    local rx_str
    local rx_len
    local test
    -- local bin = "\xAA\x00\x00\x01\x10\x01\x00\x00\x00\xC0\x98"
    -- local resetBin = {0xAA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}

    while (1) do
        rx_len, rx_str = uart_recive(1, 512, 100, 8)
        if (rx_len > 0) then
            local bin = {0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
            local sendBuf = ""
            test = string.byte(rx_str, 2)
            -- print_hex(rx_str)
            if (test == 0) then
                print("读取控制器版本号")
                bin[4] = 0x01;
                bin[5] = 0x10;
                bin[6] = 0x01;
                crc16(bin)
                sendBuf = string.char(table.unpack(bin))
                uart_send(1, sendBuf)
            elseif (test == 4) then
                print("获取校准值")
            else
                print("未知指令")
                print_hex(rx_str)
            end
        end
    end
end

function crc16(value)
    local crc = 0
    local len = #value
    for k, v in pairs(value) do
        crc = crc ~ (v << 8)
        for j = 1, 8, 1 do
            if (crc & 0x8000) ~= 0 then
                crc = (crc << 1) ~ 0x1021
            else
                crc = crc << 1
            end
            crc = crc & 0xFFFF
        end
    end
    len = len + 1
    value[len] = (crc>>8) & 0xFF
    len = len + 1
    value[len] = crc & 0xFF
end

main()

回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120428
QQ
发表于 2025-12-4 17:54:48 | 显示全部楼层
lin6658 发表于 2025-12-4 16:18
感谢,分享h7 tool 模拟响应代码,添加crc-xmodem
[mw_shl_code=lua,true]-- 模拟响应通讯协议
function ma ...

谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-1-10 07:59 , Processed in 0.072308 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表