请问STM32cubemx串口怎么中断接收发来的不定长数据?

2019-07-18 17:20发布

我用HAL_UART_Receive_IT(&huart2,RxBuffer,10); 这个函数接收串口发来的数据,然后在void HAL_UART_RxCpltCallback(UART_HandleTypeDef*UartHandle)  中处理数据并开启下一次中断。  现在经过实际测试是HAL_UART_Receive_IT()函数中第三个接收数据长度的参数如果设置短的话片子容易死掉。接收长度设置长的话,如果一次过来的数据不够数量串口继续在那等着。这两种情况肯定与实际情况不符。  求助一个各位达人,如果做到对方发来多少字节,可以在串口中接收同样的字节数,然后处理。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
苏州名之卓
1楼-- · 2019-07-20 09:09
 精彩回答 2  元偷偷看……
huaxu2222
2楼-- · 2019-07-20 13:53
苏州名之卓 发表于 2019-6-18 15:31
你进串口中断后,马上要把 Rx2Buffer 这个数据保存在数组中的,数组最好开大一些,要不数据放不下。

理解不了你的做法。进串口中断后把Rx2Buffer这个数据保存到数组没有问题。 问题是我发送了三个字节,接收函数只接受一个字节。我把这一个字节保存到数组中了,丢了另外两个。 没有意义啊。
TOPCB
3楼-- · 2019-07-20 18:37
楼主看一下,接收完成后是否就关闭了中断。
huaxu2222
4楼-- · 2019-07-20 20:44
TOPCB 发表于 2019-6-18 15:49
楼主看一下,接收完成后是否就关闭了中断。

肯定是关了中断的,不然也不会每次在回调函数里边/HAL_UART_Receive_IT(&huart2,Uart2Data,1); 开启下一次中断。    不知道您说这个是什么意思。  因为只接受了一个字节的数据就关闭中断了,所以后边的数据就进不来了?
TOPCB
5楼-- · 2019-07-20 20:54
用HAL比较少,我还是用的标准库,我也没有合适的解决方法。修改办法两种,一种该驱动,接收完成也不关闭中断,一种是通过Rx2Buffer定义一个大空间,实时去处理Rx2Buffer中的数据,满足条件以后重新进行接收处理。
HAL_UART_Receive_IT(&huart1,&Rx2Buffer,sizeof(Rx2Buffer))
huaxu2222
6楼-- · 2019-07-21 00:21
 精彩回答 2  元偷偷看……

一周热门 更多>