OpenEdv-开源电子网

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

2个串口互相发码,出现乱码

[复制链接]

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-5-19
在线时间
33 小时
发表于 2017-5-22 09:33:20 | 显示全部楼层 |阅读模式
1金钱
void USART2_IRQHandler(void)
{
        u8 res;
         if(USART_GetITStatus(USART2,USART_IT_RXNE))
     {
         res= USART_ReceiveData(USART2);
         USART_SendData(USART1,res);
         printf("qwer");
         USART_SendData(USART1,0x02);         
        }
}

复用了2个串口(USART1和USART2),想通过触摸屏按某个坐标,通过串口2接收到串口调试助手发来的数据,进入串口2中断程序,给串口1发送"qwer",但是在串口调试助手接收到乱码
   这是发送了3次的。"USART_IT_RXNE"自定义寄存器,整个寄存器的定义每个位的解释在哪,给的资料里面没找到
望吧内大神指导,还有原子哥帮我解释一下

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

使用道具 举报

1

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
286
金钱
286
注册时间
2017-5-15
在线时间
42 小时
发表于 2017-5-22 09:54:10 | 显示全部楼层
USART_SendData(USART1,res);
USART_SendData(USART1,0x02);
这两句去掉,寄存器定义看STM32的用户手册
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-5-19
在线时间
33 小时
 楼主| 发表于 2017-5-22 13:28:55 | 显示全部楼层
板板 发表于 2017-5-22 09:54
USART_SendData(USART1,res);
USART_SendData(USART1,0x02);
这两句去掉,寄存器定义看STM32的用户手册

我是想让它将数据发到串口2

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);        //ê1ÄüUSART1£¬GPIOAê±Ö
                //USART1_TX   GPIOA.9
        GPIO_PinRemapConfig(GPIO_Remap_USART2, DISABLE);
  GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_2; //PA.9
  GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_AF_PP;        //¸′óÃíÆíìêä3ö
  GPIO_Init(GPIOA, &GPIO_InitStructure2);//3õê¼»ˉGPIOA.9
   
  //USART1_RX          GPIOA.103õê¼»ˉ
  GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_3;//PA10
  GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿Õêäèë
  GPIO_Init(GPIOA, &GPIO_InitStructure2);//3õê¼»ˉGPIOA.10  
       
  NVIC_InitStructure2.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure2.NVIC_IRQChannelPreemptionPriority=1 ;//ÇàÕ¼óÅÏè¼¶3
        NVIC_InitStructure2.NVIC_IRQChannelSubPriority = 1;                //×óóÅÏè¼¶3
        NVIC_InitStructure2.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1Äü
        NVIC_Init(&NVIC_InitStructure2);        //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷

        USART_InitStructure2.USART_BaudRate = 38400;//′®¿ú2¨ìØÂê
        USART_InitStructure2.USART_WordLength = USART_WordLength_8b;//×Ö3¤Îa8λêy¾Y¸ñê½
        USART_InitStructure2.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
        USART_InitStructure2.USART_Parity = USART_Parity_No;//ÎTÆæÅ¼D£Ñéλ
        USART_InitStructure2.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼têy¾Yá÷¿ØÖÆ
        USART_InitStructure2.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //êÕ·¢Ä£ê½

  USART_Init(USART2, &USART_InitStructure2); //3õê¼»ˉ′®¿ú1
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//¿aÆô′®¿ú½óêüÖD¶Ï
  USART_Cmd(USART2, ENABLE);
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-5-19
在线时间
33 小时
 楼主| 发表于 2017-5-22 13:31:25 | 显示全部楼层
Xrunovingo 发表于 2017-5-22 13:28
我是想让它将数据发到串口2

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);        //ê1Äü ...

这是我的串口的配置代码,上面是串口2的中断响应函数,里面
res= USART_ReceiveData(USART2);
USART_SendData(USART2,res);
串口2的接收到的也是乱码。
我知道用printf函数肯定可以的,
回复

使用道具 举报

1

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-4-8
在线时间
13 小时
发表于 2017-5-22 20:48:28 | 显示全部楼层
首先你的程序里串口中断没有清除中断标志,其次可以试试波特率降低点。我经常用这个方法从未乱码过
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7711
金钱
7711
注册时间
2016-11-30
在线时间
651 小时
发表于 2017-5-23 09:09:59 | 显示全部楼层
发送没有等发送标志!
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7711
金钱
7711
注册时间
2016-11-30
在线时间
651 小时
发表于 2017-5-23 09:11:20 | 显示全部楼层
发送没有等发送标志!
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7711
金钱
7711
注册时间
2016-11-30
在线时间
651 小时
发表于 2017-5-23 09:12:26 | 显示全部楼层
发送没有等发送标志!
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-5-19
在线时间
33 小时
 楼主| 发表于 2017-5-23 09:55:31 | 显示全部楼层
lvkanger 发表于 2017-5-23 09:12
发送没有等发送标志!

能说的具体一点吗?或者说代码里面该怎么写呢。
回复

使用道具 举报

10

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2017-5-3
在线时间
44 小时
发表于 2017-5-24 15:44:54 | 显示全部楼层
加上发送是否结束的判断,while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
回复

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2017-4-13
在线时间
12 小时
发表于 2017-5-24 16:17:23 | 显示全部楼层
查看波特率是否一致,低一点会减少误码率
回复

使用道具 举报

13

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2015-10-12
在线时间
21 小时
发表于 2017-5-25 11:23:15 | 显示全部楼层
你的串口1时钟不用打开吗
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-5-19
在线时间
33 小时
 楼主| 发表于 2017-5-27 15:06:02 | 显示全部楼层
命运枷锁 发表于 2017-5-25 11:23
你的串口1时钟不用打开吗

打开了,串口1初始化是例子程序里面的 ,我这边没有粘贴出来
回复

使用道具 举报

0

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-8-17
在线时间
20 小时
发表于 2017-5-27 17:34:48 | 显示全部楼层
我也经常遇到串口发送丢数据的情况,但是DEBUG的时候又正常,然后我在发送之前都加个小延时就可以解决。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-20 16:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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