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

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

发布时间:2020-05-22 发布时间:
|

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++;  

  }

}



关键字:stm3  端口  重映射  串口

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

热门文章 更多
关于89C52单片机11.0592M晶振产生115200波特率的方法