ST意法半导体
直播中

岳臻俊

9年用户 1167经验值
私信 关注
[问答]

stm32f4 sdio时钟如何获取通过什么函数?

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

回帖(2)

李艳

2025-3-7 14:49:26
对于STM32F4系列库函数可能没法这么得到,要自己组织下代码获取。下面以STM32F407为例。


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


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

cherry1989

2025-3-10 17:17:41

在 STM32F4 系列中,SDIO 的时钟源可以通过 RCC_GetClocksFreq 函数获取。这个函数可以返回系统时钟、AHB 时钟、APB1 时钟、APB2 时钟等的频率。SDIO 的时钟通常来源于 PLL48CLK,因此你需要检查 RCC 配置以确定 PLL48CLK 的频率。


以下是一个示例代码,展示如何获取 SDIO 时钟频率:


#include "stm32f4xx.h"

void Get_SDIO_Clock_Freq(void) {
    RCC_ClocksTypeDef RCC_Clocks;
    RCC_GetClocksFreq(&RCC_Clocks);

    // SDIO clock is derived from PLL48CLK
    uint32_t sdio_clock = RCC_Clocks.PLL48CLK_Frequency;

    printf("SDIO Clock Frequency: %lu Hzn", sdio_clock);
}

解释:



  1. RCC_ClocksTypeDef: 这是一个结构体,用于存储各种时钟频率。

  2. RCC_GetClocksFreq: 这个函数填充 RCC_Clocks 结构体,其中包括 PLL48CLK_Frequency,即 PLL48CLK 的频率。

  3. PLL48CLK_Frequency: 这是 SDIO 时钟的频率,通常用于 SDIO 接口。


注意事项:



  • 确保在调用 RCC_GetClocksFreq 之前,已经正确配置了 RCC 时钟树,特别是 PLL48CLK。

  • 如果 PLL48CLK 没有正确配置或启用,PLL48CLK_Frequency 可能为 0。


与 STM32H7 的区别:


在 STM32H7 系列中,你可以使用 HAL_RCCEx_GetPeriphCLKFreq(STM32_RCC_PERIPHCLK_SDMMC) 来直接获取 SDMMC 时钟频率。然而,STM32F4 系列没有这个函数,因此需要通过 RCC_GetClocksFreq 来间接获取 SDIO 时钟频率。


希望这对你有帮助!

举报

更多回帖

发帖
×
20
完善资料,
赚取积分