
本帖最后由 feiante 于 2017-8-8 14:52 编辑 F4芯片的V1.16版本的HAL库,在用stm32CUBEMX生成SDIO时,有一些小bug,如下 /* SDIO init function */ void MX_SDIO_SD_Init(void) { hsd.Instance = SDIO; hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; hsd.Init.BusWide = SDIO_BUS_WIDE_1B; hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; hsd.Init.ClockDiv = 0; } 缺少HAL_SD_Init函数。 stm32f4xx_hal_sd_h文件也和以前版本的不一样了 |
结论别下那么快,你稍微深入的看看自己的代码了吗就给这个结论?STM32CubeMX生成的SDIO没有问题!
下图是生成的正确的典型代码:
1.打开“bsp_driver_sd.c”,里面有个BSP_SD_Init()函数,该函数会调用HAL_SD_Init函数。
2.打开“sd_diskio.c”,里面有个SD_initialize(BYTE lun)函数,它会调用BSP_SD_Init()。
在“sd_diskio.c”中还有个变量:const Diskio_drvTypeDef SD_Driver;SD_Driver是个结构体变量,里面含有指向SD_initialize(BYTE lun)函数的指针。
3.打开“fatfs.c”,其中有个MX_FATFS_Init()函数,该函数会把SD_Driver连接到FATFS文件系统,从而在初始化时间接调用HAL_SD_Init。
如果你没用文件系统,那么也需要自己负责调用SD_Driver的一些函数指针。
如果不用Cube也行,需要自己根据参考手册完成SD的所有内容。
如果要添加文件系统但不用FATFS也行,你自己参考微软的文档自己写一个。
這個issue有提交。目前我是用SPI先應急。SDIO有興趣的朋友可以按照1,2文章修改。
1.http://community.st.com/thread/4 ... rite-speed-solution
2.http://community.st.com/docs/DOC ... fatfs-configuration
官方回應已經提交修訂
http://community.st.com/inbox
您好,我的也是只能检测,但读写测试失败!
与硬石的程序对比,发现SD 读写函数不一样了,不知道怎么解决!