PaulRambo 发表于 2017-6-22 10:50:03

STM32L476使用HAL库串口中断方式接收数据卡死RXNE引起

本帖最后由 PaulRambo 于 2017-6-22 11:24 编辑

大家好,我最近在使用NUCLEO-L476RG开发板测试串口通信,中断方式。设置中断频率1字节一次,HAL_UART_Receive_IT(&huart4,Uart4buffer,1);
目前出现的问题是:开始能够接收数据,测试了400左右字节,不稳定地卡死,一段时间后再也无法进入中断。标志位如下:isrflags = ?0F8,显示为RXNE和OVER RUN了。Callback代码如下,还请各位大神帮忙解决。感激不尽!void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
      uint32_t timeout=5000;
      uint8_t ret=0;
      /* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE : This function should not be modified, when the callback is needed,
            the HAL_UART_RxCpltCallback can be implemented in the user file
   */
      if(huart == &huart4)
      {
                        FlagUARTExt=1;
            SaveToRXBuffer(Uart4buffer);
                  while(timeout)
                        {
                                        ret = HAL_UART_Receive_IT(&huart4,Uart4buffer,1);//ÉèÖÃÖÐ¶ÏÆµÂÊ
                                        if(ret != HAL_OK)
                                        timeout--;
                                        else
                                        timeout = 0;      
                        }
                        STATE_Toggle();
                }
}




PaulRambo 发表于 2017-6-22 15:53:56

安 发表于 2017-6-22 13:54
我建议中断中不要加延时这种处理。不管成功不成功都跳出。另外,开启中断是否可以放到外部操作。 ...

好的。谢谢你的建议。延时的我改一下。开启中断的感觉最好还是放在这个位置。因为使用HAL的库,中断方式接收需要接收一次中断就重新设置中断。要想接收不定长度的数据,也只能设置为1个字节就中断。这个感觉跟以前的标准库很像了。但是使用起来效果差很多。不知道你有没有其他办法能够随时中断接收数据。

发表于 2017-6-22 13:54:27

我建议中断中不要加延时这种处理。不管成功不成功都跳出。另外,开启中断是否可以放到外部操作。

PaulRambo 发表于 2017-6-22 17:21:28

刚看到也有其他人出现了类似的问题 《 STM32L0xx_HAL_Driver库的使用——UART》 《http://blog.csdn.net/anobodykey/article/details/44959527》。里面提到的一个问题就是STM32L0xx_Hal_Driver库一旦出现了ORE错误会一直输出该错误,该错误标志一直没有被清零。貌似这个问题是在HAL库中存在的很明显的一个问题。不知道有没有大神有解决办法呀。在线等!:'(

发表于 2017-6-23 09:38:42

我现在用标准卡,HAL测试的时候,我一般都是改一部分固件库,关闭中断那里给屏蔽了。

xiaoouyang 发表于 2018-7-18 09:37:13

楼主请问一下你这个问题是怎么解决的啊

PaulRambo 发表于 2018-8-17 10:07:25

最后我使用的配置是DILE+DMA接收。最后能够接收不定长的数据。中断部分手动写入,DMA接收配置使用CubeMX自动生成。配置过程可以参考其他的帖子《STM32串口使用心得(一)——DMA+空闲中断接收》,自己搜索一下。
页: [1]
查看完整版本: STM32L476使用HAL库串口中断方式接收数据卡死RXNE引起