Saya menggunakan STM32F105 untuk berkomunikasi dengan chip GPS Linx menggunakan UART.
Jika saya tidak menggunakan interupsi (jika saya hanya polling flag RX) maka itu berfungsi dengan baik. Tapi saya mendapatkan hasil yang tidak terduga ketika mencoba menggunakan interupsi.
Misalnya, jika saya hanya mengaktifkan interupsi menggunakan RXNE ("RX not empty") USART_ITConfig(USARTx, USART_IT_RXNE)
, maka kode seharusnya hanya vektor ke ISR untuk acara khusus yang satu ini. Tetapi interupsi dipicu untuk kondisi Overrun juga.
Sejauh membersihkan bendera, tampaknya metode ini tergantung pada bendera. Untuk menghapus flag Overrun ( USART_IT_ORE
), Manual Pengguna menjelaskan bahwa saya harus membaca USARTx_SR
register terlebih dahulu , kemudian membaca USARTx_DR
register. Ini berhasil; bendera dikosongkan.
Ada juga USART_ClearITPendingBit()
fungsi, tetapi hanya menerima sebagian kecil flag.
Ada delapan sumber interupsi berbeda yang dapat diaktifkan secara selektif, dan sepuluh flag berbeda. Apakah ada ringkasan tentang cara mengelola semua bendera ini?