feiante 发表于 2017-8-8 13:36:20

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 14:40:24

本帖最后由 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也行,你自己参考微软的文档自己写一个。





张亚飞 发表于 2017-8-9 09:23:17

楼上很到位。

枫天2015 发表于 2017-11-20 17:42:29

能否参考下大神们的代码,我怎么生成的代码仅能检测到而已。。。不能读写呢?

g921002 发表于 2017-11-20 22:29:02

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

16块钱的廉价耳机 发表于 2018-3-12 12:06:03

这个SDIO档驱动修改完毕了吗

nini2255 发表于 2018-8-15 15:20:27

枫天2015 发表于 2017-11-20 17:42
能否参考下大神们的代码,我怎么生成的代码仅能检测到而已。。。不能读写呢? ...

您好,我的也是只能检测,但读写测试失败!
与硬石的程序对比,发现SD 读写函数不一样了,不知道怎么解决!
页: [1]
查看完整版本: STM32CUBEMX生成的SDIO和以前版本的不一样