1.7 Cubemx STM32F429_RTX SDIO_DMA_FATFS基于SD卡的FATFS测试(二)

本文详细介绍了在STM32F429单片机上,如何使用RTX系统、SDIO DMA和FATFS进行SD卡文件系统的追加写入操作。文章通过三种方式演示了追加写入的实现,包括FA_OPEN_APPEND模式、f_sync辅助追加和f_seek指针偏移追加,并提供了相关代码示例和测试调用说明。
摘要由CSDN通过智能技术生成

1、SDIO_DMA_FATFS基于SD卡的FATFS测试

一、配置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、代码

int Counter11;
void main_task (void * arg) 
{
   
	char Save_Temp[21];
	FRESULT result;
	rtc_t RTC_CurrentTime={
   0};
	
	fatfs_test();
	mf_scan_files("");
	mf_showfree("");
	while(1)
	{
   
		osDelay(1000);
		RTC_GetTime(&RTC_CurrentTime);
		
		RTC_Date[0]=20;//世纪
		RTC_Date[1]=RTC_CurrentTime.sdatestructure.Year; 		//年
		RTC_Date[2]=RTC_CurrentTime.sdatestructure.Month;		//月
		RTC_Date[3]=RTC_CurrentTime.sdatestructure.Date; 		//日
		
		RTC_Date[4]=RTC_CurrentTime.stimestructure.Hours;		//时
		RTC_Date[5]=RTC_CurrentTime.stimestructure.Minutes;	//分
		RTC_Date[6]=RTC_CurrentTime.stimestructure.Seconds;	//秒

//	  Counter11=sprintf(Save_Temp,"%02X%02X/%02X/%02X %02X:%02X:%02X\r\n",
		Counter11=sprintf(Save_Temp,"%02d%02d/%02d/%02d %02d:%02d:%02d\r\n",
		RTC_Date[0],
		RTC_Date[1],
		RTC_Date[2],
		RTC_Date[3],
		RTC_Date[4],
		RTC_Date[5],
		RTC_Date[6]);
		
		result=SaveToSDcard((BYTE*)Save_Temp,sizeof(Save_Temp));
		if(result == FR_OK)
		{
   
			LED1_Toggle();
		}
		else 
		{
   
			LED0_ON();
		}
		printf("%02d/%02d/%02d    ",2000 + RTC_Date[1], RTC_Date[2], RTC_Date[3]);
		/* Display time Format : hh:mm:ss */
		printf("%02d:%02d:%02d\r\n",RTC_Date[4], RTC_Date[5], RTC_Date[6]); 
		printf("\r\n");
	}
}
#include "bsp_sdcard.h"
#include "bsp_usart.h"
#include "bsp_led.h"

FILINFO fileinfo;//文件信息
DIR dir;

FATFS fs;													/* FatFs文件系统对象 */
FIL file;													/* 文件对象 */
FRESULT f_res;                    /* 文件操作结果 */
UINT fnum;            					  /* 文件成功读写数量 */
uint8_t mk_buffer[_MAX_SS]; 			/* a work buffer for the f_mkfs() */

BYTE ReadBuffer[1024]={
   0};        /* 读缓冲区 */
BYTE WriteBuffer[]= "欢迎使用硬石STM32开发板 今天是个好日子,新建文件系统测试文件\n";/* 写缓冲区*/

/* 扩展变量 ------------------------------------------------------------------*/
/* 私有函数原形 --------------------------------------------------------------*/
static void printf_fatfs_error(FRESULT fresult);

void fatfs_test(void)
{
   
	printf("****** 即将进行测试... ******\r\n");	
	if(retSD == 0)
  {
   
	//在SD卡挂载文件系统,文件系统挂载时会对SD卡初始化
	f_res = f_mount(&fs,(TCHAR const*)SDPath,0);
	printf_fatfs_error(f_res);
    /*----------------------- 格式化测试 ---------------------------*/  
		#if 0
		f_res = FR_NO_FILESYSTEM;
		#endif
		
    /* 如果没有文件系统就格式化创建创建文件系统 */
    if(f_res == FR_NO_FILESYSTEM)
    {
   
      printf("》SD卡还没有文件系统,即将进行格式化...\r\n");
      /* 格式化 */
      f_res=f_mkfs((TCHAR const*)SDPath,FM_FAT32,0,mk_buffer, sizeof(mk_buffer));							
      
      if(f_res == FR_OK)
      {
   
        printf("》SD卡已成功格式化文件系统。\r\n");
        /* 格式化后,先取消挂载 */
        f_res = f_mount(NULL,(TCHAR const*)SDPath,1);			
        /* 重新挂载	*/			
        f_res = f_mount(&fs,(TCHAR const*)SDPath,1);
      }
      else
      {
   
        printf("《《格式化失败。》》\r\n");
        while(1) LED0_ON();
      }
    }
    else if(f_res!=FR_OK)
    {
   
      printf("!!SD卡挂载文件系统失败。(%d)\r\n",f_res);
      printf_fatfs_error(f_res);
      while(1)LED0_ON();
    }
    else
    {
   
      printf("》文件系统挂载成功,可以进行读写测试\r\n");
    }
    
    /*----------------------- 文件系统测试:写测试 -----------------------------*/
    /* 打开文件,如果文件不存在则创建它 */
    printf("****** 即将进行文件写入测试... ******\r\n");	
    f_res = f_open(&file
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值