您的位置:首页 > 其它

stm32串口中断收发数据环形缓冲区的设计

2016-09-03 20:23 435 查看
[cpp] view
plain copy

 





/******************************************************************************* 

* Function Name  : USART2_IRQHandler 

* Description    : This function handles USART2 global interrupt request. 

* Input          : None 

* Output         : None 

* Return         : None 

*******************************************************************************/  

void USART2_IRQHandler(void)  

{      

  BYTE bTByte;  

  WORD wTPsn;  

  

  if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //串口2接收中断  

  {  

    /* Read one byte from the receive data register */  

    bTByte = (USART_ReceiveData(USART2));  

    wTPsn  =  W_InSerial2;  

    if(++wTPsn ==  MAX_SERIAL_LEN2) wTPsn  =  0;//修改指针边界  

    if(wTPsn  !=  W_OutSerial2)  //队列没有满的情况下  

    {  

        B_SerialQueue2[W_InSerial2]  =  bTByte;  

        W_InSerial2  =  wTPsn;  

    }      

    /* Clear the USART2 Receive interrupt */  

    USART_ClearITPendingBit(USART2, USART_IT_RXNE);  

  }  

      

  if(USART_GetITStatus(USART2,USART_IT_TXE)){  //串口2发送中断  

        //此处加入发送串口数据组帧处理  

          

        /* Clear the USART2 Receive interrupt */  

    USART_ClearITPendingBit(USART2, USART_IT_TXE);  

    }  

}  

判断串口是接收中断,还是发送中断,不能

[cpp] view
plain copy

 





else if(USART_GetITStatus(USART2,USART_IT_TXE)){  //串口2发送中断  

只能

[cpp] view
plain copy

 





if(USART_GetITStatus(USART2,USART_IT_TXE)){  //串口2发送中断  

因为如果全双工时是同时收发, 这是会不好处理。

stm32串口中断收发数据环形缓冲区的设计,这里采用的是环形队列做缓冲区。
--> stm32系统初始化要初始化哪些内容?

一般是时钟>中断>外设 

不过stm32初始化之后外设基本全关了,用哪个外设需要先开相应外设的时钟
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: