matlab串口读取数据大小与STM32 UART发送数据大小不匹配

问题描述 投票:0回答:1

我正在使用MATLAB中的

serialport
函数从波特率为115200的设备读取数据。但是,MATLAB中读取的数据量远低于预期。例如,在 1 分钟内,我在 MATLAB 中收集了 27276 个字节,这相当于大约 381.6 Hz。同时,当使用串行工具(如串行终端)时,我可以收集 29702 字节,这相当于 495 Hz 左右,更接近我的预期。

有人有什么建议吗?

这是我读过的代码和函数

processData
我有%

 function readSensorData(app, src, ~) % 读取数据并将数据放入队列
     while src.NumBytesAvailable >= 5
            
        % currentTime = datetime('now'); % 串口数据到达时记录时间戳
        tic
        frameHeader = read(src, 2, "uint8");
        toc
        if frameHeader(1) == 0x55 && frameHeader(2) == 0xAA
            fun_data = read(src, 2, "uint8");
            len = fun_data(2);
            if src.NumBytesAvailable >= len + 1
                if len ~= 0
                    dataToSend = read(src, len, "uint8");
                    checksum = read(src, 1, "uint8");
                    % 计算校验
                    expectedChecksum = bitcmp(mod(sum([fun_data, dataToSend]), 256), 'uint8');

                    if (checksum == expectedChecksum)
                        app.processData(dataToSend)
                    end
                end
            end
        else
            read(src, 1, 'uint8');
        end
        
    end
        
    end
matlab user-interface serial-port
1个回答
0
投票

实际上,我的读取串口代码只做了两件事,一是读取数据到缓冲区,并告诉另一个线程是时候处理数据了。这是我的代码,希望如果您遇到同样的问题可以帮助您。

function readSensorData(app, src, ~)
        numBytes = src.NumBytesAvailable;
        % tic
        if numBytes > 0
            newData =  read(src, numBytes, 'uint8');
            app.rawData = [app.rawData; newData'];
            send(app.dataQueue,1)
        end
    end

其中

app.rawData
已在设置中初始化,代码
send(app.dataQueue,1)
是告诉另一个线程处理数据。

© www.soinside.com 2019 - 2024. All rights reserved.