OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7819|回复: 9

stm32读取SD卡里的bmp格式文件

[复制链接]

2

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-2-28
在线时间
0 小时
发表于 2014-8-12 16:17:20 | 显示全部楼层 |阅读模式
5金钱
最近在做的一个项目其中有一部分是用stm32读取存储在SD卡里的bmp格式图片,经过gsm模块发彩信到手机上,已经确定是在读取图片发送到串口那一步出问题导致彩信发送失败,不知道是问题错在哪里,请大神指点。
[mw_shl_code=c,true] USART1_printf(USART1,"AT+CMMSDOWN=\"PIC\",240000,50000\r\n"); for(i=0;i<400;i++) { for(j=0;j<600;j++) { f_read(&bmpfsrc,pColorData+j,1,&read_num); USART_SendData(USART1,pColorData[j]); } } USART1_printf(USART1,"\r"); [/mw_shl_code]
这是串口发送部分。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-12 22:53:16 | 显示全部楼层
f_read(&bmpfsrc,pColorData+j,1,&read_num);
不要这样用了....
太浪费.
你直接一次读600字节到你的buffer,然后慢慢的发送给GSM模块了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-2-28
在线时间
0 小时
 楼主| 发表于 2014-8-14 13:43:09 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
多谢原子哥,我按照论坛里一个帖子换了一种写法:
   sprintf((char*)tmp_name,"0:%s.BMP",pic_name);
f_mount(0, &bmpfs[0]);
    bmpres = f_open( &bmpfsrc , (char *)tmp_name, FA_OPEN_EXISTING | FA_READ);
while(!Hand("OK"))       
    { 
CLR_RX();            
        USART1_printf(USART1,"AT+CMMSDOWN=\"IC\",230454,50000\r\n");
           n=230454/5120;
  m=230454%5120;
 if(bmpres==FR_OK)
 {
  for(i=1;i<=n;i++)
     {
  Cleanbuffer();    //清除buffer中的内容其中 buffer定义为unsigned char buffer[5120];   //sd卡读取缓冲区
   f_read(&bmpfsrc,buffer,5120,&read_num);
  for(j=0;j<5120;j++)
  {
 
  printf("%c",buffer[j]);
//   Delay_ms(15);
  }      
  f_lseek(&bmpfsrc,(i*5120));   
     }   
  f_lseek(&bmpfsrc,n*5120);
  Cleanbuffer();
  f_read(&bmpfsrc, buffer,m, &read_num);
  for(j=0;j<m;j++)
  {
  printf("%c",buffer[j]);
//   Delay_ms(15);
  }
  Delay_ms(20);
        
     
  

  USART1_printf(USART1,"\r\n");
  Delay_ms(500);
}

void Cleanbuffer(void)
{
for(i=0;i<5120;i++)
{
    buffer=0;
}

}
但是我用串口助手抓下来的数据全是0,好像读不出图片数据。>
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-14 23:11:05 | 显示全部楼层
回复【3楼】benjamin:
---------------------------------
仿真看下buffer里面的数据.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-2-28
在线时间
0 小时
 楼主| 发表于 2014-8-16 10:00:01 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
查看了,确实全是0
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-16 23:17:31 | 显示全部楼层
回复【5楼】benjamin:
---------------------------------
说明你读文件应该是有问题的了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-2-28
在线时间
0 小时
 楼主| 发表于 2014-8-19 10:20:57 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
读文件的时候我换成f_read(&bmpfsrc,pColorData+j,sizeof(BYTE),&read_num);就可以读出图片数据了,但是当我读取比较多字节时,程序会跳转到void HardFault_Handler(void)这个函数。
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-2-28
在线时间
0 小时
 楼主| 发表于 2014-8-19 15:32:52 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
而且很奇怪的一点就是,当我把单片机与电脑串口连接,用电脑串口助手给单片机放好OK时,程序就完全正常运行了
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-2-28
在线时间
0 小时
 楼主| 发表于 2014-8-19 15:35:12 | 显示全部楼层

这是用电脑串口发送OK成功运行的情况
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-2-28
在线时间
0 小时
 楼主| 发表于 2014-8-19 16:37:40 | 显示全部楼层
我有尝试把图片数据直接放入到代码中,而不使用SD卡读取方式,发现很之前情况一样:当单片机与sim900a连接时,程序卡在void HardFault_Handler(void);但是当单片机与电脑串口相连时,程序正常运行。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-3 11:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表