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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版