cancel
Showing results for 
Search instead for 
Did you mean: 

Hard fault issue while transmitting data on UART

ASaxe
Associate II

Hi All,

I config UART on interrupt, after receving data on UART simple sending data at that time hard fault occur.

UART enabling code

 MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART2_UART_Init();
  MX_RTC_Init();
  MX_SPI3_Init();
  MX_TIM2_Init();
  MX_TIM15_Init();
  MX_TIM1_Init();
  MX_TIM4_Init();
  MX_TIM8_Init();
  /* USER CODE BEGIN 2 */
	__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);

UART handler

void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */
 
  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */
	HAL_UART_Receive_IT(&huart2,rx_data,14);
  /* USER CODE END USART2_IRQn 1 */
}

Hal is not proving variable length string on interupt So I make them fix length of string.

Once I get the data after that sending data via

HAL_UART_Transmit(&huart2, response,11,200);

After that... If any once has any suggetion let me know or also tell me how to debug hard fault or any exceptions.

Thanks in advance 0690X00000AsYS7QAN.jpg

4 REPLIES 4
turboscrew
Senior III

Check what HAL_UART_Receive_IT() actually does. Don't guess.

ASaxe
Associate II

@turboscrew​ Receive an amount of data in interrupt mode. is there anything specific you want to tell tell me because I didn't get your point

turboscrew
Senior III

It doesn't quit do what you expected?

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

{

 /* Check that a Rx process is not already ongoing */

 if (huart->RxState == HAL_UART_STATE_READY)

 {

   if ((pData == NULL) || (Size == 0U))

   {

     return HAL_ERROR;

   }

   /* Process Locked */

   __HAL_LOCK(huart);

   huart->pRxBuffPtr = pData;

   huart->RxXferSize = Size;

   huart->RxXferCount = Size;

   huart->ErrorCode = HAL_UART_ERROR_NONE;

   huart->RxState = HAL_UART_STATE_BUSY_RX;

   /* Process Unlocked */

   __HAL_UNLOCK(huart);

   /* Enable the UART Parity Error Interrupt */

   __HAL_UART_ENABLE_IT(huart, UART_IT_PE);

   /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */

   __HAL_UART_ENABLE_IT(huart, UART_IT_ERR);

   /* Enable the UART Data Register not empty Interrupt */

   __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);

   return HAL_OK;

 }

 else

 {

   return HAL_BUSY;

 }

}

/**

Thanks for you support.

I found the issue.... this because my logic is not working as I expected. or I can say issue in my logic which is leads to a hard fault.