J'utilise un STM32F105 pour communiquer avec une puce GPS Linx à l'aide d'un UART.
Si je n'utilise pas d'interruptions (si j'interroge simplement l'indicateur RX), cela fonctionne très bien. Mais j'obtiens des résultats inattendus lorsque j'essaie d'utiliser des interruptions.
Par exemple, si j'active uniquement l'interruption RXNE ("RX not empty") à l'aide USART_ITConfig(USARTx, USART_IT_RXNE)
, le code ne doit être vecteur que vers l'ISR pour cet événement spécifique. Mais l'interruption est également déclenchée pour une condition de dépassement.
En ce qui concerne la suppression des drapeaux, il semble que la méthode dépende du drapeau. Pour effacer l'indicateur de dépassement ( USART_IT_ORE
), le manuel de l'utilisateur explique que je devrais d'abord lire le USARTx_SR
registre, puis lire le USARTx_DR
registre. Cela fonctionne; le drapeau est effacé.
Il existe également une USART_ClearITPendingBit()
fonction, mais elle n'accepte qu'un petit sous-ensemble de drapeaux.
Il existe huit sources d'interruption différentes qui peuvent être activées de manière sélective et dix drapeaux différents. Y a-t-il un résumé quelque part de la façon de gérer tous ces indicateurs?