STM32CUBEMX生成的SDIO和以前版本的不一样
本帖最后由 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文件也和以前版本的不一样了
本帖最后由 moyanming2013 于 2017-8-8 16:20 编辑
结论别下那么快,你稍微深入的看看自己的代码了吗就给这个结论?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_drvTypeDefSD_Driver;SD_Driver是个结构体变量,里面含有指向SD_initialize(BYTE lun)函数的指针。
3.打开“fatfs.c”,其中有个MX_FATFS_Init()函数,该函数会把SD_Driver连接到FATFS文件系统,从而在初始化时间接调用HAL_SD_Init。
如果你没用文件系统,那么也需要自己负责调用SD_Driver的一些函数指针。
如果不用Cube也行,需要自己根据参考手册完成SD的所有内容。
如果要添加文件系统但不用FATFS也行,你自己参考微软的文档自己写一个。
楼上很到位。 能否参考下大神们的代码,我怎么生成的代码仅能检测到而已。。。不能读写呢? CubeMX4.23 + fatfs R0.12 + SD 這個目前有Bug,不過Bug不在那邊。主要是SDIO Write那邊。
這個issue有提交。目前我是用SPI先應急。SDIO有興趣的朋友可以按照1,2文章修改。
1.http://community.st.com/thread/42555-stm32-with-sd-card-and-fatfs-using-cubemx-write-error-and-write-speed-solution
2.http://community.st.com/docs/DOC-1546-cubemx-sdio-dma-fatfs-configuration
官方回應已經提交修訂
http://community.st.com/inbox 这个SDIO档驱动修改完毕了吗 枫天2015 发表于 2017-11-20 17:42
能否参考下大神们的代码,我怎么生成的代码仅能检测到而已。。。不能读写呢? ...
您好,我的也是只能检测,但读写测试失败!
与硬石的程序对比,发现SD 读写函数不一样了,不知道怎么解决!
页:
[1]