void stm32_USART1_IRQ(void) { bool resched = false; arm_cm_irq_entry(); /* UART parity error interrupt occurred -------------------------------------*/ if ((__HAL_UART_GET_IT(&handle, UART_IT_PE) != RESET) && (__HAL_UART_GET_IT_SOURCE(&handle, UART_IT_PE) != RESET)) { __HAL_UART_CLEAR_PEFLAG(&handle); printf("UART PARITY ERROR\n"); } /* UART frame error interrupt occurred --------------------------------------*/ if ((__HAL_UART_GET_IT(&handle, UART_IT_FE) != RESET) && (__HAL_UART_GET_IT_SOURCE(&handle, UART_IT_ERR) != RESET)) { __HAL_UART_CLEAR_FEFLAG(&handle); printf("UART FRAME ERROR\n"); } /* UART noise error interrupt occurred --------------------------------------*/ if ((__HAL_UART_GET_IT(&handle, UART_IT_NE) != RESET) && (__HAL_UART_GET_IT_SOURCE(&handle, UART_IT_ERR) != RESET)) { __HAL_UART_CLEAR_NEFLAG(&handle); printf("UART NOISE ERROR\n"); } /* UART Over-Run interrupt occurred -----------------------------------------*/ if ((__HAL_UART_GET_IT(&handle, UART_IT_ORE) != RESET) && (__HAL_UART_GET_IT_SOURCE(&handle, UART_IT_ERR) != RESET)) { __HAL_UART_CLEAR_OREFLAG(&handle); printf("UART OVERRUN ERROR\n"); } /* UART in mode Receiver ---------------------------------------------------*/ if ((__HAL_UART_GET_IT(&handle, UART_IT_RXNE) != RESET) && (__HAL_UART_GET_IT_SOURCE(&handle, UART_IT_RXNE) != RESET)) { /* we got a character */ uint8_t c = (uint8_t)(handle.Instance->RDR & 0xff); if (cbuf_write_char(&uart1_rx_buf, c, false) != 1) { printf("WARNING: uart cbuf overrun!\n"); } resched = true; /* Clear RXNE interrupt flag */ __HAL_UART_SEND_REQ(&handle, UART_RXDATA_FLUSH_REQUEST); } /* UART in mode Transmitter ------------------------------------------------*/ if ((__HAL_UART_GET_IT(&handle, UART_IT_TXE) != RESET) &&(__HAL_UART_GET_IT_SOURCE(&handle, UART_IT_TXE) != RESET)) { ; } /* UART in mode Transmitter (transmission end) -----------------------------*/ if ((__HAL_UART_GET_IT(&handle, UART_IT_TC) != RESET) &&(__HAL_UART_GET_IT_SOURCE(&handle, UART_IT_TC) != RESET)) { ; } arm_cm_irq_exit(resched); }
static void TM_USART_INT_ClearAllFlags(USART_TypeDef* USARTx, IRQn_Type irq) { UART_Handle.Instance = USARTx; #ifdef __HAL_UART_CLEAR_PEFLAG __HAL_UART_CLEAR_PEFLAG(&UART_Handle); #endif #ifdef __HAL_UART_CLEAR_FEFLAG __HAL_UART_CLEAR_FEFLAG(&UART_Handle); #endif #ifdef __HAL_UART_CLEAR_NEFLAG __HAL_UART_CLEAR_NEFLAG(&UART_Handle); #endif #ifdef __HAL_UART_CLEAR_OREFLAG __HAL_UART_CLEAR_OREFLAG(&UART_Handle); #endif #ifdef __HAL_UART_CLEAR_IDLEFLAG __HAL_UART_CLEAR_IDLEFLAG(&UART_Handle); #endif /* Clear IRQ bit */ HAL_NVIC_ClearPendingIRQ(irq); }
void CommUartIrqHandler(UART_HandleTypeDef *huart) { uint32_t tmp_flag = 0, tmp_it_source = 0; tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_PE); tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_PE); /* UART parity error interrupt occurred ------------------------------------*/ if ((tmp_flag != RESET) && (tmp_it_source != RESET)) { __HAL_UART_CLEAR_PEFLAG(huart); huart->ErrorCode |= HAL_UART_ERROR_PE; } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_FE); tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR); /* UART frame error interrupt occurred -------------------------------------*/ if ((tmp_flag != RESET) && (tmp_it_source != RESET)) { __HAL_UART_CLEAR_FEFLAG(huart); huart->ErrorCode |= HAL_UART_ERROR_FE; } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_NE); /* UART noise error interrupt occurred -------------------------------------*/ if ((tmp_flag != RESET) && (tmp_it_source != RESET)) { __HAL_UART_CLEAR_NEFLAG(huart); huart->ErrorCode |= HAL_UART_ERROR_NE; } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_ORE); /* UART Over-Run interrupt occurred ----------------------------------------*/ if ((tmp_flag != RESET) && (tmp_it_source != RESET)) { __HAL_UART_CLEAR_OREFLAG(huart); huart->ErrorCode |= HAL_UART_ERROR_ORE; } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE); tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE); /* UART in mode Receiver ---------------------------------------------------*/ if ((tmp_flag != RESET) && (tmp_it_source != RESET)) { CommUartRxIrqProcess(huart); } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_TXE); tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_TXE); /* UART in mode Transmitter ------------------------------------------------*/ if ((tmp_flag != RESET) && (tmp_it_source != RESET)) { CommUartTxIrqProcess(huart); } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_TC); tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_TC); /* UART in mode Transmitter end --------------------------------------------*/ if ((tmp_flag != RESET) && (tmp_it_source != RESET)) { } if (huart->ErrorCode != HAL_UART_ERROR_NONE) { /* Set the UART state ready to be able to start again the process */ huart->State = HAL_UART_STATE_READY; HAL_UART_ErrorCallback(huart); } }