OpenEdv-开源电子网

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

读取sd卡图片通过串口发送问题?

[复制链接]

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-3-28
在线时间
0 小时
发表于 2015-5-8 21:31:35 | 显示全部楼层 |阅读模式
5金钱
//从sd卡读取bmp照片 发送给串口
u8 ReadBmpPhotoFromSdSendToUart(const u8 *filename)
{
FIL* f_bmp;
    u16 br;
u8 res;
u8 count=0;
u8 *databuf;     //数据读取存放地址
  u16 readlen=BMP_DBUF_SIZE;//一次从SD卡读取的字节数长度
u8 *bmpbuf;   //数据解码地址
#if BMP_USE_MALLOC == 1 //使用malloc
databuf=(u8*)mymalloc(SRAMIN,readlen); //开辟readlen字节的内存区域
if(databuf==NULL)return PIC_MEM_ERR; //内存申请失败.
f_bmp=(FIL *)mymalloc(SRAMIN,sizeof(FIL)); //开辟FIL字节的内存区域 
if(f_bmp==NULL) //内存申请失败.
{  
myfree(SRAMIN,databuf);
return PIC_MEM_ERR;
}  
#else //不使用malloc
databuf=bmpreadbuf;
f_bmp=&f_bfile;
#endif
res=f_open(f_bmp,(const TCHAR*)filename,FA_READ);//打开文件 ,先尝试打开  
if(res==0)//打开成功.


while(1){
res=f_read(f_bmp,databuf,readlen,(UINT*)&br); //读出readlen个字节  ,然后读取,数据在databuf里
bmpbuf=databuf;//转为char型指针
//发送给串口
while(count<readlen){
  USART_SendData(USART1,bmpbuf[count]);//向串口1发送数据
   while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
count++;
}
if(br!=readlen)readlen=br; //最后一批数据  
if(res||br==0)break; //读取出错
count=0;

f_close(f_bmp);//关闭文件
#if BMP_USE_MALLOC == 1 //使用malloc
myfree(SRAMIN,databuf);  
myfree(SRAMIN,f_bmp);  
#endif
      
 }
return res; //BMP显示结束. 
}

串口有数据受到,但是程序好像陷入了死循环 , 卡死在哪里串口不停接收数据,好像根本没有跳出while(1)的外层循环,也就是没有执行这句if(res||br==0)break;
想不明白啊,为什么没有读到最后呢

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-8 22:21:55 | 显示全部楼层
仿真看问题是最好的解决问题的办法。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 23:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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