FreeRTOS 版本: FreeRTOSv10.2.1
HAL 版本: Keil.STM32F4xx_DFP_HAL.2.13.0
版本无所谓,只是记录下。
文件目录 :FreeRTOSv10.2.1_191129\FreeRTOS-Labs\Source\FreeRTOS-Plus-FAT 整个拷贝到工程。
所需C文件:1.上图 ff_xx.c, (ff_locking.org 删除不需要)。 2.\portable\common\ff_ramdisk.c。
3.\portable\STM32F4xx\ff_sddisk.c 和 stm32f4xx_hal_sd.c(使用提供的 hal sd库文件,替换工程hal_sd文件,版本不同函数会不同,所以用提供的就行)。
添加头文件目录:\include 、\portable\common、\portable\STM32F4xx。(inlcude目录下)
文件添加完编译会提示:
所以跟TCP移植一样,官方提供FreeRTOSFATConfigDefaults.h默认配置,新建FreeRTOSFATConfig.h 添加自己的配置。
这些配置在官网介绍,都需要添加:
https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_FAT/Embedded_File_System_Configuration.html
详细配置见链接
(FreeRTOSFATConfig.h) https://blog.csdn.net/wy212670/article/details/106859340
配置文件完编译:
会报错 ff_old_config_defines.h 文件 , 既然是old,不需要。去include目录删除,同时在ff_headers.h中删除头文件引用,
编译:(麻烦开始!!!)报很多错和警告。一个个修改。
双击定位到 ff_stdio.h
configNUM_THREAD_LOCAL_STORAGE_POINTERS 5 大于3就行。
编译:
把ff_dev_support.c文件屏蔽不编译。
编译:很多结构体未定义。
主要是头文件引用问题,ff_sddisk.c 和 stm32f4xx_hal_sd.c 最好都引用 #include "stm32f4xx_hal_sd.h",
然后在ff_headers.h 中引用 #include "stm32f4xx_hal.h",这样就没问题了。
编译:
就剩7个错误。
主要是SD模块函数开关没打开,在stm32f4xx_hal_sd.c 打开 HAL_SD_MODULE_ENABLED
在FreeRTOSFATConfig.h中 定义就行了,#define HAL_SD_MODULE_ENABLED。
编译:
又是一堆警告和错误,不过都很明显,主要是调用了 stm32f4xx_ll_sdmmc.c MMC库文件函数名和参数不同。
把stm32f4xx_hal_sd.c 中 SDIO_ConfigData 函数名 全部替换成 SDIO_ConfigData。
把 SDIO_GetResponse(SDIO_RESPx)函数多加一个参数 SDIO_GetResponse(hsd->Instance, SDIO_RESPx),全部替换。
编译:
就剩一个错了。
在ff_sddisk.c 回调函数用不到,实现一个空函数就行
编译没有错了!!!
就可以测试了,插上SD卡 , 打开串口。
在main.c调用 FF_SDDiskInit("/");
如果打印初始化失败,主要是SD卡 检测不到卡。
可以屏蔽代码,ff_sddisk.c 中 prvSDMMCInit(),
(不一定要屏蔽,自己检查代码和SD卡cd检查引脚,根据PCB,没用到CD线,就可以屏蔽)
需要注意的是初始化SD卡 FF_SDDiskInit()-> prvSDMMCInit( 0 )->vGPIO_SD_Init() 函数中
根据开发板SD卡 数据线是四线还是三线 初始化,我的是4线,打开 BUS_4BITS。
还有在配置文件中 ,文件名长度要尽量小,我设置200最后ff_open() molloc卡死,改成50。
#define ffconfigMAX_FILENAME (49+1)
最后编译,
证明初始化成功,能读取卡信息,能挂载。能否读写还需要写代码测试。
读写测试:
ff_mkdir("/wy") 创建文件夹。
ff_fopen( pcFileName, "w" )打开文件流(ff_fopen()未创建文件会自动创建文件)。
ff_fwrite( pcRAMBuffer, fsRAM_BUFFER_SIZE, 1, pxFile )读取文件,具体参考官方介绍。
代码:https://blog.csdn.net/wy212670/article/details/106941394
创建文件夹成功,创建文件写入成功,读取文件成功。