USART_IT_IDLE中斷,是串口收到一幀數據後,發生的中斷。也能夠叫作一包數據spa
USART_IT_IDLE和USART_IT_RXNE區別
當接收到1個字節,會產生USART_IT_RXNE中斷
當接收到一幀數據,就會產生USART_IT_IDLE中斷code
清中斷方法blog
//USART_IT_RXNE USART_ClearITPendingBit(USART1, USART_IT_RXNE); //USART_IT_IDLE USART1->SR; //先讀SR寄存器 USART1->DR; //再讀DR寄存器
使用舉例it
u8 count; u8 flag; void uart_init(u32 bound) { ... USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); ... } void USART1_IRQHandler(void) { u8 r; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1, USART_IT_RXNE); //只USART_ReceiveData也能夠 //r = USART_ReceiveData(USART1); count++; } else if(USART_GetFlagStatus(USART1, USART_FLAG_IDLE) != RESET) { USART1->SR; USART1->DR; flag = 1; } } int main() { while(1) { if(flag == 1) { printf("count %d\r\n", count); flag = 0; count = 0; } delay_ms(10); } }
實驗現象
class