OpenEdv-开源电子网

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

串口1向串口2发送数据,串口2收到数据后会出现很多乱码

[复制链接]

11

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-5-4
在线时间
3 小时
发表于 2014-8-12 11:05:24 | 显示全部楼层 |阅读模式
5金钱
我是在原子哥的代码上做的一个实验,是用串口1向串口2发送数据,然后再通过串口2发送出去,串口2的代码是用战舰板上蓝牙模块实验的串口2代码,我只是修改了一下main函数的内容,但实验现象是,我从串口1发送0123456789,然后串口2收到我发来的0123456789之后,会出现很多乱码,还有一种现象是只收到一大段的0D 0A  0D 0A...............这些,不知道是哪里出现了问题,请求大家帮忙看看是哪里出现了问题,谢谢!
下面是main函数程序





#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart2.h"
#include "usart.h"
#include "string.h"




 int main(void)
 {
     u16 times=0;
     
     u16 i,rxlen;


delay_init();     //延时函数初始化  
  LED_Init();     //LED端口初始化
KEY_Init();          //初始化与按键连接的硬件接口
uart_init(9600);
     USART2_Init(9600);
NVIC_Configuration();
     
    while(1) 
{  
     delay_ms(1);
        //用这一种方式向串口2发送数据(0123456789),串口2收到发来的数据后跟着会出现很多乱码
       if(USART_RX_STA&0x8000)     //接收到一次数据了
{   
rxlen=USART_RX_STA&0x7fff;//得到此次接收到的数据长度
          
for(i=0;i<rxlen;i++)
{
               
USART_SendData(USART2, USART_RX_BUF);//向串口2发送数据
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
}
            printf("%s\t\n",USART_RX_BUF);
         
            USART_RX_STA=0;
            
}else
{
times++;
if(times%100==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);   

        
     /*  
        //用这一种方式向串口2发送数据(0123456789),串口2收到的是一大段0D 0A 0D 0A.......
if(USART_RX_STA&0X8000) //接收到一次数据了
{
rxlen=USART_RX_STA&0X7FFF; //得到数据长度
for(i=0;i<rxlen;i++)USART2_TX_BUF=USART_RX_BUF;   
  USART_RX_STA=0;   //启动下一次接收
USART2_TX_BUF=0; //自动添加结束符



                u2_printf("\r\n%s\r\n",USART2_TX_BUF);//发送接收到的数据到串口2
  }
        else
{
times++;
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);   
}
        */
        
    }
 }

最佳答案

查看完整内容[请看2#楼]

回复【2楼】psrazil: --------------------------------- 问题解决了,把rxlen=USART_RX_STA&0x7fff;  这一句改成  rxlen=USART_RX_STA&0x3fff;  就可以了。串口1的中断服务程序里面用的是3FFF,两个长度应该要保持一致
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-5-4
在线时间
3 小时
 楼主| 发表于 2014-8-12 11:05:25 | 显示全部楼层
回复【2楼】psrazil:
---------------------------------
问题解决了,把rxlen=USART_RX_STA&0x7fff;  这一句改成  rxlen=USART_RX_STA&0x3fff;  就可以了。串口1的中断服务程序里面用的是3FFF,两个长度应该要保持一致
回复

使用道具 举报

9

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2014-7-18
在线时间
0 小时
发表于 2014-8-12 11:17:04 | 显示全部楼层
我的也是会。      
请问 原子哥  那个 0x0d  0x0a  是加在要发送的数组最后是吗
Stm32 F0/F103
回复

使用道具 举报

0

主题

20

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-8-21
在线时间
4 小时
发表于 2014-8-21 12:49:12 | 显示全部楼层
回复【3楼】冰冷de名人:
---------------------------------
你好 我按你的方法做了一下 你有没有发现第一种方式的发送的字符串01234第一个字符丢失了 只传过去1234 而且如果想在U2上加入回车换行的话 第一个字符都会丢失 能给分析下原因 找到解决办法吗?第二种方式就不存在这个问题
回复

使用道具 举报

11

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2013-5-4
在线时间
3 小时
 楼主| 发表于 2014-8-21 23:28:58 | 显示全部楼层
回复【4楼】huanying:
---------------------------------
http://wenku.baidu.com/link?url=JzdeL2s-e_YORm1DIqOHH-APkvk6jVB8dtbjnKV2vIdmOYKtuFQqH5v3MdkIc3NU9eKSQYyu1N4K6ba5Yaf6NHUX4Y42yXeByHG1uA5LwJ_


进上面网址,里面有介绍
回复

使用道具 举报

0

主题

20

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-8-21
在线时间
4 小时
发表于 2014-8-22 10:49:29 | 显示全部楼层
回复【5楼】冰冷de名人:
---------------------------------
好的 谢谢问题已解决  交换一下 发送数据和等待发送结束 两句的位置也可以
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-1-20
在线时间
0 小时
发表于 2015-3-25 21:20:47 | 显示全部楼层
回复【3楼】冰冷de名人:
---------------------------------
朋友,我也在学习是用串口1向串口2发送数据,然后再通过串口2发送出去,能不能给你的程序学习一下
活到老,学到老
回复

使用道具 举报

13

主题

201

帖子

0

精华

高级会员

Rank: 4

积分
671
金钱
671
注册时间
2015-4-26
在线时间
173 小时
发表于 2016-1-6 10:58:56 | 显示全部楼层
朋友,我也在学习是用串口1向串口2发送数据,然后再通过串口2发送出去,能不能给你的程序学习一下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 22:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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