Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32L151 прерывание от UART
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
MiklPolikov
Наблюдаю такую вещь :

Если под отладкой останавливаю программу так что при этом часть получаемых моим UART данных оказывается пропущена(видимо прерывания не обработаны)
то после этого программа всё время заходит в это прерывание, будто бы остался не сброшен его флаг, и больше ничего не делает. Очень мешает при отладке.
Вопрос: почему так происходит ? С другими прерываниями такого никогда не наблюдал.

Код
void USART3_IRQHandler(void)
{
   USART3->SR=0; // сбросили все флаги прерываний
   BLUETOOTH_RECEIVE_BYTE((char*)&(USART3->DR));
   return;
}
A.Lex
У меня работает код

Код
</p><p>void USART3_IRQHandler(void)
{
volatile unsigned int vsr;

    vsr= USART3->SR;
if (vsr& USART_FLAG_RXNE)                  
  {
        USART3->SR &= ~(USART_FLAG_RXNE);  
        Data_R = USART3->DR;    

        USART_ClearITPendingBit(USART3, USART_IT_RXNE);
  }
}  
</p><p>
alexdos
Помимо флага прерывания RXNE существуют флаги ошибок.

ORE, FE, PE, NE - и простой сброс типа "USART3->SR=0; // сбросили все флаги прерываний" не всегда достаточный для того чтоб USART возобновил свою работу адекватно. А в Вашем случае именно они и портят погоду.
MiklPolikov
Цитата(alexdos @ Dec 1 2013, 13:47) *
Помимо флага прерывания RXNE существуют флаги ошибок.

ORE, FE, PE, NE - и простой сброс типа "USART3->SR=0; // сбросили все флаги прерываний" не всегда достаточный для того чтоб USART возобновил свою работу адекватно. А в Вашем случае именно они и портят погоду.


Спасибо, заработало !!! Причём не только это, очень много всего заработало ! laughing.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.