Я использую STM32F105 для связи с чипом Linx GPS с помощью UART.
Если я не использую прерывания (если я просто опрашиваю флаг RX), то это работает просто отлично. Но я получаю неожиданные результаты, когда пытаюсь использовать прерывания.
Например, если я включаю только прерывание RXNE («RX not empty») USART_ITConfig(USARTx, USART_IT_RXNE)
, то код должен передавать вектор ISR только для этого одного конкретного события. Но прерывание срабатывает и для условия переполнения.
Что касается очистки флагов, кажется, что метод зависит от флага. Чтобы снять флажок Overrun ( USART_IT_ORE
), в Руководстве пользователя объясняется, что я должен сначала прочитать USARTx_SR
регистр, а затем прочитать USARTx_DR
регистр. Это работает; флаг очищен
Существует также USART_ClearITPendingBit()
функция, но она принимает только небольшое подмножество флагов.
Существует восемь различных источников прерываний, которые можно выборочно включить, и десять различных флагов. Есть ли где-нибудь краткое изложение того, как управлять всеми этими флагами?