打印
[STM32G4]

串口不定长接收怎么做更好

[复制链接]
2833|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我看HAL库函数接收和发送函数都是定场的接收,如何实现不定长发送和接收呢?

使用特权

评论回复
沙发
xinxianshi| | 2022-7-23 21:37 | 只看该作者
是不是需要用到超时中断。

使用特权

评论回复
板凳
sadicy| | 2022-7-24 09:48 | 只看该作者
最好还是确定好协议,定长接收

使用特权

评论回复
地板
qq995423094| | 2022-7-24 10:29 | 只看该作者
开定时器做空闲监控,或者直接开串口接收空闲中断

使用特权

评论回复
5
SantaBunny| | 2023-2-23 20:50 | 只看该作者
使用中断的方式,使用自定义结束符

使用特权

评论回复
6
药无尘| | 2024-4-1 13:50 | 只看该作者
空闲中断加DMA

使用特权

评论回复
7
cemaj| | 2024-4-4 11:20 | 只看该作者
如果硬件支持,可以使用中断来处理串口接收。当串口接收到数据时,触发中断,然后在中断服务程序中处理接收到的数据。这种方法可以实时响应串口数据,但需要注意中断的优先级和嵌套问题。

使用特权

评论回复
8
eefas| | 2024-4-4 14:00 | 只看该作者
为了更好地处理不定长数据,可以使用环形缓冲区来存储接收到的数据。

使用特权

评论回复
9
jackcat| | 2024-4-4 18:25 | 只看该作者
中断方式是一种基于事件驱动的数据传输方式,可以在接收到数据时触发中断。使用中断接收不定长数据时,需要在中断处理程序中处理接收到的数据,并将其存储到内存中。

使用特权

评论回复
10
sesefadou| | 2024-4-4 21:02 | 只看该作者
如果条件允许,可以考虑使用多线程或多任务处理来同时处理串口接收和其他任务。这样可以避免因为等待串口数据而导致程序阻塞。

使用特权

评论回复
11
bestwell| | 2024-4-6 21:43 | 只看该作者
通过状态机来跟踪数据的接收过程,可以有效处理不同长度的数据帧。状态机可以根据接收到的字节数和预期的数据长度来判断当前的状态,从而做出相应的处理。

使用特权

评论回复
12
rosemoore| | 2024-4-7 20:32 | 只看该作者
DMA是一种硬件加速的数据传输方式,可以在不占用CPU资源的情况下将数据从串口接收到内存中。使用DMA接收不定长数据时,需要设置一个接收缓冲区,并在接收完成时通过DMA中断处理数据。

使用特权

评论回复
13
EmmaTT| | 2024-4-8 15:33 | 只看该作者
用空闲中断就可以

使用特权

评论回复
14
mollylawrence| | 2024-4-8 19:59 | 只看该作者
当串口在一段时间内没有接收到新数据时,会触发空闲中断。可以利用这个特性来判断数据是否接收完毕。在STM32中,可以通过使能IDLE中断来实现这一功能。

使用特权

评论回复
15
benjaminka| | 2024-4-9 12:30 | 只看该作者
在设计通信协议时,可以考虑在数据帧的头部或尾部添加长度信息。这样,接收方就可以根据长度信息来确定每帧数据的长度,从而准确地分割出每个数据帧。

使用特权

评论回复
16
lzbf| | 2024-4-9 20:51 | 只看该作者
如果数据传输中存在乱序或重叠,可能需要一个同步机制来确保数据包的顺序和完整性。例如,可以使用序列号或时间戳。

使用特权

评论回复
17
janewood| | 2024-4-10 12:39 | 只看该作者
在数据包中包含一个长度字段,这样接收端可以在读取数据之前先知道数据包的长度。长度字段可以是固定长度的,也可以是可变长度的,但最好是事先定义好。

使用特权

评论回复
18
mikewalpole| | 2024-4-12 01:39 | 只看该作者
在中断处理函数中,可以检查接收到的数据包的长度。如果数据包长度超过预期的最大长度,可以丢弃该数据包或采取其他措施。

使用特权

评论回复
19
loutin| | 2024-4-12 07:32 | 只看该作者
利用串口接收中断,当接收到一个数据时触发中断。同时,设置一个计时器,如果在预定的时间内没有接收到新的数据,则认为数据接收完毕。这种方法可以减少CPU资源的浪费,但需要合理设置超时时间以适应不同的通信情况。

使用特权

评论回复
20
updownq| | 2024-4-12 11:07 | 只看该作者
为串口接收数据分配一个足够大的缓冲区,以便一次性接收更多的数据。这样,即使数据长度未知,也可以保证大部分数据能够被完整接收。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

173

主题

3358

帖子

13

粉丝