关于STM32F103RCT6的串口1和串口2的数据转发问题

2019-08-17 03:25发布

本帖最后由 野驴 于 2017-7-4 15:13 编辑

本人32小白一个,刚刚因为需要调试一个东西接触到32,并且对单片机编程以前学过但是好久没碰了,现在使用32有些问题来求教。
我手里的东西 是一块32rct6与一个sim卡模块相连(USART2),我需要在电脑上连接32的USART1发送AT指令然后32通过串口2转给SIM卡模块,
SIM卡模块接收到AT指令会有一个返回,然后32 接收串口2 发回的数据在从串口1 发送给电脑,但是现在试了很多方法都不行,(可能我的想法就是有问题的)
我粘贴部分代码上来,求大神给看看。
[mw_shl_code=applescript,true]void USART2_IRQHandler(void)
{
u8 Rec;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
  Rec =USART_ReceiveData(USART2);
  if((USART2_RX_STA&0x8000)==0)//½óêÕÎ′íê3é  
{
   if(USART2_RX_STA&0x4000)//½óêÕμ½áË0x0d
  {
    if(Rec!=0x0a)USART2_RX_STA=0;
    else USART2_RX_STA|=0x8000;
  }
else
                                {        
                                if(Rec==0x0d)USART2_RX_STA|=0x4000;
                                else
                                        {
                                        USART_RX_BUF[USART2_RX_STA&0X3FFF]=Rec ;
                                        USART2_RX_STA++;
                                        if(USART2_RX_STA>(USART_REC_LEN-1))USART2_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ         
                                        }                 
                                }
                        }                    
     }         
}[/mw_shl_code]
上面这段是仿照原子的USART.c里面写的一个串口2 的中断函数。
USART1抢断优先级3 子优先级3  USART2的抢断优先级3 子优先级2.
[mw_shl_code=c,true]        if(USART_RX_STA&0x8000)
                {                                          
                        len=USART_RX_STA&0x3fff;
                        printf("USART1::");

                        for(t=0;t<len;t++)
                        {
                                USART2->DR=USART_RX_BUF[t];
                                USART1->DR=USART_RX_BUF[t];
                                while((USART1->SR&0X40)==0);
                                if(USART2_RX_STA&0x8000)
                                {
                                        len2=USART2_RX_STA&0x3fff;
                                        printf("USART2::");
                                        for(t=0;t<len2;t++)
                                        {
                                                USART1->DR=USART_RX_BUF[t];
                                                while((USART1->SR&0X40)==0);
                                        }
                                }
                        }
                        printf(" ");
USART_RX_STA=0;
                }else
                {
                        times++;

  if(times%30==0)
    {LED0=!LED0;
    LED1=!LED1;}
                        delay_ms(10);   
                }
        }         
}
[/mw_shl_code]
这段是仿照 原子哥的串口实验里面的while循环我在中间加入了 USART2的部分。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。