Estoy usando un STM32F105 para comunicarme con un chip GPS Linx usando un UART.
Si no uso interrupciones (si solo sondeo el indicador RX), entonces funciona bien. Pero obtengo resultados inesperados cuando trato de usar interrupciones.
Por ejemplo, si solo habilito el uso de la interrupción RXNE ("RX no está vacío") USART_ITConfig(USARTx, USART_IT_RXNE)
, el código solo debería vectorizar al ISR para este evento específico. Pero la interrupción también se activa por una condición de Desbordamiento.
En cuanto a borrar las banderas, parece que el método depende de la bandera. Para borrar la bandera de Desbordamiento ( USART_IT_ORE
), el Manual del usuario explica que primero debería leer el USARTx_SR
registro y luego leer el USARTx_DR
registro. Esto funciona La bandera se borra.
También hay una USART_ClearITPendingBit()
función, pero solo acepta un pequeño subconjunto de banderas.
Hay ocho fuentes de interrupción diferentes que se pueden habilitar selectivamente y diez banderas diferentes. ¿Hay algún resumen en alguna parte sobre cómo administrar todas estas banderas?