stm32端口“重映射” &&串口学习

1.这段代码实现了串口的重映射,即将RFID串口(连接PC的串口)与sim900A的串口进行了重映射!

也就是说将PC发送的数据给RFID的串口,将  RFID的串口接收到的PC数据通过sim900A的串口发送出去。

然后sim900A的串口接收来自服务器的数据,然后返回给RFID的串口,RFID的串口的再将服务器的数据返回给PC


部分程序如下:

 GPRS_ON();

  Start_GPRS();
  //AT+CIPSTART="TCP","60.186.20.162","5002"
   while(1)
   {
     if( re_ok)
     { re_ok=0;
       Delay_10ms(30);//延时要充分必须的100 change  30   
       Clear_GPRS_ReBuffer();
       GPRS_SendString(USART_RX_BUF);
       Delay_10ms(100);
       Clear_RFID_ReBuffer();
     }
     if( re_gprs)
     { 
       re_gprs=0;
       RFID_SendString(GPRS_ReBuffer);
       Delay_10ms(100);
     } 

   }

2.

中断程序如下:

void USART1_IRQHandler(void)                 //串口1中断服务程序(这两个串口接收程序都可以正确接收串口的程序)
{
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
    {
      re_ok=1;

      //USART_ReceiveData(USART1) 表示清除中断位

      Res =(USART_ReceiveData(USART1) & 0x7F);//(USART1->DR);//读取接收到的数据
  
      USART_RX_BUF[USART_RX_STA]=Res ;
      USART_RX_STA++;
    }
  
/*  
   if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
    {
      re_ok=1;
      Res =USART_ReceiveData(USART1);//(USART1->DR);//读取接收到的数据
      if((USART_RX_STA&0x8000)==0)//接收未完成
       {
        if(USART_RX_STA&0x4000)//接收到了0x0d
        {
            if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
            else USART_RX_STA|=0x8000; //接收完成了 
        }
        else //还没收到0X0D
        {
            if(Res==0x0d)USART_RX_STA|=0x4000;
            else
            {
                    USART_RX_BUF[USART_RX_STA&0X3FFF]=Res;
                    USART_RX_STA++;
                    if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 
            }  
        }
      }  
    }
  */
}
/*******************************************************************************
* Function Name  : USART2_IRQHandler
* Description    : This function handles USART2 global interrupt request.
                 : for GPRS
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void USART2_IRQHandler(void)
{ if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
  {
     re_gprs=1;
     res=(USART_ReceiveData(USART2) & 0x7F);//读取接收到的字符
      GPRS_ReBuffer[Rx]=res;
      Rx++;  
  }
}




你可能感兴趣的:(学习,串口,stm32)