stm32外部时钟源8M晶振换成12M晶振后程序修改说明

stm32外部时钟源8M晶振换成12M晶振后程序修改说明

标签: stm32外部时钟源8m晶 分类: 嵌入式系统
程序运行时突然发现CPU速度变慢了,用示波器观察发现晶振未起振。果断换了个12M(4~16M皆可)的晶振,经测试判断是原来8M晶振坏了。(网上查到说国产晶振容易出问题,真要做产品还是用进口的有保证些)
8M晶振换成12M晶振后(注意焊接晶振管脚很容易短路,最好在晶振管脚垫一个云母片),倍频系数需改变。
追踪启动文件startup_stm32f10x_hd.s(stm32不同型号该启动函数不同)的 LDR R0, =SystemInit (系统时钟设置)

由于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,确定保存,再编译,调试,你就会发现,所有的参数都回归的正常轨道,设置波特率为9600,它也不会跑到14400,设置Systick为1ms中断,它不会1.5ms中断。

原文地址http://blog.sina.com.cn/s/blog_6a54f5930102v0w3.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值