//从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;
想不明白啊,为什么没有读到最后呢
|