STM32F051 Inicialización USART para la recepción

0

He estado intentando que mi USART2 reciba correctamente los datos a través de su pin RX . He configurado los pines PA2 y PA3 de la siguiente manera:

//configuring PA2 (TXD for USART2, pin 8 on board)
GPIOA_OSPEEDR |= (BIT4|BIT5); //FULL SPEED
GPIOA_OTYPER &= ~BIT2; //Push-Pull Transmission
GPIOA_MODER |= BIT5; //Alternate Function Mode, see table 13 on datasheet
GPIOA_AFRL |= BIT8; //AF1 for TX mode enable

//configuring PA3 (RXD for USART2, pin 9 on board)
GPIOA_MODER |= BIT7; //AF Mode
GPIOA_OSPEEDR |= (BIT6|BIT7); //FULL SPEED
GPIOA_AFRL |= BIT12; //AF1 FOR RX Mode enable

y los Registros de control como tales:

USART2_CR1 &= 0x00000000; //Resetting USART 2 for use 
USART2_CR1 |= (BIT6|BIT5|BIT3|BIT2);
USART2_BRR |= BaudRateDivisor; //Writing the Baud Rate
USART2_CR1 |= BIT0; //Write Last after Enabling everything
USART2_CR1 |= BIT2; //Redundancy for Receiving
ISER |= BIT28; //Enable Interrupts for USART2

En mi función principal, tengo un bucle while que comprueba a través del registro USART2_ISR todo el tiempo, verificando si está listo para transmitir o recibir. Dentro está el siguiente código:

// check which interrupt happened.
if ((USART2_ISR & BIT7) == BIT7) // is it a TXE interrupt?
    usart2_tx();

if ((USART2_ISR & BIT5) == BIT5) // is it an RXNE interrupt?
{
    usart2_rx();
}

Solo estoy interesado en Recibir, así que tengo una función que escribe el valor de USART2_RDD en otra variable y parpadea un LED.

void usart2_rx(void)//Reception
{   
    int receive_val;
    receive_val = USART2_RDR;
    USART2_RQR |= BIT3;
    while (USART2_ISR & BIT5)
    {
        receive_val = USART2_RDR;
        USART2_RQR |= BIT3;
    }
    Blink('A',7,1);
}

Después de seguir presionando, asumo que solo detecta un bit de inicio una vez y que no funciona hasta que se reinicia. De acuerdo con el Manual de referencia, una vez que compruebe el bit, debería restablecer el indicador RXNE en el registro USART2_ISR . He intentado escribir un 1 en el registro USART2_RQR para restablecer el indicador RXNE con el mismo resultado. ¿Deshabilitar la ayuda del lado de la transmisión con la depuración de este problema? Dado que no estoy interesado en las interrupciones, ¿ayudaría deshabilitar la interrupción de recepción? Gracias

    
pregunta Rudy Montoya

0 respuestas

Lea otras preguntas en las etiquetas