Saltar al contenido

¿Borrar banderas de interrupción USART (UART) en un STM32?

Solución:

Generalmente, solo necesita manejar los indicadores de interrupción que ha habilitado específicamente con USART_ITConfig().

Sin embargo, si habilita la interrupción RXNE (USART_ITConfig(USARTx, USART_IT_RXNE)) luego esto además habilita la interrupción Overrun! Entonces debes manejar ambos.

intmap

Las banderas de USART pueden ser confusas. Hay banderas de estado e interrupciones independientes y comparten nombres similares. Por ejemplo: USART_IT_RXNE y USART_FLAG_RXNE.

Además, existen varios métodos para borrar estas banderas. Por ejemplo, el USART_ClearITPendingBit() La función solo funciona para cuatro (de los diez) indicadores posibles.

Aquí hay un resumen de los indicadores de interrupción y cómo usarlos. Estos son específicos para el STM32F105, pero son representativos:


USART_IT_TXE – “Registro de datos de transmisión vacío”

  • Se borra automáticamente al llamar USART_SendData()

USART_IT_RXNE – “El registro de datos de recepción no está vacío”

  • Se borra automáticamente al llamar USART_ReceiveData(USARTx)

  • Se puede borrar manualmente llamando USART_ClearITPendingBit(USARTx, USART_IT_RXNE)


USART_IT_TC – “Transmisión completa”

  • Se borra automáticamente mediante:

    • USART_GetITStatus(USARTx, USART_IT_TC) seguido por
    • USART_SendData()
  • También se puede borrar manualmente llamando USART_ClearITPendingBit(USARTx, USART_IT_TC)


USART_IT_CTS – “Cambio de CTS”

  • Borrado llamando USART_ClearITPendingBit(USARTx, USART_IT_CTS)

USART_IT_LBD – “LIN Break detectado”

  • Borrado llamando USART_ClearITPendingBit(USARTx, USART_IT_LBD)

USART_IT_PE – “Error de paridad”

  • Autorizado por:
    • USART_GetITStatus(USARTx, USART_IT_PE) seguido por
    • USART_ReceiveData(USARTx)

USART_IT_NE – “Error de ruido”

  • Autorizado por:
    • USART_GetITStatus(USARTx, USART_IT_NE) seguido por
    • USART_ReceiveData(USARTx)

USART_IT_ORE – “Error de desbordamiento”

  • Autorizado por:
    • USART_GetITStatus(USARTx, USART_IT_ORE) seguido por
    • USART_ReceiveData(USARTx)()

USART_IT_IDLE – “Línea inactiva detectada”

  • Autorizado por:
    • USART_GetITStatus(USARTx, USART_IT_IDLE) seguido por
    • USART_ReceiveData(USARTx)()

Solo quiero agregar algo de mi experiencia sobre este problema, sigo las instrucciones:

USART_IT_ORE – “Error de desbordamiento”

Borrado por: USART_GetITStatus (USARTx, USART_IT_ORE) seguido de USART_ReceiveData (USARTx) ()

Parece que no funciona, y el siguiente comando funciona para mí en su lugar:

USART_GetFlagStatus (USARTx, USART_IT_ORE) seguido de USART_ReceiveData (USARTx)

Si observa las funciones:

USART_GetFlagStatus () y USART_ReceiveData ()

Encontrará lo que escribió exactamente Bitsmack antes … “Primero lea el registro USARTx_SR, luego lea el registro USARTx_DR”.

Esperamos que funcione para usted y ahorre mucho más tiempo en este tema. =)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *