关于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的部分。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
野驴
1楼-- · 2019-08-18 23:06
郝周周 发表于 2017-7-4 14:05
他这个程序是要在串口调试助手发送数据的时候顺便要按一下回车键,这样单片机就可以正常接收。你可以在中断 ...

我用的XCOM发送  我用十六进制看了 默认是有0D 和0A的
野驴
2楼-- · 2019-08-19 03:38
yklstudent 发表于 2017-7-4 15:50
就是个透传作用而已,没有很难啊

是的,我现在是有想法,但是没有实际操作的编程思路,并且,对于3年前仅仅是51入门,之后就没有怎么碰过单片机的人来说,32刚学习一周实在有点懵。
肩上的月光
3楼-- · 2019-08-19 07:59
 精彩回答 2  元偷偷看……
野驴
4楼-- · 2019-08-19 08:15
yklstudent 发表于 2017-7-5 12:30
慢慢摸索吧,一周时间太短了,急不来

恩,还在摸索中,现在主要就是想来求个方法,能让我的这个串口透传能用,后面还有东西在等着呢
我是路人甲
5楼-- · 2019-08-19 09:30
一步一步来吧,先跟电脑通信,收一串数据立马返回另一串数据,有32和电脑上串口助手就行,
既然是串口协议,不要照搬回车键结束发送,自己定个协议头协议尾。

一周热门 更多>