после нескольких минут работы
USART впадает в кому внутри прерывания:
CODE
static int i = 0;
void USART3_IRQHandler(void)
{
volatile u8 byte;
register u32 status;
status = USART3->SR;
/* Read one byte from the receive data register */
if (status & USART_FLAG_RXNE) {
byte = USART3->DR;
gps_nmea_parse(byte);
}
/* Write one byte to the transmit data register */
if (status & USART_FLAG_TXE) {
/* Disable the USART3 Transmit interrupt */
USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
}
/* OverRun + Noise + Framing + Parity Error */
if (USART3->SR & 0x0F) {
//USART3->SR |= 0xf;
if(i % 500 == 0)
led_toggle(LED3);
byte = USART3->DR;
}
}
void USART3_IRQHandler(void)
{
volatile u8 byte;
register u32 status;
status = USART3->SR;
/* Read one byte from the receive data register */
if (status & USART_FLAG_RXNE) {
byte = USART3->DR;
gps_nmea_parse(byte);
}
/* Write one byte to the transmit data register */
if (status & USART_FLAG_TXE) {
/* Disable the USART3 Transmit interrupt */
USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
}
/* OverRun + Noise + Framing + Parity Error */
if (USART3->SR & 0x0F) {
//USART3->SR |= 0xf;
if(i % 500 == 0)
led_toggle(LED3);
byte = USART3->DR;
}
}
Вертица внутри ошибок OverRun + Noise + Framing + Parity Error
Ошибки не снимаются
В даташите написано, что должны сниматься последовательно чтением
статус регистра и регистра данных.
Не помогает.
В чем может быть засада?