01 void USART1_IRQHandler(void)
02 {
03 static u8 i;
04 const u8 BufferSize = 20;
05 static u8 Counter = 0, index = 0;
06 static u8 RxBuffer[BufferSize];
07 static u8 TxBuffer[BufferSize];
08
09 if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
10 {
11 RxBuffer[Counter] = USART_ReceiveData(USART1);
12 Counter++;//不会出错
13 if (0x0A == RxBuffer[Counter - 1] && 0x0D == RxBuffer[Counter - 2])
14 {
15 for (i = 0; i
16 TxBuffer[i] = RxBuffer[i];
17 Counter = 0;
18 USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
19 }
20 //Counter++; 发送中断后,将导致RxBuffer[0] == RxBuffer[1],
21
22 //因为当打开USART_IT_TXE中断后,将立即触发发送中断,形成中断嵌套,而发送中断程序为完毕后将继续执行此行。
23
24 }
25
26 if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET)//发送中断
27 {
28 USART_SendData(USART1, TxBuffer[index++]);
29 if (index == i)
30 {
31 index = 0;
32 USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
33 }
34 }
35 }
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』