您尚未登录。

楼主 # 2023-04-19 17:41:03

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,204
积分: 1140.5

air724的串口不支持7位数据,luat语言如何将8位数据转为7位数据呢?

uart.read()返回的是string格式的数据。
想着将每个字节和0x80比较,大于的话,就自减0x80。
但是string类型是不能改变,那么只能新建个变量来赋值了。
但是luat没有数组这种类型,能用的估计就是string和table类型了。
用table类型估计不好再拼接成string然后再用串口发出去吧?

求个简单好用的方法。

离线

楼主 #1 2023-04-20 10:23:26

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,204
积分: 1140.5

Re: air724的串口不支持7位数据,luat语言如何将8位数据转为7位数据呢?

现在想这样该,串口一个字节一个字节的读取,然后判断该字节大小,或按位与0x7f。

现在问题是,uart.read()返回的是字符串类型。如何将这个字符串按数字处理?不能用tonumer()这样处理。

离线

楼主 #2 2023-04-20 13:43:29

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,204
积分: 1140.5

Re: air724的串口不支持7位数据,luat语言如何将8位数据转为7位数据呢?

用string.byte()可以将单个字符转换为number类型,然后判断其大小,再做处理。

现在想串口一次读多个字节的字符串,一次性处理。
打算

for i=1, i < #data then
    data1 = string.byte(data, i, i)
    if data1 > 127 then
        data2 = data1 - 128
    else
        data2 = data1
    end
end

这样来获得每个字符对应的数字进行处理,但是不知道该如何再组合成字符串进行发送。

--------------------------------------

目前这么处理的:

        data = uart.read(1, "*l")
        if not data or string.len(data) == 0 then
            break
        end
        s = ""
        for i = 1, #data do
            data1 = string.byte(data, i, i)
            if data1 > 127 then
                data2 = data1 - 128
            else
                data2 = data1
            end
            s1 = string.char(data2)
            s = s..s1
        end

最近编辑记录 Gentlepig (2023-04-20 14:20:28)

离线

楼主 #3 2023-05-04 17:41:02

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,204
积分: 1140.5

Re: air724的串口不支持7位数据,luat语言如何将8位数据转为7位数据呢?

又遇到了个问题,串口接收是按上边那段程序处理的,大部分情况下正常。但是串口一次接收大量数据时,会将一帧数据分成2帧处理了。
我实际应用过程中,串口应该收到132字节数据,但是却分成了112字节和20字节两部分。很奇怪,每次收这组132字节时,都会从112字节处断开处理。

离线

楼主 #4 2023-05-05 08:48:14

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,204
积分: 1140.5

Re: air724的串口不支持7位数据,luat语言如何将8位数据转为7位数据呢?

7. 一次发送的数据模块分为2个包来接收;第一个64bytes,第二次26bytes

    串口速度比主频慢很多,115200大概112K/s,模块主频有500MHz,所以接收的时候会分包。

在合宙官网找到这些内容。不太明白,为何模块主频高,所以串口接收会分包。不明白这里的因果关系...

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn