OpenEdv-开源电子网

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

STM32F103RC内部时钟打USART打印乱码问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
30
金钱
30
注册时间
2015-12-7
在线时间
1 小时
发表于 2015-12-7 15:34:49 | 显示全部楼层 |阅读模式
5金钱
开发板上没有晶振,用内部时钟。为什么串口打印全乱码
void SystemInit (void)
{
#if 1
  RCC_DeInit();//将外设 RCC寄存器重设为缺省值
  RCC_HSICmd(ENABLE);//使能HSI  
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)//等待HSI使能成功
  {
  }
    //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    //FLASH_SetLatency(FLASH_Latency_2);
    RCC_HCLKConfig(RCC_SYSCLK_Div1);   
    RCC_PCLK1Config(RCC_HCLK_Div2);
    RCC_PCLK2Config(RCC_HCLK_Div1);
    
    //设置 PLL 时钟源及倍频系数
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);                
    //使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE
    RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能
    //等待指定的 RCC 标志位设置成功 等待PLL初始化成功
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }
    //设置系统时钟(SYSCLK) 设置PLL为系统时钟源
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);     

    //等待PLL成功用作于系统时钟的时钟源
     while(RCC_GetSYSCLKSource() != 0x08)//00 for HSI 04 for HSE 08 for PLL
    {
     }
}
系统一直跑不起来。如果把  RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);    RCC_PLLMul_16改成            RCC_PLLMul_2,系统就可以跑起来。但串口还是打印乱码


另外,作了一个测试,为什么把这个void SystemInit(void){}改为空,main(void){    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_SetBits(GPIOA,GPIO_Pin_5);  //vcc output control pin21
}这个pin21也可以点亮LED,系统不初始化时钟也可以运行吗?求救,初学STM32,困绕了几天




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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-12-8 10:47:07 | 显示全部楼层
1.假如约定波特率9600,把串口调试助手波特率多换几个数如4800、19200等试试,看是不是时钟没配置好
2.比较小的可能是内部时钟准确度较低造成的
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-12-6
在线时间
1 小时
发表于 2015-12-8 11:33:57 | 显示全部楼层
波特率不统一
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
30
金钱
30
注册时间
2015-12-7
在线时间
1 小时
 楼主| 发表于 2015-12-8 12:14:20 | 显示全部楼层
波特率是一致的,几乎每个都验证了,不行。
疑问在于:
   1、systeminit把它注释掉了,不初始化时钟,一样可以跑起来,我指的是LED灯可以点亮,是否系统STM32复位就初始化了内部时钟?
   2、内部时钟如何配,以上程序是否有BUG,为什么设为RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);     倍频为16,PLLCLOCK应该是48M,系统死机一样。 设为2倍频,PLLCLOCK为8M,就可以跑动LED,但串口不行。
   3、内部时钟如何设置72MPLL CLOCK
   4、同样的程序接8M外部晶振,串口都可以。现在问题如何解决去掉外部晶振也可以跑串口,没办法,无良老板指定不能接外部晶振。搞不定啊。
谢谢了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 01:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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