OpenEdv-开源电子网

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

求教各位大神,我的串口不管怎么调试接收到的都是乱码,实在是没择了~~

[复制链接]

11

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2014-5-7
在线时间
5 小时
发表于 2014-7-10 17:52:17 | 显示全部楼层 |阅读模式
5金钱
求各位大神帮我看下 我用的是mini版的开发板调试的~

STM32F10x_StdPeriph_Lib_V3.5.0.rar

26.48 MB, 下载次数: 64

最佳答案

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

1、很有可能是波特率设置错误。比如说你代码里将波特率设置成了9600,而实际上却只有4800,可以直接Debug,然后打开串口寄存器的监视器窗口(Peripherals -> USARTs),这个窗口下面会显示你实际的串口的波特率,看看是不跟你自己设置的波特率相同。如果不同,而且波特率相差倍数的关系,这种情况最可能的原因是外设时钟(PCLK)没有设定正确(一般情况下,PCLK1为36M,PCLK2为72M,有些库的默认设定的PCLK1和PCLK2都 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2014-6-10
在线时间
0 小时
发表于 2014-7-10 17:52:18 | 显示全部楼层
1、很有可能是波特率设置错误。比如说你代码里将波特率设置成了9600,而实际上却只有4800,可以直接Debug,然后打开串口寄存器的监视器窗口(Peripherals -> USARTs),这个窗口下面会显示你实际的串口的波特率,看看是不跟你自己设置的波特率相同。如果不同,而且波特率相差倍数的关系,这种情况最可能的原因是外设时钟(PCLK)没有设定正确(一般情况下,PCLK1为36M,PCLK2为72M,有些库的默认设定的PCLK1和PCLK2都是36M,这种情况下,USART1使用的是PCLK2频率,设置成9600,实际上却是4800)。
2、还有检查下串口协议是否正确,比如说软件了设置了带校验位的传输,而串口软件却不带校验位的接收,这种情况也会出出现乱码
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-7-10 18:59:55 | 显示全部楼层
有可能是硬件问题,将TXD和RXD短接,试试看有没有乱码。
站在巨人的肩膀上不断的前进。。。
回复

使用道具 举报

11

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2014-5-7
在线时间
5 小时
 楼主| 发表于 2014-7-11 09:12:23 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
不是硬件问题,我用原代码就可以~~
回复

使用道具 举报

11

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2014-5-7
在线时间
5 小时
 楼主| 发表于 2014-7-11 09:20:50 | 显示全部楼层
回复【3楼】ziye334:
-----------------------
对就是波特率的问题,谢谢你诶~追问一下那个外设时钟在哪儿设置呢
回复

使用道具 举报

11

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2014-5-7
在线时间
5 小时
 楼主| 发表于 2014-7-11 09:48:20 | 显示全部楼层
回复【3楼】ziye334:
---------------------------------
找到了  谢谢你诶~~~~
回复

使用道具 举报

0

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2014-6-10
在线时间
0 小时
发表于 2014-7-11 09:52:56 | 显示全部楼层
看system_stm32f10x.c中SystemInit()里有设置默认系统时钟为72M的。
一般最好自己编写一个关于时钟的代码,参考如下:
void RCC_Config(void)
{
static volatile ErrorStatus HSEStartUpStatus = SUCCESS;

RCC_DeInit();                  //默认配置SYSCLK, HCLK, CLK2, CLK1, 复位后就是该配置
RCC_HSEConfig(RCC_HSE_ON);                                            //使能外部高速晶振
HSEStartUpStatus = RCC_WaitForHSEStartUp();              //等待外部高速稳定 

if(HSEStartUpStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能flash预读取缓冲区
FLASH_SetLatency(FLASH_Latency_2);                            //令Flash处于等待状态,2是针对高频时钟的
RCC_HCLKConfig(RCC_SYSCLK_Div1);                             //HCLK = SYSCLK 设置高速总线时钟=系统时钟
RCC_PCLK2Config(RCC_HCLK_Div1);                               //PCLK2 = HCLK 设置低速总线2时钟=高速总线时钟
RCC_PCLK1Config(RCC_HCLK_Div2);                               //PCLK1 = HCLK/2 设置低速总线1的时钟=高速时钟的二分频
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //PLLCLK = 8MHz * 9 = 72 MHz 利用锁相环讲外部8Mhz晶振9倍频到72Mhz
RCC_PLLCmd(ENABLE);                                             //使能PLL锁相环 
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){} //等待锁相环输出稳定
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);      //将锁相环输出设置为系统时钟
while(RCC_GetSYSCLKSource() != 0x08){}                           //等待校验成功
}
}
USART1相关的就是PCLK2了。
回复

使用道具 举报

11

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2014-5-7
在线时间
5 小时
 楼主| 发表于 2014-7-11 13:29:25 | 显示全部楼层
回复【7楼】ziye334:
---------------------------------
受教了!!!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-6 06:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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