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

/*******************************************************************************
* 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);
	}
}

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

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

只能
 if(USART_GetITStatus(USART2,USART_IT_TXE)){  //串口2发送中断
因为如果全双工时是同时收发, 这是会不好处理。
stm32串口中断收发数据环形缓冲区的设计,这里采用的是环形队列做缓冲区。
--> stm32系统初始化要初始化哪些内容?
一般是时钟>中断>外设 
不过stm32初始化之后外设基本全关了,用哪个外设需要先开相应外设的时钟






你可能感兴趣的:(ARM,ARM,STM32F10X,问题记录,C语言)