|
stm32外部时钟源8M晶振换成12M晶振后程序修改说明 5 z* I8 i6 }- {( M+ _! n: s3 X( p9 }8 A2 R; I& d --》8M晶振换成12M晶振后,倍频系数需改变: f! I3 \3 u* |- w. R0 k --》STM32F10x库官方采用默认的外接8MHz晶振 在论坛上看到很多用户反映,使用外接12MHz的晶振,会造成很多的问题,如USART的波特率不正确,Systick走时不准等问题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪ST官方,我们必须肯定ST官方为方便用户开发所做的努力,% Q3 u; ]9 F0 L: E# m- g6 j/ \! l" J 修改只读文件: 组合键保存,弹出只读文件不能修改提示,然后选择弹窗里面的 over write 即可修改 下面我们就通过简单的 三个步骤 就可以让你随意的使用4—16MHz之内任何频点的晶振:- \; f- J" w6 g7 H- j) i9 c: s& I 第一步:打开stm32f10x.h,将 “外接晶振HSE” 的具体频率填正确, J o' {1 K _0 l% Z+ E0 [ E #define HSE_VALUE ((uint32_t)8000000) 修改为: + K# T' M3 X+ h6 ~9 I #define HSE_VALUE ((uint32_t)12000000) 具体修改为:如下图,根据宏定义可知,我们修改 第二个 80000005 c2 t; ?7 q9 Z/ ` D:/youdaoNote/wenyutao110@163.com/3e62ae00b0b74e979e77c723505dac66/g2%60s3l%604p%28x%5Bjr%5D%24av3ykfj.png4 X- D+ j* D5 W6 o- S& l$ i: r 6 F5 Q4 s! O0 F9 W# U9 H% j 第二步: 打开system_stm32f10x.c,修改 PLL倍频器 的参数,将 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); $ Y+ K) s( F2 J RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); 修改为: % a& C e; x% Z' H2 T+ [ 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); . R6 G" X J( c& B; W) u/ G 具体修改:% w+ }. q( B6 q1 r7 c; q8 y2 B 在自己的代码里面,执行系统时钟初始化时,执行函数“SystemInit”,然后里面再执行函数“SetSysClock”,然后这个函数里面再执行:如下图,经过 kk_ii_haha++ 可知,只有函数“SetSysClockTo72”这儿执行了 “kk_ii_haha++”,因此,我们修改 PLL倍频 系数就是修改 “函数SetSysClockTo72”里面的,修改地方和上述说的一样,就是“ RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6); ”: G8 o# C3 @: F D:/youdaoNote/wenyutao110@163.com/fe130d49ffa140828c7a5f502b9e4118/%7B2ihxqfod2%5D%7Dkmbnwo%7Dm%29%29m.png4 @8 O4 M$ B; l# u: ?) f 6 M. \: }3 a" ]! k, { & l: ~3 ~( y7 V6 f. f5 j x( h) c --》至此,原文件已经修改完成# D! s0 W7 T& l6 Z --》最后一步,修改编译环境: 打开你已经建立的STM32工程,选择Projects-〉Options for target ***,找到Target标签,你会发现,外接的晶振默认还是8MHz,如下图,我们将外接的晶振参数修改为12MHz,确定保存,再编译,调试,你就会发现,所有的参数都回归的正常轨道,设置波特率为9600,它也不会跑到14400,设置Systick为1ms中断,它不会1.5ms中断。 D:/youdaoNote/wenyutao110@163.com/bf2e1e36aec04653a8e5ce5e8f83049c/%29%29b%5Da%5Bri03%7B%28%7D305d%5B%7Era5e.png2 t) ?$ u9 O- v* U, p6 W. P * B6 l, {( f" G; I. } |
| 在STD库改起来很繁琐,如果用CUBEMX生成HAL的就自动改好了。 |
| 用CUBEMX或者对照CUBEMX的时钟树修改RCC |
微信公众号
手机版