1. f_sync(&SDFile)
该方法简单粗暴,适合一直连续向sd卡中写入数据。while之前就f_open(),循坏内重复:向缓存填充数据->写入数据->刷新写入...,整个过程并没有f_colse();
retSD=f_open(&SDFile,filename,FA_CREATE_ALWAYS|FA_WRITE);//打开文件
if(retSD != FR_OK)while(1);//判断是否成功
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
sprintf(wendu,"temp:%d.%d\n",tempint,tempflo);
retSD = f_write(&SDFile,wendu,strlen(wendu),&numRR);
if(retSD != FR_OK)while(1);//判断
tempint++;
tempflo++;
f_sync(&SDFile);//刷新,先将f_write的内容写入sd卡中,避免因为没有执行f_close而没有写入
HAL_GPIO_TogglePin(led1_GPIO_Port,led1_Pin);
HAL_Delay(500);
}
2. FA_OPEN_APPEND
该方法稳当严谨,不需要一直向SD卡中写入,需要向SD卡中增加数据再调用。f_open()中使用FA_OPEN_APPEND
retSD=f_open(&SDFile,"appEnd.txt",FA_OPEN_APPEND |FA_WRITE);
if(retSD != FR_OK)while(1);
sprintf(wendu,"temp:%d.%d\n",tempint,tempflo);
retSD = f_write(&SDFile,wendu,strlen(wendu),&numRR);//写文件
if(retSD != FR_OK)while(1);//判断
tempint++;
tempflo++;
f_close(&SDFile);//关闭文件
3. f_lseek(&SDFile, f_size(&SDFile));
若使用该方法,f_open()中则不要使用FA_CREATE_ALWAYS(但前提是之前创建过这个文件夹),只要FA_WRITE即可!
retSD=f_open(&SDFile,"lseek.txt", FA_WRITE);//打开文件
if(retSD != FR_OK)while(1);
sprintf(wendu,"temp:%d.%d\n",tempint,tempflo);
f_lseek(&SDFile, f_size(&SDFile)); //方式2:打开后,根据文件字节大小移动读/写指针
retSD = f_write(&SDFile,wendu,strlen(wendu),&numRR);//写文件strlen((const char *)writebuf)
if(retSD != FR_OK)while(1);//判断
tempint++;
tempflo++;
f_close(&SDFile);//关闭文件