USART_IT_IDLE中断,是串口收到一帧数据后,发生的中断。也可以叫做一包数据
USART_IT_IDLE和USART_IT_RXNE区别
当接收到1个字节,会产生USART_IT_RXNE中断
当接收到一帧数据,就会产生USART_IT_IDLE中断
清中断方法
1//USART_IT_RXNE 2USART_ClearITPendingBit(USART1, USART_IT_RXNE); 3 4//USART_IT_IDLE 5USART1->SR; //先读SR寄存器 6USART1->DR; //再读DR寄存器
使用举例
1u8 count; 2u8 flag; 3 4void uart_init(u32 bound) 5{ 6 ... 7 8 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 9 USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); 10 11 ... 12} 13 14void USART1_IRQHandler(void) 15{ 16 u8 r; 17 18 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) 19 { 20 USART_ClearITPendingBit(USART1, USART_IT_RXNE); //只USART_ReceiveData也可以 21 22 //r = USART_ReceiveData(USART1); 23 24 count++; 25 } 26 else if(USART_GetFlagStatus(USART1, USART_FLAG_IDLE) != RESET) 27 { 28 USART1->SR; 29 USART1->DR; 30 31 flag = 1; 32 } 33} 34 35int main() 36{ 37 while(1) 38 { 39 if(flag == 1) 40 { 41 printf("count %d\r\n", count); 42 43 flag = 0; 44 count = 0; 45 } 46 47 delay_ms(10); 48 } 49}
实验现象
