
stm32f407这个STM32_RCC_PERIPHCLK_SDMMC 是哪里定义的
STM32 CUBEIDE 编译报error: expected identifier or '(' before '__asm'
简单聊聊STM32的SPI外设
STM32F405随机脉冲计数的定时器通道选择问题
STM32H7和F4做永磁同步电机FOC控制如何选型,哪个开发更好?
使用Cubeprogrammer无法连接、连接G431和一块H750的板子可以连上但是连另外一块H750的板子和F407的板子就直接报错,这个应该如何解决。
STM32F407的高速USB,采用的是虚拟串口方式,VCP驱动有linux系统的吗
如何使用TIM2的更新事件触发TIM1的PWM DMA
RAM 容量不足导致的数据溢出问题及优化方案
stm32f407的flash内容没有做任何事情,但是它的内容改变了。
我们可以先计算输出SDIOCLK,再根据自己拟定的SDIO时钟分频系数
计数出SDIO_CK的频率。在ST的手册和代码里,分频系数多以ClockDiv 标记。
SDIOCLK通过PLL生成,涉及到PLLM、PLLN、PLLP和PLLQ参数,可以计算出SDIOCLK的频率。
上面的这些参数一般来说配置好后就固定了,最后一步得到的就是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 输出信号,不进行分频。