OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6707|回复: 17

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

[复制链接]

1

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-10-8
在线时间
3 小时
发表于 2017-7-4 08:59:45 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 野驴 于 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("\r\n\r\n");
USART_RX_STA=0;
                }else
                {
                        times++;

  if(times%30==0)
    {LED0=!LED0;
    LED1=!LED1;}
                        delay_ms(10);   
                }
        }         
}
[/mw_shl_code]
这段是仿照 原子哥的串口实验里面的while循环我在中间加入了 USART2的部分。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-10-8
在线时间
3 小时
 楼主| 发表于 2017-7-4 09:01:22 | 显示全部楼层
@正点原子  原子哥来帮帮忙呗,感激不尽
回复

使用道具 举报

28

主题

133

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-11-22
在线时间
66 小时
发表于 2017-7-4 09:09:23 | 显示全部楼层
兄弟,帮你顶一个,你这代码真的看不下去了,可读性太差了,别用寄存器操作的方式,你自己心里明白就行了,少用。
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-10-8
在线时间
3 小时
 楼主| 发表于 2017-7-4 09:11:46 | 显示全部楼层
ARM学员 发表于 2017-7-4 09:09
兄弟,帮你顶一个,你这代码真的看不下去了,可读性太差了,别用寄存器操作的方式,你自己心里明白就行了, ...

不是很懂,很多地方都是看着原子哥的各种例程 粘贴过来的
回复

使用道具 举报

28

主题

133

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-11-22
在线时间
66 小时
发表于 2017-7-4 09:18:16 | 显示全部楼层
野驴 发表于 2017-7-4 09:11
不是很懂,很多地方都是看着原子哥的各种例程 粘贴过来的

尽量少在中断里面做逻辑判断,中断里面只负责接受数据就可以了,在主线程里面再做逻辑处理。
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-10-8
在线时间
3 小时
 楼主| 发表于 2017-7-4 09:38:19 | 显示全部楼层
ARM学员 发表于 2017-7-4 09:18
尽量少在中断里面做逻辑判断,中断里面只负责接受数据就可以了,在主线程里面再做逻辑处理。

恩,您能结合我的问题文字描述 给分析下这段程序我应该如何写么,基本初始化我会,其他的麻烦介绍下,我怎么使不使用中断,使用哪个中断,优先级,还有主函数里面的执行顺序?使用中断还是if
回复

使用道具 举报

13

主题

175

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2016-4-30
在线时间
141 小时
发表于 2017-7-4 09:49:19 | 显示全部楼层
干嘛急着上模块,,先用电脑看串口收发程序是不是正常的。。多看看模块手册。。有些模块要开机时序的。。别人的东西只是参考不是拿过来就能用的
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-6-28
在线时间
7 小时
发表于 2017-7-4 11:24:14 | 显示全部楼层
我也是新手,帮你顶一顶
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-10-8
在线时间
3 小时
 楼主| 发表于 2017-7-4 11:46:01 | 显示全部楼层
执迷 发表于 2017-7-4 09:49
干嘛急着上模块,,先用电脑看串口收发程序是不是正常的。。多看看模块手册。。有些模块要开机时序的。。别 ...

这是公司的东西,必须要这个模块,没办法啊也
回复

使用道具 举报

28

主题

133

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-11-22
在线时间
66 小时
发表于 2017-7-4 13:44:30 | 显示全部楼层
ARM学员 发表于 2017-7-4 09:18
尽量少在中断里面做逻辑判断,中断里面只负责接受数据就可以了,在主线程里面再做逻辑处理。

你都已经工作了,我不信你这些都不知道。随便问一句工作经验几年了,我1年多点。
回复

使用道具 举报

28

主题

133

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-11-22
在线时间
66 小时
发表于 2017-7-4 13:52:13 | 显示全部楼层
野驴 发表于 2017-7-4 11:46
这是公司的东西,必须要这个模块,没办法啊也

公司的东西那更简单了,不会用就问你们的老师傅呀,如果你就是你们公司的一把手的话那就另当别论了。
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2017-6-2
在线时间
5 小时
发表于 2017-7-4 14:05:38 | 显示全部楼层
他这个程序是要在串口调试助手发送数据的时候顺便要按一下回车键,这样单片机就可以正常接收。你可以在中断接收去掉那些判断,这样发送什么就可以接受什么了
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-10-8
在线时间
3 小时
 楼主| 发表于 2017-7-4 15:08:55 | 显示全部楼层
ARM学员 发表于 2017-7-4 13:44
你都已经工作了,我不信你这些都不知道。随便问一句工作经验几年了,我1年多点。

我刚入职一个月不到,公司在我现在这边新设立的办公室,这边就我一个人,其他人我都不知道,我们公司 我只认识老板和财务。
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-10-8
在线时间
3 小时
 楼主| 发表于 2017-7-4 15:10:00 | 显示全部楼层
郝周周 发表于 2017-7-4 14:05
他这个程序是要在串口调试助手发送数据的时候顺便要按一下回车键,这样单片机就可以正常接收。你可以在中断 ...

我用的XCOM发送  我用十六进制看了 默认是有0D 和0A的
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-10-8
在线时间
3 小时
 楼主| 发表于 2017-7-5 08:58:09 | 显示全部楼层
yklstudent 发表于 2017-7-4 15:50
就是个透传作用而已,没有很难啊

是的,我现在是有想法,但是没有实际操作的编程思路,并且,对于3年前仅仅是51入门,之后就没有怎么碰过单片机的人来说,32刚学习一周实在有点懵。
回复

使用道具 举报

4

主题

57

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1760
金钱
1760
注册时间
2017-6-23
在线时间
172 小时
发表于 2017-7-5 13:13:05 | 显示全部楼层
新手帮顶
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-10-8
在线时间
3 小时
 楼主| 发表于 2017-7-5 13:36:58 | 显示全部楼层
yklstudent 发表于 2017-7-5 12:30
慢慢摸索吧,一周时间太短了,急不来

恩,还在摸索中,现在主要就是想来求个方法,能让我的这个串口透传能用,后面还有东西在等着呢
回复

使用道具 举报

12

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2017-2-21
在线时间
49 小时
发表于 2017-7-5 13:44:32 | 显示全部楼层
一步一步来吧,先跟电脑通信,收一串数据立马返回另一串数据,有32和电脑上串口助手就行,
既然是串口协议,不要照搬回车键结束发送,自己定个协议头协议尾。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-17 02:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表