请问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条回答
huaxu2222
1楼-- · 2019-07-19 12:56
苏州名之卓 发表于 2019-6-18 14:13
HAL_UART_Receive_IT(&huart2,RxBuffer,10);
把10改成1,因为你的数据是不定长度的,接收函数写在串口接收的回调函数内,

这样做你试过吗? 现在我实验的结果是如果中断接收函数的长度改为1 的话,我发送超过一个字节的数据,片子会死掉。
苏州名之卓
2楼-- · 2019-07-19 15:55
 精彩回答 2  元偷偷看……
TOPCB
3楼-- · 2019-07-19 17:12
程序应该是没有死掉,估计是溢出导致。楼主是否按照楼上所述加如了回调函数。
huaxu2222
4楼-- · 2019-07-19 20:13
苏州名之卓 发表于 2019-6-18 14:38
试过的,数据接收帧长度不同,但是每个数据帧间隔的时间较长,所以这个方法是可行的。
如果发送超过一个字节,片子会死掉,那很可能是设置的问题,HAL库其实已经帮我们考虑了很全面了。
还有提醒一下,如果你的程序有很多警告的话,建议你注意一点,有些警告没关系的,有些警告会有问题的。

一语惊醒我了,我按照教程在发送函数后边判断if(HAL_UART_Transmit_IT(&huart2,(uint8_t*) Uart2Data,1) !=halok) 执行了Error_Handler() 函数,并且出现的这个警告没有处理。导致出现上边的问题。感谢提醒!
huaxu2222
5楼-- · 2019-07-20 01:02
苏州名之卓 发表于 2019-6-18 14:38
试过的,数据接收帧长度不同,但是每个数据帧间隔的时间较长,所以这个方法是可行的。
如果发送超过一个字节,片子会死掉,那很可能是设置的问题,HAL库其实已经帮我们考虑了很全面了。
还有提醒一下,如果你的程序有很多警告的话,建议你注意一点,有些警告没关系的,有些警告会有问题的。

现在问题是HAL_UART_Receive_IT(&huart1,&Rx2Buffer,1); 这个函数当我发送三个字节的时候,这个函数只接受第一个字节,后两个字节丢了。
huaxu2222
6楼-- · 2019-07-20 05:12
TOPCB 发表于 2019-6-18 14:49
程序应该是没有死掉,估计是溢出导致。楼主是否按照楼上所述加如了回调函数。

回调函数肯定加了。问题是定长接收一个字节, 我发送三个字节,那后两个字节就丢了。

一周热门 更多>