OpenEdv-开源电子网

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

求各路大神支招!串口调试乱码,硬件没有问题,那程序上有什么问题呢?

[复制链接]

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-5-7
在线时间
0 小时
发表于 2015-5-29 11:01:53 | 显示全部楼层 |阅读模式
5金钱

现在在调试板子上的串口通信的时候为什么总是出现乱码?有时候出现比如我发送2位数,结果接收到4位数。我开始以为是串口线的问题,可是我把串口线的23引脚短接,让其自发自收,发现收发正常,这就说明我的串口线是没有问题的。但是这个乱码的问题还是不能解决,总是出现下图的问题。



 

 

程序也是参考的写的,端口配置也没有什么问题,就是不知道为什么总是出现乱码?麻烦帮我看下。

#include "pbdata.h"

 

void RCC_Configuration(void);

void GPIO_Configuration(void);

void NVIC_Configuration(void);

void USART_Configuration(void);

 

int main(void)

{

   RCC_Configuration();         //系统时钟初始化

   GPIO_Configuration();//端口初始化

   USART_Configuration();

   NVIC_Configuration();

  

   while(1);    

}

 

void RCC_Configuration(void)

{

    SystemInit();//72m

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

}

 

void GPIO_Configuration(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;  

        

         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//TX(发送)

         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

         GPIO_Init(GPIOA,&GPIO_InitStructure);

 

         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;//RX(接收)

         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

         GPIO_Init(GPIOA,&GPIO_InitStructure);

}

 

void NVIC_Configuration(void)

{

     NVIC_InitTypeDef NVIC_InitStructure;

 

         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

 

         NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;

         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

         NVIC_Init(&NVIC_InitStructure);

}

 

void USART_Configuration(void)

{

    USART_InitTypeDef  USART_InitStructure;

 

         USART_InitStructure.USART_BaudRate=9600;

         USART_InitStructure.USART_WordLength=USART_WordLength_8b;

         USART_InitStructure.USART_StopBits=USART_StopBits_1;

         USART_InitStructure.USART_Parity=USART_Parity_No;

         USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

         USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

 

         USART_Init(USART2,&USART_InitStructure);

         USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//使能接收中断

         USART_Cmd(USART2,ENABLE);//打开串口

         USART_ClearFlag(USART2,USART_FLAG_TC);

 }

 

中断中的程序如下:

void USART2_IRQHandler(void)

{

   if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)  //判断是否已经产生了接收中断

   {

              

                   USART_SendData(USART2,USART_ReceiveData(USART2));

                   while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);

   }

}

 

 

 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-30 10:29:13 | 显示全部楼层
看看是不是存在电平不匹配的问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2015-5-30 13:37:45 | 显示全部楼层
不要在串口中断中用串口发数据
回复

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-5-7
在线时间
0 小时
 楼主| 发表于 2015-5-31 22:10:42 | 显示全部楼层
回复【3楼】as564335sa:
---------------------------------
我是先判断是否接受到数据,接收到数据后,就进中断,中断中就开始发送接收到的数据。按你这样说的话,就是不要用中断,就在主程序有中收到了就发?另外我想问下,为什么中断中不能用串口发数据?谢谢!
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11555
金钱
11555
注册时间
2014-4-1
在线时间
1317 小时
发表于 2015-5-31 22:26:36 | 显示全部楼层
中断可以发数据,但不能等它发完。

想想物理过程,时间关系!
回复

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2015-6-1 08:53:53 | 显示全部楼层
楼上正解!!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 18:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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