今天看啥  ›  专栏  ›  无语僧314

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

无语僧314  · CSDN  ·  · 2020-02-02 12:16

问题现象: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_OPTION_WHEN_FULL_DISCARD_FIRST);
		while(1)
		{
			ret = HAL_UART_Receive_IT(&UartHandle1, (uint8_t *)&gRxBuffer, 1);
			if(ret == HAL_O



原文地址:访问原文地址
快照地址: 访问文章快照