STM32晶振任意修改方法(8M改12M方法)

由于STM32F10x库官方采用的是默认的外接8MHz晶振,因此造成很多用户也采用了8MHz的晶振,但是,8MHz的晶振不是必须的,其他频点的晶振也是可行的,只需要在库中做相应的修改就行。 

     在论坛上看到很多用户反映,使用外接12MHz的晶振,会造成很多的问题,如USART的波特率不正确,Systick走时不准等问题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪ST官方,我们必须肯定ST官方为方便用户开发所做的努力,下面我们就通过简单的三个步骤就可以让你随意的使用4—16MHz之内任何频点的晶振,我们以STM32F10x_StdPeriph_Lib_V3.4.0为例说明。      

   第一步,打开stm32f10x.h,将 

 #define HSE_VALUE    ((uint32_t)8000000)  修改为: 

 #define HSE_VALUE    ((uint32_t)12000000)  

     第二步,打开system_stm32f10x.c,修改PLL参数,将 

      

     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);  修改为:   

      

     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_PLLMULL6);      至此,原文件已经修改完成,如果你想将主频修改至其他频率,请自行修改。但是,到现在,如果您直接编译调试的话,就会出现上文所说的USART的波特率不正确,Systick走时不准等问题,原因就是我们需要进行第三部的修改,这个修改不是在原文件中,而是在编译环境中。我们已Keil MDK为例说明。 

     第三步,打开你已经建立的STM32工程,选择Projects-〉Options for target ***,找到Target标签,你会发现,外接的晶振默认还是8MHz,我们将外接的晶振参数修改为12MHz,确定保存,再编译,调试,你就会发现,所有的参数都回归的正常轨道。

用jlik去检测程序运行时间可能不准确的原因:

在keil下点击魔术棒-->Debug-->Trace 并且将系统时钟改为你设置的系统时钟即可,如下图

仿真方式SWD与JTAG区别
    (1) SWD 模式比 JTAG 在高速模式下面更加可靠。 在大数据量的情况下面 JTAG 下载程序会失败, 但是 SWD 发生的几率会小很多。基本使用 JTAG 仿真模式的情况下是可以直接使用 SWD 模式的, 只要你的仿真器支持。 所以推荐大家使用这个模式。
    (2) 在GPIO 刚好缺一个的时候, 可以使用 SWD 仿真, 这种模式支持更少的引脚。
    (3) 在板子的体积有限的时候推荐使用 SWD 模式, 它需要的引脚少, 当然需要的 PCB 空间就小啦! 比如你可以选择一个很小的 2.54 间距的 5 芯端子做仿真接口。

   二、 市面上的常用仿真器对 SWD 模式支持情况
    (1) JLINKV6 支持 SWD 仿真模式, 速度较慢。
    (2) JLINKV7 比较好的支持 SWD 仿真模式, 速度有了明显的提高,速度是 JLINKV6 的 6 倍。
    (3) JLINKV8 非常好的支持 SWD 仿真模式, 速度可以到 10M。
    (4) ULINK1 不支持 SWD 模式。
    (5) 盗版 ULINK2 非常好的支持 SWD 模式, 速度可以达到 10M。
    (6) 正版 ULINK2 非常好的支持 SWD 模式, 速度可以达到 10M。

发布了12 篇原创文章 · 获赞 8 · 访问量 1912

猜你喜欢

转载自blog.csdn.net/yhhdll0107/article/details/105204211