你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32晶振更换后,如何修改相应文件

[复制链接]
wyt110 发布时间:2019-1-25 15:28
stm32外部时钟源8M晶振换成12M晶振后程序修改说明
! K) \, H' G1 d1 H$ `
+ a, f8 s+ o! }1 }
--》8M晶振换成12M晶振后,倍频系数需改变
7 o& \! G- z/ l0 P# e. l7 X--》STM32F10x库官方采用默认的外接8MHz晶振
0 X0 y* Q4 l/ t3 ]: p     在论坛上看到很多用户反映,使用外接12MHz的晶振,会造成很多的问题,如USART的波特率不正确,Systick走时不准等问题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪ST官方,我们必须肯定ST官方为方便用户开发所做的努力,
- [+ c! c" @1 Y% N$ t修改只读文件: 组合键保存,弹出只读文件不能修改提示,然后选择弹窗里面的 over write 即可修改  r  V8 i! \& w) L, g4 \
下面我们就通过简单的 三个步骤 就可以让你随意的使用4—16MHz之内任何频点的晶振
& c! y5 s$ ^% \! ]第一步:打开stm32f10x.h,将 “外接晶振HSE” 的具体频率填正确
! Z3 b2 R5 D- a$ B( C" {* R2 v, o #define HSE_VALUE    ((uint32_t)8000000)  修改为: - \" c* C- N2 ?0 u2 n1 h! l: C0 y/ x
#define HSE_VALUE    ((uint32_t)12000000)  2 k+ R$ f. h. r) }
具体修改为:如下图,根据宏定义可知,我们修改  第二个 8000000; b8 [' A7 [& _- P* m4 `
D:/youdaoNote/wenyutao110@163.com/3e62ae00b0b74e979e77c723505dac66/g2%60s3l%604p%28x%5Bjr%5D%24av3ykfj.png
2 a, x: q1 Y  R4 @& Z; s: D" V" d  X: b: r7 U4 i" d
       第二步: 打开system_stm32f10x.c,修改 PLL倍频器 的参数,将 , N  i, P8 N) R% U: u
7 V$ z( D6 v1 [5 N' n5 b
     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |                                         RCC_CFGR_PLLMULL));
6 }5 u7 D# n: d- L1 v0 A     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);  修改为:   
. n, s% l; w2 Z1 F- I! ~. n5 T
5 H5 r3 }+ u2 {0 @3 ]% n, G! }     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |                                         RCC_CFGR_PLLMULL)); : E% w$ T7 ]2 O/ ~) o- |4 a7 F6 W
     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);   & h* X" i4 ^7 B* s, q; m/ L
具体修改:; r" \+ `1 Y* h; G- ^- q+ {; \
在自己的代码里面,执行系统时钟初始化时,执行函数“SystemInit”,然后里面再执行函数“SetSysClock”,然后这个函数里面再执行:如下图,经过  kk_ii_haha++ 可知,只有函数“SetSysClockTo72”这儿执行了 “kk_ii_haha++”,因此,我们修改 PLL倍频 系数就是修改 “函数SetSysClockTo72”里面的,修改地方和上述说的一样,就是“     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);   ”
5 G  y7 O6 t4 E0 @3 |- E9 K8 L% uD:/youdaoNote/wenyutao110@163.com/fe130d49ffa140828c7a5f502b9e4118/%7B2ihxqfod2%5D%7Dkmbnwo%7Dm%29%29m.png
/ Y- s* z  O0 z; t8 z# e1 @) Z. H6 g8 B
+ j6 A0 t2 e- y2 r3 h5 e
' S5 g0 y* E1 i6 p2 B, L4 ~+ N--》至此,原文件已经修改完成
0 A6 W; W- O$ l; s( V' Y" Y--》最后一步,修改编译环境:
& G3 }1 T( K; ~' r% Y+ L" N打开你已经建立的STM32工程,选择Projects-〉Options for target ***,找到Target标签,你会发现,外接的晶振默认还是8MHz,如下图,我们将外接的晶振参数修改为12MHz,确定保存,再编译,调试,你就会发现,所有的参数都回归的正常轨道,设置波特率为9600,它也不会跑到14400,设置Systick为1ms中断,它不会1.5ms中断。
8 e2 ]; o6 A" b: I# ~5 W5 YD:/youdaoNote/wenyutao110@163.com/bf2e1e36aec04653a8e5ce5e8f83049c/%29%29b%5Da%5Bri03%7B%28%7D305d%5B%7Era5e.png
/ |$ A( l3 X+ `/ V) W5 y$ B8 N4 i# V' ]

  w! Q5 ?; M! t6 {& d
收藏 2 评论2 发布时间:2019-1-25 15:28

举报

2个回答
3111272 回答时间:2019-1-26 09:52:25
在STD库改起来很繁琐,如果用CUBEMX生成HAL的就自动改好了。
qiangtech 回答时间:2019-1-26 10:46:25
用CUBEMX或者对照CUBEMX的时钟树修改RCC

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版