码迷,mamicode.com
首页 > 其他好文 > 详细

利用串口空闲中断接收数据

时间:2018-05-12 02:37:26      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:enable   返回   sig   空闲   handle   received   使用   class   art   

 1 void USART2_IRQHandler(void)
 2 {    
 3           // 使能串口空闲中断
 4              USART_ITConfig(USART2, USART_IT_IDLE , ENABLE);
 5             
 6             if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET)
 7             {
 8                  
 9                 rx_buf[cnt]=USART_ReceiveData(USART2);
10                 rx_rxbuf[cnt] = rx_buf[cnt] ;//把接收到的数组存到备用的数组当中,防止其被新的数值覆盖
11                     rx_rxbuf_i=cnt;//把接收到的数组数目存到备用的数组数目当中,防止其被新的数值覆盖
12                     cnt++;
13               USART_ClearITPendingBit(USART2, USART_IT_RXNE);//清除接收标志位
14             }
15 
16             
17 //如果为空闲总线中断,判断是否发生了空闲总线中断,检测传输的值,若发生传输误差,做出相应的回应处理。
18             
19     if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET)
20     {      
21 //此处为调试信息,把接收到的数据打印到串口1        
22              u8 i_i=0;
23              unsigned short sum_cf=0;
24              printf("\r\n++++++++串口空闲中断+++++++\n\r");
25         
26              USART_ClearITPendingBit(USART2,USART_IT_IDLE); 
27         
28         
29              if((cnt==9)||(cnt==10)||(cnt==11)) 
30                {
31                  
32                printf("\r\n++++++++数据数目大小发送正确+++++++\n\r");
33                             
34                } 
35                else
36                {
37                    
38                    
39                USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);
40                   //此处为调试信息,把接收到的数据打印到串口1        
41                                 
42                 printf("\r\n++++++++数据发错了,重新发送一次+++++++\n\r");
43                  cnt=0;                   
44                  wait=4;                 
45                }                   
46     
47         
48                 if((cnt==9)&&(rx_buf[cnt-1]==32)) 
49                {
50                  USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);
51                  rx_rxbuf_i=cnt;             
52                    wait = 9;
53                      cnt=0;                     
54                 printf("\r\n++++接收到的数据,断开蓝牙的信息++++\n\r");
55                             
56                }    
57         
58               if((cnt==10)&&(rx_buf[cnt-5]==1)&&(ws_1==0)) 
59                {
60                  USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);
61                  rx_rxbuf_i=cnt;         
62                    wait = 2;
63                      cnt=0;                     
64                 printf("\r\n++++接收到的数据,握手信息++++\n\r");
65                             
66                }
67                           
68                if((cnt==11)&&(rx_buf[cnt-6]==2)) 
69                {
70                  USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);
71                    rx_rxbuf_i=cnt; 
72                     wait=3;
73                      cnt=0;  
74                 }    
75             USART_ITConfig(USART2,USART_IT_IDLE,DISABLE);//失能串口空闲中断
76         
77                 
78     }

这个程序是为了使用串口中断接收定长数据,协议里面只有协议头没有协议尾,这个程序解决了使用串口空闲中断就马上进入空闲中断的问题,但返回之后要重新打开串口接受中断才能正常使用。

利用串口空闲中断接收数据

标签:enable   返回   sig   空闲   handle   received   使用   class   art   

原文地址:https://www.cnblogs.com/congchaojie/p/9026962.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!