Question
Enabling UART transmit complete interrupt generates an unexpected interrupt
I'm using UART to send message. To prevent data race, I'd like to first disable then enable transmit complete interrupt when trying sending more data. But enabling transmit complete interrupt generates an unexpect interrupt.
static volatile bool g_sendDone;
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
g_sendDone = true;
}
static void EnterCritical() {
__HAL_UART_DISABLE_IT(&huart1, UART_IT_TC);
}
static void ExitCritical() {
__HAL_UART_ENABLE_IT(&huart1, UART_IT_TC);
}
void TrySend() { // run periodically
EnterCritical();
if (g_sendDone) {
// meant to send more
// doing nothing here also triggers HAL_UART_TxCpltCallback
}
ExitCritical(); // calls HAL_UART_TxCpltCallback after this line, even if there is no transmission
}
Is there a good way to disable and enable transmit complete interrupt, and leave other interrupts enabled, such as transmit register empty interrupt?
