求助大虾,我使用STM32f103和CH376S通讯,铜鼓USART串口,程序基本调试成功。但是在保存数据时,有时能保存,有时保存不上。我在应用中保存5次,有的时候一次也存不上,有的时候能存上2,3,4次等。程序代码如下:子程序都是调用的例程库里面的 void UsbStore(void) { uint8 i,s,j; UINT8 TarName[64]; /* 目标文件名缓冲区 */ // u16 RealCount; uint8 buf[128]; if((STATUSSUM.A==2)&&(USBCOMFLG.A==1)&&(USBCOMFLG.G==1)) { USBCOMFLG.A=0; j=0; while ( CH376DiskConnect( ) != USB_INT_SUCCESS )// 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 { delay_ms( 100 ); j++; if(j>1) { USBCOMFLG.B=1; //U盘未插入或未插好 break; } } delay_ms( 200 ); if(USBCOMFLG.B==0) { for ( i = 0; i < 10; i ++ ) /* 最长等待时间,100*50mS */ { delay_ms( 50 ); s=CH376DiskMount(); // 初始化磁盘并测试磁盘是否就绪 if(s==USB_INT_SUCCESS) break; else if (s==ERR_DISK_DISCON) break; if ( CH376GetDiskStatus( ) >= DEF_DISK_MOUNTED && i >= 5 ) // 有的U盘总是返回未准备好,不过可以忽略,只要其建立连接MOUNTED且尝试5*50mS break; } if ( s == ERR_DISK_DISCON ) // 检测到断开 { USBCOMFLG.B=1; goto UsbFault; } if ( CH376GetDiskStatus( ) < DEF_DISK_MOUNTED ) // 未知USB设备,例如USB键盘、打印机等 { USBCOMFLG.C=1; goto UsbFault; } strcpy( (char *)TarName, "\\AAAAAAAA.TXT" ); //目标文件名 s = CH376FileOpen( "/YY_ADC.XLS" ); // 打开文件,该文件在C51子目录下 if ( s == USB_INT_SUCCESS ) { s=CH376ByteLocate(0xffffffff); mStopIfError(s); } else if(s ==ERR_MISS_FILE) { s = CH376FileCreate( "/YY_ADC.XLS" ); // s = CH376FileOpen( TarName ); mStopIfError(s); } else { mStopIfError(s); goto UsbFault; }
strcpy((char *)buf, "兄弟们那个加油哇 呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵" ); s = CH376ByteWrite( buf, strlen((const char *)buf), NULL ); /* 以字节为单位向当前位置写入数据块 */ mStopIfError(s); s = CH376FileClose( TRUE ); mStopIfError(s); UsbFault: delay_us(1); } } }