stm32H750VB+sd卡+fatfs+freertos

在使用stm32H750进行sd卡的fatfs实验时,遇到了一些bug,最终在他人帮助和自己研究下完成基本功能

完整工程链接:https://download.csdn.net/download/qq_40708778/19672005?spm=1001.2014.3001.5501

 

具体步骤

1.配置时钟电路

2.配置sys

要用到freertos,这里使用TIM1

3.配置SDMMC1

除了PC12的CLK线,其他全部软件上拉。这里如果不上拉,可能会出现SD卡挂载不上,报出FR_NOT_READY

打开中断,在开启freertos之后,优先级会自动被改成5

4.配置fatfs

第一个地方也可以选Chinese的。我直接用英文的。防止了cubeide报出RAM用完的一个错误,用keil的同学好像不用担心。

如果sd卡的格式不是fat32,而是exfat的话,这里一定要enable,不然会挂载失败,爆出FR_NOFILESYSTEM的错误

5.freertos设置

stack设置大一些

6.clock

下面给SDMMC1,2的时钟要配置成48,配合SDMMC1设置的SDMMC clock divide factor 设置成5。最后SD卡的写入频率为48/(5+2)=6M。这个数字要小于你sd卡能承受的最大写入速率。

7.程序给大一点heap和stack

 

注:用cubeide可能产生挂不上的bug。

程序部分

main函数基本不用改,只改动freertos.c

#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"#include "fatfs.h"
#include "sdmmc.h"UINT br,bw;			//读写变量char test_buf[1024] = {"0000\r\n"};void StartDefaultTask(void const * argument)
{/* init code for USB_DEVICE */MX_USB_DEVICE_Init();/* USER CODE BEGIN StartDefaultTask */osDelay(10);retSD = f_mount(&SDFatFS,"",1);		while(retSD){retSD = f_mount(&SDFatFS,"",1);osDelay(10);}uint32_t time=0;uint32_t time2=0;char i;/* Infinite loop */for(;;){time = time2;test_buf[3] = time%10+'0';time /= 10;test_buf[2] = time%10+'0';time /= 10;test_buf[1] = time%10+'0';time /= 10;test_buf[0] = time%10+'0';retSD = f_open(&SDFile, "time.txt", FA_CREATE_ALWAYS | FA_WRITE | FA_READ);f_lseek(&SDFile,time2*5);retSD = f_write(&SDFile,&test_buf,strlen(test_buf),&bw) ;retSD = f_close(&SDFile);time2++;	osDelay(100);}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部