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

stm32f4系列sdio 时钟如何获取

[复制链接]
asn111 提问时间:2025-2-20 14:02 / 未解决

stm32f4系列sdio 时钟如何获取,stm32h7可以通过sdmmc_clk=HAL_RCCEx_GetPeriphCLKFreq(STM32_RCC_PERIPHCLK_SDMMC);这个函数获取 stm32f4 sdio时钟如何获取通过什么函数

谢谢

收藏 评论1 发布时间:2025-2-20 14:02

举报

1个回答
xmshao 回答时间:昨天 09:54
对于STM32F4系列库函数可能没法这么得到,要自己组织下代码获取。下面以STM32F407为例。


我们可以先计算输出SDIOCLK,再根据自己拟定的SDIO时钟分频系数
计数出SDIO_CK的频率。在ST的手册和代码里,分频系数多以ClockDiv 标记。


SDIOCLK通过PLL生成,涉及到PLLM、PLLN、PLLP和PLLQ参数,可以计算出SDIOCLK的频率。

rrr.png



上面的这些参数一般来说配置好后就固定了,最后一步得到的就是SDIOCLK时钟。


自己可以写几行代码完成得到SDIOCLK时钟。你也可以通过调用HAL_RCC_GetSysClockFreq(void)来获取pllvco后
再除以PLLQ后得到。


根据SDIOCLK和时钟分频器的配置 可以计算SDIO_CK的频率。


SDIO_CK的频率就等于SDIOCLK频率除以(ClockDiv + 2)。


ClockDiv 系数我们自行设置, 在CubeMx配置那里就有这个选项。
在库代码里以hsd.Init.ClockDiv来定义。分频系数最终体现在寄存器SDIO_CLKCR的低8位。
该分频系数在对SD卡初始化和正式数据通信时可能设置不同值。




假设在cubeMx时钟树配置那里有这样的配置:
1.   :内部高速时钟 HSI RC,频率16 MHz,作为PLL 的输入时钟源
2.    PLLM: 预分频值为8。
3.    PLLN: 倍频器值为168。
4.    PLLP: 主PLL分频值为2。
5.    PLLQ: 用于SDIO、USB OTG FS和RNG的分频器,值为7。


基于上面配置,我们可以得到SDIOCLLK为48MHz.


假如你配置的分频系数ClockDiv 为0,则SDIO_CK的频率就是24MHz。


顺便提醒下,针对SDIO_CK时钟有个分频旁路选择,即上面寄存器SDIO_CLKCR中的Bypass位所控制的。


当 BYPASS = 0 时,SDIOCLK 会根据CLKDIV 值进行分频,然后驱动 SDIO_CK 输出信号。分频有效,SDIO_CK 的
频率由 SDIOCLK 和 CLKDIV 共同决定。


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