在手册里面有SDIO adapter clock (SDIOCLK = HCLK) 当HCLK设置为72MHz的时候进行配置SDIO_CK, 通过寄存器SDIO_CLKCR的位7:0(CLKDIV)进行设置, 在不使用旁路时钟的时候, SDIO_CK=SDIOCLK/[CLKDIV+2], 应该是对72MHz进行分频 但是CubeMX生成的代码里面默认的参数是对48MHz进行分频 在文件stm32f1xx_ll_sdmmc.h文件里面的这两个宏定义是针对48MHz 这里的48MHz是怎么来的? 并且在进行初始化的时候会使用到这一个宏, 如果时钟是72MHz的话会超过限制的最大400KHz的频率,导致出现问题 |
哪位大哥有stm32f103c8t6的keil编程实例源码呀?求
能在一个程序中同时使用TIM的callback和uart的callback函数吗?
TCP客户端 周期性 发送数据,一段时间后会突然停止,是什么原因。
STM32F103VCT6有64K的RAM?
使用串口双机通信的问题
如何添加一个中断服务函数?
STM32WB55进入shutdown
求助!!!stm32cubeide工程运行报错eclipse.cdt.core,该如何解决
Proteus是否无法正确仿真STM32的开漏输出
Cortex m3内核是很特殊吗,为什么st公司的很多软件比如cubemx.ai唯独不支持m3内核的stm32f1系列
这个宏定义应该确实是有问题的, 这是ST公司的工程师的回答
Re: Is there a bug in STM32CubeMX about SDIOCLK? - STMicroelectronics Community
所以DATASHEET 也限制了数据传输的最大频率48MHZ.
我理解的是按照协议这个时钟设置的频率不应该大于48MHz, 但是按照手册SDIOCLK=HCLK这一个等式的话他的时钟频率是可以达到72MHz的, 因此在实际计算的时候还是应该按照72MHz进行计算, 我没有在手册里面发现如果这个时钟频率大于48MHz的时候会被自动降低为48MHz, 所以协议上规定的低于48MHz应该是人为进行控制的
请问我这个理解在哪里有问题?
手册是根据协议限定了外设输出数据的时钟最大48M.
那个定义是默认缺省值,按照48MHZ安全选定的,它其实是一个中间初始化设定值。
最终外设设定值是用户配置传给函数的内容,所以不影响。
[md]我认为这个宏定义会有影响是因为在调用HAL_SD_Init函数以后它里面会调用HAL_SD_InitCard函数, 这个函数的主要作用是他会产生SD卡的一系列初始化使用到的命令(也就是400KHz的情况), 在这个函数的开始位置会进行通信频率的设置, 这时候使用的不是用户提供的分频值, 而是我认为有问题的那一个
并且用户不能直接修改
这就会导致在之后的初始化的时候频率达到600KHz, 所以我认为代码可能会产生问题, 但是实际使用好像是没有问题的
我认为这一个值会有问题是因为在使用函数HAL_SD_Init的时候会调用函数HAL_SD_InitCard, 在这个函数里面生成SD卡初始化所需要的一系列的命令, 也就是协议里面要求400KHz的地方
这个函数里面会使用一个新的变量进行设置SDIO
但是在这个函数里面设置通信频率的时候直接使用我认为有问题的那个宏定义, 并且没有办法通过用户的参数进行修改, 这会导致这时候的时钟频率是600KHz, 所以我认为这个宏定义是有问题的