|
在手册里面有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的频率,导致出现问题 |
调用HAL_FLASH_OB_Unlock()直接进入 HardFaultHandler
STM32 增加 WiFi + 以太网的低成本方案
KEILMDK每次都要手动选Reset and Run吗 不然下载到板子上得重启电源才行 求解答
NUCLEO G474RE无法运行程序
STM32F407VGT6 开发板Beak at address "0x0" with no debug information our outside
STM32F103的USB的虚拟串口,串口助手打开的时候会收到两条数据,第一条数据是前5秒串口助手未打开时发送的,这怎么解决?
BootLoader 与 DFU 模式的区别
调度器原子变量相关问题
询问电源纹波对芯片的影响
运行到 WRITE_REG (FLASH->OPTKEYR, FLASH_OPTKEY1)跳转 HardFaultHandler
微信公众号
手机版
这个宏定义应该确实是有问题的, 这是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, 所以我认为这个宏定义是有问题的