OpenEdv-开源电子网

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

请问各位 用串口传输文件 的问题

[复制链接]

14

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2013-1-19
在线时间
0 小时
发表于 2013-2-21 15:05:39 | 显示全部楼层 |阅读模式
为什么我传输的bmp或者jpg文件电脑接受完 都丢了很多数据  十分严重。。。小弟新手 下面是我的程序::
//Mini STM32开发板范例代码20
//SD卡 实验
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
             
//u8 buf[512];//SD卡数据缓存区

//FIL *temp;
FIL fp;
FATFS fs;
DIR dir;
UINT bw;

char trs[7]={"hello!"};

char buffer[1024];

void newfile(void);
void newwenjian(void);
void write_file(void);
void read_file(void);

char name[25];


void uartsend(u8 *str)
{
while(*str!='\0')
{
USART1->DR=*str;
while((USART1->SR&0X40)==0);//等待发送结束
str++;
if(*str=='\0')
{
USART1->DR=0x0d;
while((USART1->SR&0X40)==0);//等待发送结束
USART1->DR=0x0A;
while((USART1->SR&0X40)==0);//等待发送结束
}
}
}

int main(void)
{
// u8 *pname;    
  Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化    
LCD_Init(); //初始化液晶 
LED_Init();         //LED初始化      
  
  POINT_COLOR=RED;//设置字体为红色   
LCD_ShowString(60,50,"Mini STM32");  

while(SD_Initialize()!=0)//检测不到SD卡
{
LCD_ShowString(60,130,"SD Card Failed!");
delay_ms(500);
LCD_ShowString(60,130,"Please Check!      ");
delay_ms(500);
LED0=!LED0;//DS0闪烁
}
//检测SD卡成功    
LCD_ShowString(60,130,"SD Card Checked OK ");
if(f_mount(0,&fs))
{
LCD_ShowString(60,150,"SD Card NO");
}
newfile();
// delay_ms(10);
// newwenjian();
// f_close(&fp);
// write_file();
read_file();
while(1)
{
LED0=!LED0;
delay_ms(200);
}
}

void newfile(void)
{
u8 res;
res=f_mkdir("0:/PHOTO");
if(res!=FR_EXIST&&res!=FR_OK) //发生了错误
{    
LCD_ShowString(60,150,"SD");
}
}

void newwenjian(void)
{
u8 res;
res=f_open(&fp,(const TCHAR*)"0:/PHOTO/PIO.txt",FA_OPEN_ALWAYS);
if(res)
{
LCD_ShowString(60,170,"sorry");
}
}

void write_file(void)
{
u8 res;
res=f_opendir(&dir,(TCHAR*)"0:/PHOTO");
res=f_open(&fp,(const TCHAR*)"0:/PHOTO/PIO.txt",FA_OPEN_ALWAYS | FA_WRITE);
// f_lseek(&fp,(*temp).fsize);
res=f_write(&fp,&trs,sizeof(trs),&bw);
if(res)
{
LCD_ShowString(60,170,"im sorry");
}
f_close(&fp);
}

void read_file(void)
{
u8 res;
f_opendir(&dir,(TCHAR*)"0:/PHOTO");
f_open(&fp,(const TCHAR*)"0:/PHOTO/PIC00000.jpg",FA_OPEN_ALWAYS | FA_READ);
while(1)
{
res=f_read(&fp,buffer,sizeof(buffer),&bw);
// if(res)
// {
// LCD_ShowString(60,190,"read file");
// }
printf("%s",buffer);
if(res||bw==0)
{
  LCD_ShowString(60,170,"the file is over");
break;
}  
}
}

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

使用道具 举报

14

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2013-1-19
在线时间
0 小时
 楼主| 发表于 2013-2-22 17:28:05 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
哦哦 这样 还想问一下 这个得到bmp jpg文件的数据使用我用的 f_read()这个函数么??  我的那个是不是再弄个通信协议就差不多了??
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-2-22 21:25:36 | 显示全部楼层
回复【楼主位】人生如茶:
---------------------------------
printf("%s",buffer),这句就是最大的问题.
%s表示输出的是字符串,而你读取的jpeg数据/bmp数据,压根就不是字符串,全部是一具体的数值而已.所以得不到你要的结果.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2013-1-19
在线时间
0 小时
 楼主| 发表于 2013-2-23 17:32:34 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
恩 后来发现这个问题了 已经解决 谢谢原子哥指点
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-22 12:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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