matlab串口接收数据的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab串口接收数据的问题相关的知识,希望对你有一定的参考价值。

主端一直在以一个较快的频率发送数据(一个字节一个字节的发),matlab需要每隔一秒读取最新的一个数据。只需要最新读取一个字节。当写上延时一秒的函数之后,matlab串口缓冲区就会满,接收到的数据不对,也不是最新的数据。想实现每隔一秒只读取最新的一个字节的数据该如何编写函数

还是设定每隔开一秒进行一次读取的操作
但是每次读的时候不限定读取的字节数,直接把缓冲区内的数据都读出来

然后取最后一个字节的数据作为当前数据

因为每次读取数据都会把缓冲区清空,所以只要缓冲区大小足够存下一秒内主机发送的全部数据,缓冲区就不会溢出。
参考技术A 还是设定每隔开一秒进行一次读取的操作
但是每次读的时候不限定读取的字节数,直接把缓冲区内的数据都读出来

然后取最后一个字节的数据作为当前数据

因为每次读取数据都会把缓冲区清空,所以只要缓冲区大小足够存下一秒内主机发送的全部数据,缓冲区就不会溢出。追问

用fscanf函数读取所有数据不行啊。 fscanf函数会一直等待串口不再有数据到来或者时间超出后输出读取到的数据。然而主端在一直发数。所以fscanf会一直等到时间超出(好几秒),才停止。

追答

用fread(s,s.BytesAvailable)

s.BytesAvailable可以返回串口输入缓冲区可用字节数(s是用serial设定的串口对象)
用fread指定读取s.BytesAvailable个字节的数据,就可以把当前缓冲区读空

fread返回的是uchar类型的一维矩阵,最后一个数应该就是最新的数据

本回答被提问者和网友采纳
参考技术B 还是设定每隔开一秒进行一次读取的操作
但是每次读的时候不限定读取的字节数,直接把缓冲区内的数据都读出来

然后取最后一个字节的数据作为当前数据

因为每次读取数据都会把缓冲区清空,所以只要缓冲区大小足够存下一秒内主机发送的全部数据,缓冲区就不会溢出。

STM32 串口为啥只能接收发送的部分数据

程序BUG,或者接受缓冲的数组变量满了,不过基本上可以确定是程序问题 参考技术A 这个跟stm32没有关系,跟你的程序有关系。

以上是关于matlab串口接收数据的问题的主要内容,如果未能解决你的问题,请参考以下文章

怎么用matlab读取串口数据?

RISC-V MCU开发教程之与Matlab的串口通信

MATLAB调用串口

串口接收问题

STM32F4 DMA接收串口定长数据,串口每秒来1000个数据,使用DMA-Normal模式

STM32F4 DMA接收串口定长数据,串口每秒来1000个数据,使用DMA-Normal模式