STM32H750的FMC时钟问题
发布日期:2021-05-07 22:29:18 浏览次数:23 分类:精选文章

本文共 1191 字,大约阅读时间需要 3 分钟。

问题:配置STM32H750的FMC时钟时,会配置失败?

这个问题我是怎么发现的呢?首先我一般的风格不会使用while(1)这种等待的,一般会选择加入超时机制来保证系统的正常运行。但是在我移植野火的STM32H750的SDRAM的程序的时候,我发现程序停留在SDRAM_Init()里面的while(1)中。

关于这个问题,先看STM32H750的时钟树:
在这里插入图片描述
这是我的时钟相关配置,理论上是没问题,也没有达到最高频率480MHz。
从野火的FMC的时钟配置来看,

RCC_PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_FMC;  RCC_PeriphClkInit.PLL2.PLL2M = 5;  RCC_PeriphClkInit.PLL2.PLL2N = 144;  RCC_PeriphClkInit.PLL2.PLL2P = 2;  RCC_PeriphClkInit.PLL2.PLL2Q = 2;  RCC_PeriphClkInit.PLL2.PLL2R = 3;  RCC_PeriphClkInit.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_2;  RCC_PeriphClkInit.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE;  RCC_PeriphClkInit.PLL2.PLL2FRACN = 0;  RCC_PeriphClkInit.FmcClockSelection = RCC_FMCCLKSOURCE_PLL2;

配置的是PLL2的时钟参数,这看上去貌似也没什么问题。但为什么会PLL2的时钟初始化失败呢?

首先找原因:
1、是不是晶振坏了?
2、是不是系统时钟哪里写错了?
3、是不是FMC时钟初始化在代码中的位置不对?

经过一系列排查,发现都是没问题的,并没有解决的实际问题。任然是初始化SDRAM的时候卡在while(1)中,也就是FMC时钟参数配置失败。

从新回到STM32H7的时钟树上!有一个我们不太看得到的点!

在这里插入图片描述
没错就是这里,本来在程序上应该配置的是PLL2R这个地方的时钟,用这个地方的时钟输出到FMC上,但是却是默认选择HCLK3,所以,这就是导致为什么PLL2初始化一直失败的原因!这时候将它选中PLL2Q,
在这里插入图片描述
将会和预期的一样,得到360MHz的时钟。通过STM32CubeMX生成工程,后添加相关驱动文件,发现SDRAM的初始化不会再卡住了。这时候,我们比对两个工程的SystemClock_Config(),就很容易发现多了一句话,
在这里插入图片描述
没错,就是因为这里的选择问题,FMC的时钟源,必须选择RCC_FMCCLKSOURCE_PLL2的时候,才能对PLL2的配置生效,否则配置将ERROR。这问题搞了我一晚上,真不应该啊!

上一篇:RT1052 GPIO中断配置
下一篇:模电的复习-----双极结型三极管(BJT)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月08日 08时06分52秒