×
单片机 > 单片机程序设计 > 详情

USART发送与接收无意识中断嵌套

发布时间:2020-08-26 发布时间:
|
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 } 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法