【玩转X-CTR100】X-Assistant串口助手控制功能

 哈哈哈哈或扩

 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 }

猜你喜欢

转载自www.cnblogs.com/xtark/p/8972023.html