文章目录
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
本文详细介绍了在STM32F429单片机上,如何使用RTX系统、SDIO DMA和FATFS进行SD卡文件系统的追加写入操作。文章通过三种方式演示了追加写入的实现,包括FA_OPEN_APPEND模式、f_sync辅助追加和f_seek指针偏移追加,并提供了相关代码示例和测试调用说明。
最低0.47元/天 解锁文章

1001

被折叠的 条评论
为什么被折叠?



