引用: 亲爱的娜娜 发表于 2019-6-18 12:59
Cube下实现串口+DMA+空闲中断接收不定长数据
http://www.stmcu.org/module/foru ... &fromuid=394920
(出处: 意法半导体STM32/STM8技术社区)
引用: 亲爱的娜娜 发表于 2019-6-18 12:59
Cube下实现串口+DMA+空闲中断接收不定长数据
http://www.stmcu.org/module/foru ... &fromuid=394920
(出处: 意法半导体STM32/STM8技术社区)
引用: 亲爱的娜娜 发表于 2019-6-18 13:39
hal里面直接有中断函数的处理和状态清除。cubemx生成里面应该有中断函数部分吧。
引用: 苏州名之卓 发表于 2019-6-18 14:13
HAL_UART_Receive_IT(&huart2,RxBuffer,10);
把10改成1,因为你的数据是不定长度的,接收函数写在串口接收的回调函数内,
引用: 苏州名之卓 发表于 2019-6-18 14:38
试过的,数据接收帧长度不同,但是每个数据帧间隔的时间较长,所以这个方法是可行的。
如果发送超过一个字节,片子会死掉,那很可能是设置的问题,HAL库其实已经帮我们考虑了很全面了。
还有提醒一下,如果你的程序有很多警告的话,建议你注意一点,有些警告没关系的,有些警告会有问题的。
引用: 苏州名之卓 发表于 2019-6-18 14:38
试过的,数据接收帧长度不同,但是每个数据帧间隔的时间较长,所以这个方法是可行的。
如果发送超过一个字节,片子会死掉,那很可能是设置的问题,HAL库其实已经帮我们考虑了很全面了。
还有提醒一下,如果你的程序有很多警告的话,建议你注意一点,有些警告没关系的,有些警告会有问题的。
引用: TOPCB 发表于 2019-6-18 14:49
程序应该是没有死掉,估计是溢出导致。楼主是否按照楼上所述加如了回调函数。
引用: 苏州名之卓 发表于 2019-6-18 15:31
你进串口中断后,马上要把 Rx2Buffer 这个数据保存在数组中的,数组最好开大一些,要不数据放不下。
引用: TOPCB 发表于 2019-6-18 15:49
楼主看一下,接收完成后是否就关闭了中断。
引用: TOPCB 发表于 2019-6-18 16:12
用HAL比较少,我还是用的标准库,我也没有合适的解决方法。修改办法两种,一种该驱动,接收完成也不关闭中断,一种是通过Rx2Buffer定义一个大空间,实时去处理Rx2Buffer中的数据,满足条件以后重新进行接收处理。
HAL_UART_Receive_IT(&huart1,&Rx2Buffer,sizeof(Rx2Buffer)) ...
更多回帖