OpenEdv-开源电子网

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

异步串行口发送数据异常的问题

[复制链接]

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2012-2-14
在线时间
2 小时
发表于 2012-2-16 14:36:10 | 显示全部楼层 |阅读模式

int main()
{
 u16 i=0;
 my_systeminit(); //系统时钟初始化
 delay_init(72);
 LED_Init();
 Key_Init();
 USART1_Init();
 IWDG_Init();
 Send_String("测试开始"); 
 while(1)
 {
  i++;
  Send_String("循环计数:");
  Send_Char(i/10+0x30);Send_Char(i%10+0x30);
  Send_Enter();
  delay_ms(100);
//  IWDG_ReloadCounter();//喂狗   
 }
}

 

 

以上是我的主程序的代码.在串口调试的时候 发现在while前的 Send_String("测试开始"); 发送出的数据是乱码   而while里面的发送会正常显示. 当在while前的 Send_String("测试开始"); 测试开始前加一个空格即Send_String(" 测试开始"); 则显示正常. 不知是和原因.  串行口具体配置如下:

void USART1_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
 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_10;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA, &GPIO_InitStructure);

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//开启外设USART1时钟
 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_Tx | USART_Mode_Rx;//使能接收和发送
// USART_InitStructure.USART_Clock = USART_Clock_Disable;
// USART_InitStructure.USART_CPOL = USART_CPOL_High;
// USART_InitStructure.USART_CPHA = USART_CPHA_1Edge;
// USART_InitStructure.USART_LastBit = USART_LastBit_Enable;
 USART_Init(USART1, &USART_InitStructure);//初始化串口1
 USART_Cmd(USART1, ENABLE); //使能串口1

发送字符串的函数如下:

void Send_Char(u8 Data)
{
USART_SendData(USART1, Data);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成
}
void Send_Enter(void)
{
Send_Char(0x0d);
Send_Char(0x0a);
}
void Send_String(u8 *s)
{//发送字符串
while(*s!='\0')
{
Send_Char(*s);
s++;
}
Send_Enter();
}

麻烦论坛的各位STM32的各位专家学者以及爱好者帮忙解决一下这个问题.

 

(不知到是什么原因,我贴不上图和添加不了附件.可能问题述说的也不够详细,还请各位多费心理解.如我表述上不清楚的,您请直接提问我会第一时间把问题补充的更加完整.谢谢)

 

      完美的演出来自充分的准备;勇于改变自己,适应不断变化的环境,机会将不断出现;快乐及有意义的人生来自于实现自己心中的愿望,而非外在的掌声。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-16 15:02:49 | 显示全部楼层
回复【楼主位】开着拖拉机去看海:
---------------------------------
1,可能串口调试助手的问题.
2,函数void Send_Char(u8 Data)修改为:
void Send_Char(u8 Data)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成
USART_SendData(USART1, Data);
}
试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2012-2-14
在线时间
2 小时
 楼主| 发表于 2012-2-16 15:19:57 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
修改过后,问题依旧   串口调试助手 我换了几个版本的 都是出现同样的问题呢
      完美的演出来自充分的准备;勇于改变自己,适应不断变化的环境,机会将不断出现;快乐及有意义的人生来自于实现自己心中的愿望,而非外在的掌声。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2012-2-14
在线时间
2 小时
 楼主| 发表于 2012-2-16 15:29:12 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
刚才我又用超级终端 试了一下也是一样的问题.
      完美的演出来自充分的准备;勇于改变自己,适应不断变化的环境,机会将不断出现;快乐及有意义的人生来自于实现自己心中的愿望,而非外在的掌声。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-16 15:48:33 | 显示全部楼层
那换我们的代码试试吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 21:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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