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();
}
}
安 发表于 2017-6-22 13:54
我建议中断中不要加延时这种处理。不管成功不成功都跳出。另外,开启中断是否可以放到外部操作。 ...
好的。谢谢你的建议。延时的我改一下。开启中断的感觉最好还是放在这个位置。因为使用HAL的库,中断方式接收需要接收一次中断就重新设置中断。要想接收不定长度的数据,也只能设置为1个字节就中断。这个感觉跟以前的标准库很像了。但是使用起来效果差很多。不知道你有没有其他办法能够随时中断接收数据。 我建议中断中不要加延时这种处理。不管成功不成功都跳出。另外,开启中断是否可以放到外部操作。 刚看到也有其他人出现了类似的问题 《 STM32L0xx_HAL_Driver库的使用——UART》 《http://blog.csdn.net/anobodykey/article/details/44959527》。里面提到的一个问题就是STM32L0xx_Hal_Driver库一旦出现了ORE错误会一直输出该错误,该错误标志一直没有被清零。貌似这个问题是在HAL库中存在的很明显的一个问题。不知道有没有大神有解决办法呀。在线等!:'( 我现在用标准卡,HAL测试的时候,我一般都是改一部分固件库,关闭中断那里给屏蔽了。 楼主请问一下你这个问题是怎么解决的啊 最后我使用的配置是DILE+DMA接收。最后能够接收不定长的数据。中断部分手动写入,DMA接收配置使用CubeMX自动生成。配置过程可以参考其他的帖子《STM32串口使用心得(一)——DMA+空闲中断接收》,自己搜索一下。
页:
[1]