Привет форумчанам.
Обнаружил, что при использовании модуля USART6 в STM32F407 генерируется прерывание по приему байта в буфер приемника, при этом флаг USART_SR_RXNE в регистре SR не устанавливается. Точнее говоря, видимо устанавливается, поскольку в Keil в отладчике периферии видно, что галка устанавливается. Но при попытке считать его в переменную для дальнейшего анализа причины прерывания он автоматически сбрасывается. Я вижу при входе в прерывание в окне отладчика состояние регистра 0xF0, а после присвоения переменной 0xC0.
Код:
|
void USART6_IRQHandler(void)
{
unsigned long isrflags;
isrflags = MonitorHandle -› Instance -› SR;
if ((isrflags & USART_SR_RXNE) && (MonitorHandle -› Instance -› CR1 & USART_CR1_RXNEIE))
{
}
} |
То есть код обработчика никогда не выполняется, поскольку не создается условия, хотя я вижу, что в регистре данных содержится именно то, что я посылаю в контроллер.
В тоже время, при аналогичном использовании модулей USART1, USART3 и USART3 все работает правильно.
Прочитал STM32F40x and STM32F41x Errata, никаких замечаний по работе USART6 не обнаружил.
Может кто-то сталкивался с подобным?