Estoy usando un STM32F105 para comunicarme con un chip GPS Linx usando un UART.
Si no utilizo interrupciones (si solo enciendo el indicador de RX), entonces funciona bien. Pero estoy obteniendo resultados inesperados al intentar usar interrupciones.
Por ejemplo, si solo habilito la interrupción RXNE ("RX not empty") usando USART_ITConfig(USARTx, USART_IT_RXNE)
, entonces el código solo debe incluir el ISR para este evento específico. Pero la interrupción también se está activando para una condición de saturación.
En cuanto a borrar las banderas, parece que el método depende de la bandera.
Para borrar el indicador de saturación ( USART_IT_ORE
), el Manual del usuario explica que primero debo leer el registro USARTx_SR
y luego el registro USARTx_DR
. Esto funciona; la bandera está despejada.
También hay un USART_ClearITPendingBit()
fuction, pero solo acepta un pequeño subconjunto de indicadores.
Hay ocho fuentes de interrupción diferentes que se pueden habilitar de forma selectiva y diez indicadores diferentes. ¿Hay algún resumen en algún lugar sobre cómo administrar todas estas banderas?