通过BUG来理解STM32的HSE时钟

发布者:数字之舞最新更新时间:2020-02-25 来源: eefocus关键字:BUG  STM32  HSE时钟 手机看文章 扫描二维码
随时随地手机看文章

  前言:最近在搞GPRS的时候,遇到了这么一个问题,所使用的单片机为STM32F103RBT6,刚开始先写了个串口打印的程序,波特率设置为19200,可是在上位机上输出的信息总是乱码,检查了好几遍的代码,硬件等等就是没找到问题。于是就在上位机上对波特率从115200往下一个一个的试,终于,当波特率设置为38400的时候,打印信息正确,额滴歌神啊,这是什么情况呢,我在程序中明明设置的波特率为19200,为什么上位机上波特率为19200的时候不对,而为38400的时候输出正确呢?于是,又回过头来检查电路原理图和代码,Oh,My god,原来问题在这里,因此这篇博客将以我遇到的问题为起点,对STM32的HSE时钟做一个总结。


一、问题

  通过检查电路原理图,发现问题的根源所在,电路中所使用的晶振为16M,而我们经常使用的晶振为8M的,所以导致波特率变为2倍。


二、解决方法

  因为使用的晶振为16M的,所以需要对程序中库函数要进行修改。那么,具体要修改哪呢? 

  1)修改system_stm32f10x.c文件。


/*

*@system_stm32f10x.c中的源代码部分

*@这部分代码为外部晶振为8M时的情况

*/

/*PLL configuration:PLLCLK = HSE * 9 = 72MHz */

    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));

    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);

/*

*@对system_stm32f10x.c中的源代码修改如下

*@修改后的代码对应的外部晶振为16M

*/

     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL));

     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_Div2 | RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);


  解释:通过对比发现,修改后的代码多了一句话。


    RCC_CFGR_PLLXTPRE_Div2


  那么,这句有什么作用呢? 

  RCC_CFGR:时钟配置寄存器,偏移地址为:0x04,复位值为:0x0000 0000。 

  PLLXTPRE:PREDIV1分频因子的低位。 

  Div2:二分频 

  所以增加的这句代码的意思就是对(3~25MHz)HSE振荡器进行二分频,而我们所使用的晶振为16M的晶振,二分频之后为8M,所以修改之后,波特率就一一对应了,而不再是二倍的关系了。 

  那么,这个bug就到此为止,解决了吗?No,这样程序还是有bug,那么bug在哪呢?又是如何解决呢? 

  2)修改stm32f10x.h文件


/*

*@stm32f10x.h中的源代码部分

*/

    #define HSE_VALUE   ((uint32_t)8000000)

/*

*@对stm32f10x.h做如下修改

*/

    #define HSE_VALUE   ((uint32_t)16000000)


  解释:这句代码应该就不用解释了吧,很明显,就是将HSE的值由8M修改为16M。 

  通过解决Bug,下面来对STM32的HSE时钟做一个简单的总结。


三、HSE时钟总结

1、高速外部时钟HSE的时钟源

  1)HSE外部晶体/陶瓷谐振器 

  2)HSE用户外部时钟


2、高速外部时钟HSE的范围

  HSE时钟的范围为3~25MHz。


3、HSE时钟树

这里写图片描述

3、寄存器配置

  略。感兴趣的读者可以阅读手册。

关键字:BUG  STM32  HSE时钟 引用地址:通过BUG来理解STM32的HSE时钟

上一篇:STM32 HAL HSE_VALUE
下一篇:第15章 RCC—使用HSE/HSI配置时钟—零死角玩转STM32-F429系列

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved