7846|1

91

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

stm32+sd卡+fatfs0.08文件系统,图片的数据读取不对。。请大侠们支个招。。 [复制链接]

 
这个是bmp图片的数据;
 
我现在用文件系统读取前面八个字节的数据,老读不出来,读取的数据总是2000073c(16进制);
图片文件直接在sd卡下面,读取一个名叫,qin.bmp 的图片文件
 
 
以下是我的部分代码;
 
void file_system_test(void)
{  
       /* FatFs function common result code */
   
 int n=1;  //定义文件的数量
    char *result1, *result2;  //指针存放的后缀名
    char EXT1[4]=".bmp";    //定义文件的后缀
    char EXT2[4]=".BMP";

#if _USE_LFN
static char lfn[_MAX_LFN * (_DF1S ? 2 : 1) + 1];
finfo.lfname = lfn;
finfo.lfsize = sizeof(lfn);
#endif
 
 printf("开始BMP图像的显示!");
 disk_initialize(0);
 f_mount(0, &fs);
 if (f_opendir(&dirs, "") == FR_OK)  //读取sd卡下面的文件,注意这个是没有文件夹的,直接打开sd卡就能看见
 {
   while (f_readdir(&dirs, &finfo) == FR_OK)    //循环依次读取文件名
   { 
       if (finfo.fattrib & AM_ARC)
     {
         if(!finfo.fname[0])  break;
    if(finfo.lfname[0])  //长文件名
    {
      printf("\r\n 文件%d是:\n%s\n", n, finfo.lfname);
                  result1=strstr(finfo.lfname,EXT1);  /* 小写的后缀名 */
      result2=strstr(finfo.lfname,EXT2);  /* 大写的后缀名 */
    }
     else     //8.3格式文件名
     {                                
       printf("\r\n 文件%d是:\n%s\n", n, finfo.fname); 
                   result1=strstr(finfo.lfname, EXT1);  /* 小写的后缀名,找字符串;成功,返回地址的值,否则,返回0*/
       result2=strstr(finfo.lfname, EXT2);  /* 大写的后缀名,找字符串;成功,返回地址的值,否则,返回0*/
     }
      n++; //文件的数量
   }
      
     }
  //开始读取文件的数据
  //br=1;
     //if(result1!=NULL||result2!=NULL){
 /// if(1){
  // res = f_readdir(&dirs, &finfo);           //如果不是空的地址
         if(finfo.lfname[0]){
       printf("tupianshi:%s", finfo.lfname);         //长文件名  
    res = f_open(&fbmp, "qin.bmp", FA_OPEN_EXISTING | FA_READ);//以读的方式打开文件
   }
   else{
    printf("\r\ntupianshi1111:%s\r\n", finfo.fname);                   //8.3格式文件名
    res = f_open(&fbmp, "qin.bmp",  FA_OPEN_EXISTING | FA_READ); //以读的方式打开文件
   }
 // }
    // while(1){   //读取图片
     res = f_read(&fbmp, buffer, sizeof(buffer), &br);
     //for(j=0;j<512;j++)
     //{
     printf("\r\n%x",buffer);   //试着读取缓冲区的数据 ~~~~~~~~~~~这个地方读取的数据要和图片的数据一样,可是读取出来的都不一样,老是一个数值
     //i++;
    // }
    // if (res || br == 0) break;
  //   };
     f_close(&fbmp);
  }
f_mount(0, NULL);// Unregister a work area before discard it
}
 
diskio.c中的读取块的子函数是:
DRESULT disk_read (
 BYTE drv,  /* Physical drive nmuber (0..) */
 BYTE *buff,  /* Data buffer to store read data */
 DWORD sector, /* Sector address (LBA) */
 BYTE count  /* Number of sectors to read (1..255) */
)
{
 if (count > 1)
 {
  SD_ReadMultiBlocks(buff, sector*BLOCK_SIZE, BLOCK_SIZE, count); //扇区地址*512就是实际地址 默认一个扇区就是512个字节
 }
 else
 {
  SD_ReadBlock(buff, sector<<9, BLOCK_SIZE);
 }
 return RES_OK;
// if(count==1)
//    {
//          SD_ReadBlock((u8 *)(&buff[0]),sector << 9 ,SECTOR_SIZE);
//        
// }
// return RES_OK;
}
 
主函数:

int main(void)
{
  USART_InitTypeDef USART_InitStructure;
  USART_InitStructure.USART_BaudRate = 115200;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  STM_EVAL_COMInit(COM1, &USART_InitStructure);
  NVIC_Configuration();
  printf("\n\r ************************************ \r\n ");
  STM_EVAL_LEDInit(LED1);
  STM_EVAL_LEDInit(LED2);
  STM_EVAL_LEDInit(LED3);
  STM_EVAL_LEDInit(LED4);
 
  STM3210E_LCD_8347_Init();
 
  Status = SD_Init();
  if (Status == SD_OK)
   {
  Status = SD_GetCardInfo(&SDCardInfo);
   printf("\n\rSD卡的总容量:%d MB \r\n ", (SDCardInfo.CardCapacity >>20));
  //printf("\n\r SD卡已经使用容量:%d MB \r\n ", (SDCardInfo.CardCapacity >>20));
  //printf("\n\r SD卡的剩余容量是:%d MB \r\n ", (SDCardInfo.CardCapacity >>20));
   }
   file_system_test();
  while (1)
  {
  }
 
}
 
这个是运行的结果:

 ************************************
 
SD卡的总容量:942 MB
 开始BMP图像的显示!
 文件1是:
qinsong.txt
 文件2是:
a2.txt
 文件3是:
dstfile.txt
 文件4是:
aa.JPG
 文件5是:
qin.bmp
tupianshi1111:
2000073c
 
[ 本帖最后由 qinsong 于 2012-5-30 11:06 编辑 ]

qin.bmp.JPG (67.55 KB, 下载次数: 0)

因为不支持bmp文件,把后缀名去掉就好

因为不支持bmp文件,把后缀名去掉就好

STM32_JPEG.zip

8.76 MB, 下载次数: 1048

这个是工程文件

此帖出自stm32/stm8论坛

最新回复

bmp图片不能看到!请下载到本地再上传!  详情 回复 发表于 2012-5-30 10:01
点赞 关注
 

回复
举报

6066

帖子

90

TA的资源

裸片初长成(初级)

沙发
 

bmp图片不能看到!

请下载到本地再上传!

此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表