你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
PaulRambo 提问时间:2017-6-22 10:50 /
本帖最后由 PaulRambo 于 2017-6-22 11:24 编辑

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




收藏 评论6 发布时间:2017-6-22 10:50

举报

6个回答
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+空闲中断接收》,自己搜索一下。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版