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

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

发布时间:2020-08-21 发布时间:
|
  1. /******************************************************************************* 

  2. * Function Name  : USART2_IRQHandler 

  3. * Description    : This function handles USART2 global interrupt request. 

  4. * Input          : None 

  5. * Output         : None 

  6. * Return         : None 

  7. *******************************************************************************/  

  8. void USART2_IRQHandler(void)  

  9. {      

  10.   BYTE bTByte;  

  11.   WORD wTPsn;  

  12.   

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

  14.   {  

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

  16.     bTByte = (USART_ReceiveData(USART2));  

  17.     wTPsn  =  W_InSerial2;  

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

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

  20.     {  

  21.         B_SerialQueue2[W_InSerial2]  =  bTByte;  

  22.         W_InSerial2  =  wTPsn;  

  23.     }      

  24.     /* Clear the USART2 Receive interrupt */  

  25.     USART_ClearITPendingBit(USART2, USART_IT_RXNE);  

  26.   }  

  27.       

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

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

  30.           

  31.         /* Clear the USART2 Receive interrupt */  

  32.     USART_ClearITPendingBit(USART2, USART_IT_TXE);  

  33.     }  

  34. }  

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


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


只能


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

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

stm32串口中断收发数据环形缓冲区的设计,这里采用的是环形队列做缓冲区。

--> stm32系统初始化要初始化哪些内容?
一般是时钟>中断>外设 
不过stm32初始化之后外设基本全关了,用哪个外设需要先开相应外设的时钟



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

热门文章 更多
ARM 汇编的必知必会