前言
这两天复习了串口通讯,复习到串口中断的时候感觉很绕,各种标志位代表什么意思?还有这些标志位怎么清除?什么时候清除?搞得我很头疼。这个做一个记录。
探究过程
1、发现问题
在向串口发送一字节数据后,LED亮了两次。我只发送一个字节,但却亮了两次,说明产生了两次串口接收中断。为什么会有两次串口接收中断?附上串口中断服务函数:
void USART1_IRQHandler(void){
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){
USART_ClearITPendingBit(USART1, USART_IT_RXNE); //如果没有清除,就会一直进入接收中断,因为后面既没有将RXNE写0,也没有读USART_DR寄存器,RXNE会一直为1。
USART_SendBit(USART1,'A'); //写USART_DR寄存器,没有读USART_DR寄存器,不会清除RXNE位
LED_Open();<