当前位置: 首页 > news >正文

STM32H7B0VBT6 Fatfs SD卡读取文件列表

SD_HandleTypeDef hsd;FATFS fs;/* FatFs文件系统对象 */FIL fil;/* 文件对象 */DIR dir;/* 目录对象 */FILINFO fno;/* 文件信息对象 */FRESULT fres;/* FatFs函数返回结果 */#defineMAX_FILES100// 最大文件数#defineMAX_NAME_LEN50// 文件名最大长度(包含 '\0')charfile_list[MAX_FILES][MAX_NAME_LEN];// 存储文件名intfile_count=0;voidprint_file_info(FILINFO*fno);voidList_SD_Files(void){UINT i=0;charpath[]="/";// 根目录// 挂载文件系统fres=f_mount(&fs,path,1);if(fres!=FR_OK){HAL_UART_Transmit(&huart1,(uint8_t*)"挂载失败",8,1000);return;}else{HAL_UART_Transmit(&huart1,(uint8_t*)"挂载成功",8,1000);HAL_UART_Transmit(&huart1,(uint8_t*)"\r\n",2,1000);}// 打开目录fres=f_opendir(&dir,path);if(fres!=FR_OK){//printf("无法打开目录! 错误代码: %d\r\n", fres);return;}//printf("\r\n文件列表:\r\n");//printf("================================\r\n");// 读取目录中的所有条目while(1){// 读取一个目录项fres=f_readdir(&dir,&fno);// 如果读取完成或出错,退出循环if(fres!=FR_OK||fno.fname[0]==0)break;// 跳过"."和".."目录项if(strcmp(fno.fname,".")==0||strcmp(fno.fname,"..")==0)continue;// 打印文件信息//printf("%d. ", ++i);print_file_info(&fno);}if(i==0){//printf("SD卡为空!\r\n");}else{//printf("\r\n总共找到 %d 个文件\r\n", i);}// 关闭目录f_closedir(&dir);}voidprint_file_info(FILINFO*fno){// 检查是否为目录if(fno->fattrib&AM_DIR){//printf("[目录] ");}else{//printf("[文件] ");}// 打印文件名//printf("%-20s", fno->fname);HAL_UART_Transmit(&huart1,(uint8_t*)fno->fname,strlen(fno->fname),1000);strncpy(file_list[file_count],fno->fname,MAX_NAME_LEN-1);file_list[file_count][MAX_NAME_LEN-1]='\0';// 确保结尾file_count++;HAL_UART_Transmit(&huart1,(uint8_t*)"\r\n",2,1000);// 如果不是目录,打印文件大小if(!(fno->fattrib&AM_DIR)){// 格式化文件大小if(fno->fsize<1024){//printf(" %8lu bytes", fno->fsize);//HAL_UART_Transmit(&huart1, (uint8_t*)fno->fsize, sizeof(fno->fsize), 1000);}elseif(fno->fsize<1024*1024){//printf(" %8lu KB", fno->fsize/1024);//HAL_UART_Transmit(&huart1, (uint8_t*)fno->fsize, sizeof(fno->fsize), 1000);}else{//printf(" %8lu MB", fno->fsize/(1024*1024));}}// 打印文件属性// printf(" [");// if(fno->fattrib & AM_RDO) printf("R");// if(fno->fattrib & AM_HID) printf("H");// if(fno->fattrib & AM_SYS) printf("S");// if(fno->fattrib & AM_ARC) printf("A");// printf("]\r\n");}intSD_reads(charflname[500])//读取指定的文件{charline[100];fres=f_open(&fil,flname,FA_READ);if(fres)return(int)fres;while(f_gets(line,sizeofline,&fil)){HAL_UART_Transmit(&huart1,(uint8_t*)line,strlen(line),1000);HAL_UART_Transmit(&huart1,(uint8_t*)"\r\n",2,1000);}f_close(&fil);returnfres;}}``` SD_reads(file_list[1]);//读取列表的第一个文件。# 显示结果 SYSTEM~1123456.TXT123.TXT456.TXT789
http://www.jsqmd.com/news/314382/

相关文章:

  • VNU University of Science:精准调控技术提升机器人执行能力
  • 蚂蚁集团开发的超级机器人大脑:让机器人像人一样学会做任何事
  • MATLAB基于GA-ELM与NSGA-Ⅱ算法的42CrMo表面激光熔覆参数多目标优化
  • kettle从入门到精通 第116课 ETL之kettle,线上排雷,踩坑复盘
  • 小程序毕设项目:基于springboot的文物知识科普“江西文物时讯”微信小程序(源码+文档,讲解、调试运行,定制等)
  • 基于SpringBoot的线上教育培训办公系统毕业设计源码
  • 基于SpringBoot的视频点播系统毕业设计源码
  • 基于SpringBoot的高校线上心理咨询室毕业设计
  • 基于plc的四层电梯自动控制系统设计SIEMENS/西门子(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 宏病毒组做完了,如何开展有效验证?
  • 基于S7-200 PLC和组态王组态双容水箱液位控制系(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • AI应用架构师的经典范例:价值投资多智能体系统精准分析的借鉴意义
  • AI可解释性在原生应用中的重要性:从理论到实践
  • django-flask基于大数据的学习视频资源推送系统的设计与实现vue
  • django-flask基于数据可视化的智慧社区小区住户居民出入登记系统平台vue
  • django-flask智能水果连锁店商城销售系统设计vue
  • 工业数据智能怎样帮助企业打破数据孤岛?
  • 用WebNN API让浏览器跑AI模型又快又省电
  • std::mutex与std::lock
  • 线程函数中抛出的未捕获异常
  • 为什么35岁前没学AI,你仍有机会翻身?
  • 别再只写脚本了!测试工程师如何成为技术决策者
  • 震惊!这些免费工具能让开发效率提升200%:软件测试从业者的专业指南
  • ‌为什么AI安全测试成2026年刚需?——给软件测试从业者的专业深度解析
  • .net AI开发05 第九章 新增 RAG 文档处理后台服务 RagWorker 及核心流程
  • 量子计算+AI融合:开发者必须跟上的新浪潮
  • 【大模型训练】deepseek MTPpp阶段的输入内容哪里来
  • 地理信息科学(GIS)专业就业真相
  • 开发者创作必备工具清单:技术博客 / 教程 /内容全流程工具汇总
  • 面试官:既然 JWT 这么好,为什么大厂还在用 Session?