OpenEdv-开源电子网

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

STM32F407串口总是乱码

[复制链接]

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1175
金钱
1175
注册时间
2011-8-20
在线时间
21 小时
发表于 2012-4-7 00:22:06 | 显示全部楼层 |阅读模式
有谁弄成功的吗?我试了串口1没反应,串口2,3都是乱码,只显示一个  “帱”   字,不解,STM32F103都正常,说明软件设置什么的没有问题,硬件也没有问题


void USART2_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
  /* Enable GPIO clock */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

  /* Enable UART clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);

  /* Connect PXx to USARTx_Tx*/
  GPIO_PinAFConfig(GPIOC,GPIO_PinSource10,GPIO_AF_USART3);

  /* Connect PXx to USARTx_Rx*/
  GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_USART3);

  /* Configure USART Tx as alternate function  */
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* Configure USART Rx as alternate function  */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
/* USART configuration */
USART_InitStructure.USART_BaudRate = 2400;
  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(USART3, &USART_InitStructure);  
  /* Enable USART */
  USART_Cmd(USART3, ENABLE);
}











for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-4-7 02:00:17 | 显示全部楼层
波特率设置错了吧.
1,KEIL软件仿真,看看波特率是多少.
2,设置上位机软件为对应的波特率.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

1436

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2209
金钱
2209
注册时间
2010-12-16
在线时间
190 小时
发表于 2012-4-7 18:32:24 | 显示全部楼层
40x软仿也不能直接弄到波特率的。
建议看看时钟配置部分,看是否配置成你想要的主频和各个分频。
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

限制会员

积分
-106
金钱
-106
注册时间
2012-3-31
在线时间
0 小时
发表于 2012-4-7 18:52:49 | 显示全部楼层
你输出的数据是什么
http://sites.google.com/site/btvnlue/stm32
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2011-3-8
在线时间
0 小时
发表于 2012-4-7 20:32:41 | 显示全部楼层
system clock可能都是错的,看一下你system init那部分的PLL配置
回复 支持 反对

使用道具 举报

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1175
金钱
1175
注册时间
2011-8-20
在线时间
21 小时
 楼主| 发表于 2012-4-8 16:42:50 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
波特率没有设置错,首先都是115200,后来我又芯片配置和软件设置同时降低到9600,再同时降低到2400,都是一样的情况
for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
回复 支持 反对

使用道具 举报

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1175
金钱
1175
注册时间
2011-8-20
在线时间
21 小时
 楼主| 发表于 2012-4-8 16:44:04 | 显示全部楼层
回复【4楼】btvnlue:
---------------------------------
输出数据为printf("串口通信\r\n");  但是显示出来的就是一个字 “帱” ,慢吞吞的显示
for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
回复 支持 反对

使用道具 举报

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1175
金钱
1175
注册时间
2011-8-20
在线时间
21 小时
 楼主| 发表于 2012-4-8 16:48:47 | 显示全部楼层
回复【5楼】leavic:
---------------------------------
我用的是高版本的库,系统时钟配置在固件库里面的汇编代码里就完成了的吧,进入main函数后时钟就配置成了168MHz,我没有对这段代码进行任何操作哦
for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
回复 支持 反对

使用道具 举报

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1175
金钱
1175
注册时间
2011-8-20
在线时间
21 小时
 楼主| 发表于 2012-4-8 16:51:23 | 显示全部楼层
论坛里有在STM32F407弄好串口的吗?帮帮小弟
for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-4-8 16:59:02 | 显示全部楼层
这个就不太清楚了,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2012-4-14
在线时间
3 小时
发表于 2012-4-14 16:18:41 | 显示全部楼层
你用的是ST官方的实例吧,他们的板子上用的是8M的晶振,要是你自己的板子是25M的话,肯定乱码需要修改一下
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F4xx_CONF_H
#define __STM32F4xx_CONF_H

#if defined  (HSE_VALUE)
/* Redefine the HSE value; it's equal to 8 MHz on the STM32F4-DISCOVERY Kit */
 #undef HSE_VALUE
 #define HSE_VALUE    ((uint32_t)25000000)
#endif /* HSE_VALUE */

就不会乱码了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2012-4-26
在线时间
0 小时
发表于 2012-4-26 10:38:28 | 显示全部楼层
回复【11楼】tanghong668:
你用的是ST官方的实例吧,他们的板子上用的是8M的晶振,要是你自己的板子是25M的话,肯定乱码需要修改一下
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F4xx_CONF_H
#define __STM32F4xx_CONF_H
#if defined  (HSE_VALUE)
/* Redefine the HSE value; it's equal to 8 MHz on the STM32F4-DISCOVERY Kit */
 #undef HSE_VALUE
 #define HSE_VALUE    ((uint32_t)25000000)
#endif /* HSE_VALUE */
就不会乱码了
---------------------------------
楼主,,,,楼上说的对。
对照板子的晶振在stm32f4xx_conf.h文件中修改以上内容。
F407
回复 支持 反对

使用道具 举报

27

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2011-11-2
在线时间
11 小时
发表于 2012-4-29 20:11:40 | 显示全部楼层
想了想好像官方库给我的波特率降到一半就可以显示正常了  我也忘记了。
回复 支持 反对

使用道具 举报

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1175
金钱
1175
注册时间
2011-8-20
在线时间
21 小时
 楼主| 发表于 2012-5-8 09:37:19 | 显示全部楼层
回复【12楼】lich87:
---------------------------------
回复【11楼】tanghong668:
---------------------------------

果然是这里出了问题,谢谢两位,呵呵,现在不乱码了
for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
回复 支持 反对

使用道具 举报

9

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2012-7-10
在线时间
0 小时
发表于 2012-7-16 17:11:21 | 显示全部楼层
正在学习串口通讯中
千人千般苦,苦苦不相同!
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-1-25
在线时间
7 小时
发表于 2013-3-19 16:15:41 | 显示全部楼层
遇到同样问题,在这里看到了问题所在。。。。很谢谢。。。
好的态度去做好每一件事情
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2013-9-11
在线时间
13 小时
发表于 2013-9-11 17:00:52 | 显示全部楼层
时钟对的,串口有输出很奇怪
举例
程序从串口输出:
        USART_Send(USART1, "ABCDEF");
        USART_Send(USART1, "123456");
接收到正确数据应该为:
41 42 43 44 45 46 31 32 33 34 35 36
计算机串口接收到数据【十六进制】
81 82 83 84 85 86 71 72 73 74 75 76          [看似差了0x40]
很奇怪有没有,想不出原因。。。
USART_Send()函数实现
void USART_Send(USART_TypeDef *USARTx, char *str)
{
        uint16_t ch;
while (*str)
{
         ch = *str++;
USART_SendData(USARTx, ch);
while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
}
}
如果将其修改为
void USART_Send(USART_TypeDef *USARTx, char *str)
{
        uint16_t ch;
while (*str)
{
         ch = *str++;
USART_SendData(USARTx, ch - 0x40);          //此处有修改,减去0x40
while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
}
}
计算机串口接收到数据为
01 02 03 04 05 06 F1 F2 F3 F4 F5 F6

#if !defined  (HSE_VALUE)
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
这一段的外晶振设置也已经改为板载晶振

这很诡异,有没有
求高手解惑
回复 支持 反对

使用道具 举报

69

主题

336

帖子

0

精华

高级会员

Rank: 4

积分
632
金钱
632
注册时间
2013-12-11
在线时间
0 小时
发表于 2014-3-1 09:15:28 | 显示全部楼层
回复【11楼】tanghong668:
--------------------------------
为什么要配置这个时钟呢,我对比了一下103的stm32f4xx_conf.h中的配置,103就不需要配置这个时钟,为什么
回复 支持 反对

使用道具 举报

69

主题

336

帖子

0

精华

高级会员

Rank: 4

积分
632
金钱
632
注册时间
2013-12-11
在线时间
0 小时
发表于 2014-3-1 09:15:50 | 显示全部楼层
回复【14楼】subo19920716:
---------------------------------
为什么要配置这个时钟呢,我对比了一下103的stm32f4xx_conf.h中的配置,103就不需要配置这个时钟,为什么
回复 支持 反对

使用道具 举报

69

主题

336

帖子

0

精华

高级会员

Rank: 4

积分
632
金钱
632
注册时间
2013-12-11
在线时间
0 小时
发表于 2014-3-1 09:16:06 | 显示全部楼层
回复【12楼】lich87:
---------------------------------
为什么要配置这个时钟呢,我对比了一下103的stm32f4xx_conf.h中的配置,103就不需要配置这个时钟,为什么
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-3-1 09:55:15 | 显示全部楼层
回复【20楼】雪雪:
---------------------------------
f407的库跟103的库不完全一样,103不是不用配置,只不过库设定值和你板子晶振一致。
回复 支持 反对

使用道具 举报

69

主题

336

帖子

0

精华

高级会员

Rank: 4

积分
632
金钱
632
注册时间
2013-12-11
在线时间
0 小时
发表于 2014-3-1 14:50:53 | 显示全部楼层
回复【21楼】ricefat:
---------------------------------
谢谢,已经找到了
回复 支持 反对

使用道具 举报

11

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
492
金钱
492
注册时间
2015-3-3
在线时间
114 小时
发表于 2015-3-8 15:16:47 | 显示全部楼层
回复【22楼】雪雪:
---------------------------------
可以交流学习一下串口吗?
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-3-18
在线时间
0 小时
发表于 2015-3-31 09:58:33 | 显示全部楼层
回复【23楼】ahsssxd:
---------------------------------
你们的都可以发送字符串吗?我用的光盘上的程序只能正确发送一个字符,再多一个字符就开始乱码了
回复 支持 反对

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
发表于 2016-4-28 20:58:31 | 显示全部楼层
lich87 发表于 2012-4-26 10:38
回复【11楼】tanghong668:
你用的是ST官方的实例吧,他们的板子上用的是8M的晶振,要是你自己的板子是25M的 ...

我想问一下~板子的晶振如果是25M直接改成8M经过倍频分频什么的 ~那不就不等于168M了么??????直接改那个数为什么可以呢?
回复 支持 反对

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
发表于 2016-4-28 20:59:10 | 显示全部楼层
subo19920716 发表于 2012-5-8 09:37
回复【12楼】lich87:
---------------------------------
回复【11楼】tanghong668:
--------------------- ...

为什么直接改那个数字就可以了呢?不经过一系列倍频分频什么的 么?
回复 支持 反对

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
发表于 2016-4-30 21:09:18 | 显示全部楼层
怎么没人说话啊
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 03:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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