STM32串口接收中断卡死无法接收数据问题及解决办法(已解决)

在STM32L432单片机中,使用串口1的接收中断时遇到问题,当数据发送频率提高到1ms或5ms时,MCU接收中断会卡死。分析发现,串口溢出中断(ORE)是罪魁祸首。为解决此问题,需要在中断中重新开启中断,并在错误中断中清除错误标志。经过这样的调整,长时间运行的稳定性得到了改善。
摘要由CSDN通过智能技术生成

问题现象:STM32L432单片机MCU程序串口1,接收中断方式,发送采用查询方式。当使用SSCOM定时发送数据给MCU时,正常情况下,MCU收到什么就会回什么数据。如果使用100ms发送,MCU长时间测试都正常。如果使用1ms或者5ms发送数据给MCU,会出现MCU出现异常,MCU无法再接收到数据,接收中断也进不去。发送数据也无效。通过设置断点,发现接收中断设置不成功的原因是gState值HAL_UART_STATE_BUSY_TX,正常的时候应该是HAL_UART_STATE_READY。

问题原因:串口溢出中断(ORE),导致程序进步了接收中断

解决办法:(贴代码如下)

/**
  * @brief  Rx Transfer completed callback
  * @param  UartHandle: UART handle
  * @note   This example shows a simple way to report end of DMA Rx transfer, and 
  *         you can add your own implementation.
  * @retval None
  */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
	HAL_StatusTypeDef ret = 0;
  /* Set transmission flag: transfer complete */
	if(UartHandle->Instance==USART1)
	{
		ring_queue_in(&uart_ring_queue, (queue_type_point)&gRxBuffer, 1, RQ_OPTIO
  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值