我在利用fatfs保存串口的数据时,发现程序只有在第一次运行时成功,while循环重新执行再次存储的时候,每次串口中断接受数据会出错,产生00 00的错误帧,复位之后还是执行一次,之后失败,想了很多原因,一直没有解决,请问有谁知道么。代码如下:
[mw_shl_code=c,true] if(FlagTimer==1)//定时中断4s,开始读取中断缓冲区数据,160B数据,接收完是5s
{ [/mw_shl_code]
[mw_shl_code=c,true] LED0=0;[/mw_shl_code]
[mw_shl_code=c,true] printf("1??Start Collecting DataBuf[RXOutPointer-1]\r\n");
while(RXOutPointer<RXBufSize)
{
temp=GetRXData();
if(RXDataValidFlag==1)
{
DataBuf[RXOutPointer-1]=temp;//读串口数据
printf("%d\t",DataBuf[RXOutPointer-1]);
if(RXOutPointer%32==0)
{
printf("\r\n");
}
}
}
printf("\r\n2??Finish Collecting DataBuf[RXOutPointer-1]\r\n");
RXOutPointer=0;
FlagDone=1;
FlagTimer=0;
} [/mw_shl_code]
[mw_shl_code=c,true] if(FlagDone==1)
{
LED0=1;
printf("3??Start Printing DataBuf:\r\n");
for(i=0;i<RXBufSize;i++)
{
printf("%x\t",DataBuf);
if((i+1)%32==0)
printf("\r\n");
}
printf("4??Finish Printing DataBuf:\r\n");
printf("5??Start Printing ValidDataBuf:\r\n");
for(i=0;i<DecRXBufSize;i++)
{
ValidDataBuf=DataBuf[k]*256+DataBuf[k+1];//数据处理
printf("%d\t",ValidDataBuf);
k+=2;
if((i+1)%16==0)
{
printf("\r\n");
}
}
printf("6??Finish Printing ValidDataBuf:\r\n");
k=0;
FlagDone=0;
FlagSave=1;
}
if(FlagSave==1)
{
res=f_open(&fdst,"0:/PMData/PMData_3.CSV",FA_OPEN_ALWAYS|FA_WRITE);//保存数据
if(res==FR_OK)
{
printf("7??Start Saving ValidDataBuf:\r\n");
for(i=0;i<DecRXBufSize;i++)
{
f_lseek(&fdst,fdst.fsize);//???????????????©??
f_printf(&fdst,"%d, ",ValidDataBuf);//?????????????????????????????à??
if((i+1)%16==0)
{
f_printf(&fdst,"\r\n");//????????·?
}
}
printf("8??Start Saving ValidDataBuf:\r\n");
}
else
{
printf("9??Fail To Save ValidDataBuf:\r\n");
}
f_close(&fdst);
FlagSave=0;
FlagTimer=0;
}[/mw_shl_code]
附件图片是一次运行结果。请各路大神指导啊,一直困在此处无法解决。
|