哈哈哈哈或扩
1 //串口1中断服务程序 2 void USART1_IRQHandler(void) 3 { 4 u8 Res; 5 6 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) 7 { 8 9 Res =USART_ReceiveData(USART1); 10 11 if(USART1_RX_CON < 3) //接收帧头 + 长度 12 { 13 if(USART1_RX_CON == 0) 14 { 15 if(Res == 0xAA) 16 { 17 USART1_RX_CON = 1; 18 } 19 else 20 { 21 22 } 23 }else if(USART1_RX_CON == 1) 24 { 25 if(Res == 0x55) 26 { 27 USART1_RX_CON = 2; 28 } 29 else 30 { 31 USART1_RX_CON = 0; 32 } 33 } 34 else 35 { 36 USART1_RX_LEN = ( Res-1 ); 37 USART1_RX_CON = 3; 38 USART1_RX_CHECKSUM = 0xFF + Res; //0xFF 为 AA 55 校验和 39 } 40 } 41 else //接收数据 42 { 43 if(USART1_RX_CON < USART1_RX_LEN) 44 { 45 USART1_RX_BUF[USART1_RX_CON] = Res; 46 USART1_RX_CON++; 47 USART1_RX_CHECKSUM = USART1_RX_CHECKSUM + Res; 48 } 49 else //判断最后1位 50 { 51 if( Res == USART1_RX_CHECKSUM ) //校验正确 52 { 53 //标记接收完成 54 flag = 1; 55 56 printf("RX:AA 55 08 %x %x %x %x \r\n", USART1_RX_BUF[3], USART1_RX_BUF[4], USART1_RX_BUF[5], USART1_RX_BUF[6]); 57 } 58 else //数据错误 59 { 60 printf("AERR\r\n"); 61 } 62 63 //接收完成,恢复初始状态 64 USART1_RX_CON = 0; 65 USART1_RX_LEN = 0; 66 } 67 } 68 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 69 } 70 }