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

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  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. }  

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

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. else if(USART_GetITStatus(USART2,USART_IT_TXE)){  //串口2发送中断  

只能
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. if(USART_GetITStatus(USART2,USART_IT_TXE)){  //串口2发送中断  
因为如果全双工时是同时收发, 这是会不好处理。
stm32串口中断收发数据环形缓冲区的设计,这里采用的是环形队列做缓冲区。
--> stm32系统初始化要初始化哪些内容?
一般是时钟>中断>外设 
不过stm32初始化之后外设基本全关了,用哪个外设需要先开相应外设的时钟
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值