历史上的今天
今天是:2025年08月21日(星期四)
2018年08月21日 | STM32库函数的使用过程中晶振参数与实际不符的问题
2018-08-21 来源:eefocus
这段时间自己开了一块STM32F4的板子,调试过程中发现,外部电路焊接的晶振为8MHz,但在调试过程中检测得的时钟确是25MHz,令人恼火。
本着遇到问题解决问题的思路,开始思考问题出在哪里。
首先,将单片机的系统时钟配置为内部的16MHz晶振,单片机工作正常,说明电路板是没问题的。
之后,将单片机的系统时钟配置成外部8MHz晶振,发现通过RCC_GetClocksFreq函数获取的时钟值确是25MHz,由此观之问题可能出在两个方面:
1:晶振本身有问题;
2:RCC_GetClocksFreq函数获取时钟值问题。
通过用调换三个晶振,结果一样,初步判定晶振是没有问题的。那么问题就是出在RCC_GetClocksFreq函数上了,仔细翻看函数不难发现,这个函数获取时钟值并不是通过单片机内部的寄存器读值的,而是预先设定好的一个宏定义值,如下图所示:
很明显,这个值和我使用的实际的晶振值是不同的,因此需要把这个值修改成实际使用的晶振值才可以,否则,程序中依赖这个值进行计算的地方都会出错。
定位到这个宏定义在stm32f4xx.h文件下,如下图:
果然不出所料,将这个值改为:8000000,编译、烧录、运行,问题即解决。
快速解决>>>>>>
修改默认晶振需要修改的位置:
stm32f4xx.h文件下的第139行的HSE_VALUE值为实际晶振值。
史海拾趣
|
我搞的这个可以在PC上仿真运行的袖珍示波器操作界面评估演示程序终于初稿完成,现交出来供各位大侠提提意见,砸砖头也欢迎! 由于PC端的仿真平台做的不太好,运行速度比在真机器上的嵌入式环境中慢了差不多10倍,请大家多多原谅! 至于这个东东 ...… 查看全部问答> |
|
请教:我用EW4.10单步调试定时器A时,用view-register观察TAR中的值没有变化,点击GO运行后也没有变化,我知道用IAR进行simulate模拟中断时要用Forced Interrupt-trigger触发中断,和KEIL IDE 非常不一样,而且即使中断后中断标志位也没有变化,不 ...… 查看全部问答> |
|
请教一下:用MSP30F149做采集信号,用片内AD,我只想采集40ms,40ms之后就关闭采集,用什么方法 啊?要用定时器吗?望高手指点,最好给个例子 ,非常谢谢!… 查看全部问答> |
|
【TI视频分享】TI模拟及逻辑产品在平板电脑解决方案中的应用(一) TI 是逻辑 IC 之源,其中包括开关、转换、I²C、接口、小尺寸逻辑器件、门、反向器、触发器和 FIFO。在平板电脑解决方案中要用到哪些逻辑器件呢?TI工程师为您娓娓道来。本视频来自TI 2011技术研讨会(TI Technology Day 2011)中国站的现场讲 ...… 查看全部问答> |
|
matlab2013a的 simulink里没有Target Preferences 后来我从2011a的matlab里复制了个文件夹到2013里面, 但是在建模时打开双击这个模块时弹出这个。我该怎么决解,求指导… 查看全部问答> |
|
最近在编写一段程序,用MSP430编写发送AT指令程序给GPRS模块,GPRS模块收到AT指令会有\"OK\"返回值。现在我编好运行,发现检测不了\"OK\" 返回值。我是中断没有进去呢?还是检测“OK\"程序有问题?搞了一个星期都没能搞出来,头昏脑涨,这个搞不懂 ...… 查看全部问答> |
|
AD7705硬件的drdy脚悬空了 选择软件复位 0.1S采样一次 每次采样前都会复位一次 可是运行一段时间后 AD7705就不工作了 重新上电又能正常工作了 这该怎么解决?… 查看全部问答> |




