Estou usando um STM32F105 para me comunicar com um chip GPS Linx usando um UART.
Se eu não usar interrupções (se eu apenas pesquisar o sinalizador RX), ele funcionará perfeitamente. Mas estou obtendo resultados inesperados ao tentar usar interrupções.
Por exemplo, se eu habilitar apenas a interrupção do RXNE ("O RX não está vazio") usando USART_ITConfig(USARTx, USART_IT_RXNE)
, o código deverá ser vetorizado apenas para o ISR para esse evento específico. Mas a interrupção também está sendo acionada para uma condição de superação.
Tanto quanto limpar as bandeiras, parece que o método depende da bandeira. Para limpar o sinalizador Overrun ( USART_IT_ORE
), o Manual do Usuário explica que eu deveria primeiro ler o USARTx_SR
registro e, em seguida, ler o USARTx_DR
registro. Isso funciona; a bandeira está limpa.
Há também uma USART_ClearITPendingBit()
função, mas ela aceita apenas um pequeno subconjunto de sinalizadores.
Existem oito fontes de interrupção diferentes que podem ser ativadas seletivamente e dez sinalizadores diferentes. Existe um resumo em algum lugar de como gerenciar todos esses sinalizadores?