STM32库函数的使用过程中晶振参数与实际不符的问题

这段时间自己开了一块STM32F4的板子,调试过程中发现,外部电路焊接的晶振为8MHz,但在调试过程中检测得的时钟确是25MHz,令人恼火。

本着遇到问题解决问题的思路,开始思考问题出在哪里。

首先,将单片机的系统时钟配置为内部的16MHz晶振,单片机工作正常,说明电路板是没问题的。

之后,将单片机的系统时钟配置成外部8MHz晶振,发现通过RCC_GetClocksFreq函数获取的时钟值确是25MHz,由此观之问题可能出在两个方面:

1:晶振本身有问题;

2:RCC_GetClocksFreq函数获取时钟值问题。

通过用调换三个晶振,结果一样,初步判定晶振是没有问题的。那么问题就是出在RCC_GetClocksFreq函数上了,仔细翻看函数不难发现,这个函数获取时钟值并不是通过单片机内部的寄存器读值的,而是预先设定好的一个宏定义值,如下图所示:

很明显,这个值和我使用的实际的晶振值是不同的,因此需要把这个值修改成实际使用的晶振值才可以,否则,程序中依赖这个值进行计算的地方都会出错。

定位到这个宏定义在stm32f4xx.h文件下,如下图:

果然不出所料,将这个值改为:8000000,编译、烧录、运行,问题即解决。



快速解决>>>>>>

    修改默认晶振需要修改的位置:

    stm32f4xx.h文件下的第139行的HSE_VALUE值为实际晶振值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值