基于CubeMX配置 FreeRTOS + SD + Fatfs 进行SD卡的读写操作

为了便于交流共同学习,博主QQ群242629020stm32-MCU认认真真交流群) 欢迎批评指导!!!电梯:https://jq.qq.com/?_wv=1027&k=5n1AfYq

使用的芯片:STM32F407ZGT6

使用的cubemx版本:V4.24

使用的cubemx支持包:F4 1.19

使用的MDK版本:MDK5.22

//-------------------------------先唠一会儿---------------------------------------------------------------

cubeMX这个软件好用是挺好用,但还是有一些隐藏的坑会让你很抓狂,这个功能我搞了2天才找到这个坑的位置,同样也是进行了无数次的baidu&Google。问题就是在于cubeMX生成的回调函数名称错误!

//-------------------------------------------------------------------------------------------------

1.先来看看引脚功能配置,看下图。

2.然后是时钟配置

3.SDIO配置

        因篇幅所限,这里就列出需要修改的地方,我会在文章后头贴出cubemx配置的详细报告还会附上整个工程!

使能SDIO全局中断

使能SDIO发送接收DMA

4.接下来是配置FATFS

5.FreeRTOS配置

扩大堆栈

使能消息队列功能

扩大任务堆栈

6.生成代码

扩大堆栈

生成单独的C文件

cubeMX配置到此结束

//---------------------------------------------------------------------------------------------------------

接下来配置keil

这些都是CubeMX帮我们生成好的初始化文件

先看main.c

main.c中进行了SDIO功能的初始化

在sdio.c中我们可以看到这样的初始化

可能你会很奇怪,妈耶!怎么写完结构体后竟然没执行初始化动作! 我看到网上好多兄dei们都觉得这儿cubeMX做错了,其实它没错,cubemx只是把初始化那个语句放到了bsp_driver_sd.c文件中了

还有兄dei说cubemx帮我们生成了错误的DMA配置,这纯属瞎扯!

bsp_driver_sd.c是CubeMX帮我们自动生成好的FATFS底层操作驱动。

然后我们也不需要自己去调用BSP_SD_Init()这个函数,在freertos.c ->StartDefaultTask默认任务中进行了文件系统的初始化,在文件系统初始化函数中已经调用了BSP_SD_Init()这个函数了,调用了这个函数也就把SD driver初始化好了。

虽然SD driver初始化好了,你编译后下载到板子中SD卡仍然是无法工作,程序将会在f_oepn()的时候报错中,返回的错误告诉你FR_DISK_ERR :A hard error occurred in the low level disk I/O layer

这是因为cube帮我们生成好的sd_diskio.c中还有些问题,需要我们手动修改一下,就是这个坑!

在sd_diskio.c中我们看到cube帮我们自动生成了2个回调函数,回调函数中进行了操作系统的消息队列的操作,但是这2个回调函数是由BSP开头的,这个开头的回掉函数HAL库是无法直接识别到的,也就无法调用,无法调用底层就无法设置SD卡现在的状态。

所以我们要添加2个回调函数来调用这2个非标准的回调函数。我将这个操作加在了stm32f4xx_it.c这个文件中

最终成功实现了基于freertos的SD卡的读写操作。

fatfs的操作步骤:

f_mount

f_open

f_write/f_read

f_close

这些操作自己随便组合吧!

需要注意的地方:

1.SDIO模式在选择了4B数据线的情况下必须插入SD卡才能初始化通过,否则程序将上电就卡死在MX_SDIO_Init中!选择1B模式不会这样。

我的工程中写了一个SD卡读写的应用程序模块fatfs_app.c,我觉得用得挺方便,简化了fatfs的操作。

篇幅所限就补贴出来了。感兴趣的兄dei可以去下载我的整个工程,这里附上下载链接:

工程下载链接:

https://download.csdn.net/download/mryarnell/10397561

CubeMX配置详细报告:

https://download.csdn.net/download/mryarnell/10397572

为了便于交流共同学习,博主QQ群242629020stm32-MCU认认真真交流群) 欢迎批评指导!!!电梯:https://jq.qq.com/?_wv=1027&k=5n1AfYq

猜你喜欢

转载自blog.csdn.net/MrYarnell/article/details/80224285
sd
今日推荐