cstm32interrupt-handlingusart

Interrupt not returning control to main


Hi I'm using STM32G070 nucleo board and I was trying to learn how to use UART with interrupts. I made a simple led blinking program in the main and in the interrupt handler there is a simple echo program. The echo works fine but the led blinking never starts.

Below is my code:

//while loop for led blinking
while(1)
    {
        
        GPIOA->BSRR     |= (GPIO_BSRR_BS5);
        //delaySys is a blocking delay function that takes milli seconds as input
        delaySys(1000);
        GPIOA->BSRR     &=~(GPIO_BSRR_BS5);
        GPIOA->BSRR     |= (GPIO_BSRR_BR5);
        delaySys(1000);
        
    }
    

Next is my interrupt handler

void USART2_IRQHandler()
{
    
    if((USART2->ISR) & (USART_ISR_RXNE_RXFNE))
        {
            
            USART2->TDR = USART2->RDR;
            while(!((USART2->ISR) & (USART_ISR_TC)))
                ;
            NVIC_ClearPendingIRQ(USART2_IRQn);
            
        }
        
    if(((USART2->ISR) & (USART_ISR_TXE_TXFNF)))
    {
        
        //TRANSMISSION COMPLETE
        
        
    }
    
}

Solution

  • Okay I did fix the problem somehow. I had enabled the interrupt for tx before but when I have disabled it, everything works fine. Seems like Tx was sending an interrupt request and was competing with main.