Камень STM32F303CB.Принимаю данные
Код
void USART2_IRQHandler(void)
{
if ((USART2->ISR & USART_ISR_RXNE) != RESET)
{
uint8_t chr = USART2->RDR;
if (chr == '\r')
{
usart2_rx_buf[usart2_rx_idx] = '\0';
usart2_rx_idx = 0;
usart2_rx_ready = 1;
}
else
{
if(usart2_rx_idx < RX2_BUFFERSIZE) //no overflow
{
usart2_rx_buf[usart2_rx_idx] = chr;
usart2_rx_idx++;
}
else
usart2_rx_overflow = 1;
}
}
}
после рисета первый раз я попадаю в условие USART2->ISR & USART_ISR_RXNE - в регистре ISR я вижу RXNE = 1.
И все - все последующте разы я не захожу в условие так как RXNE = 0.
В документации написано что при приеме данных в USART2->RDR флаг взводиться RXNE = 1 а при чтении из USART2->RDR - флаг очищается RXNE =0.
Что я делаю не так?
Еще такая проблема - я все время захожу в USART2_IRQHandler - даже когда размыкаю провод RX - хотя у меня включено только одно прерывание - по принятию -
Код
USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);
NVIC_EnableIRQ(USART2_IRQn);
Сообщение отредактировал Jenya7 - Aug 31 2018, 11:58