各位工程师帮忙看看,上位机收到的前四个都是0 0 0 0 上位机: VOID CALLBACK mInterruptEvent( PUCHAR iBuffer ) { if(iBuffer[0]==48)update=1; printf("interrupt receive success ");} void main ( ) {printf( "*** Load DLL: CH375DLL.DLL \n" ); if ( LoadLibrary( "CH375DLL.DLL" ) == NULL ) return; printf( "*** CH375OpenDevice: 0# \n" ); if ( CH375OpenDevice( 0 ) == INVALID_HANDLE_VALUE ) return; update=0; CH375SetIntRoutine(0,mInterruptEvent); Sleep(50); while(1){ while(update==0); if ( CH375ReadData( 0, &mReadBuf, &mLength ) ) printf("bulk receive success %02XH,%02XH,%02XH,%02XH",mReadBuf[0],mReadBuf[1],mReadBuf[2],mReadBuf[3]); } 下位机: void mCh375Interrupt( ) interrupt 0 {... else if ( InterruptStatus == USB_INT_EP1_IN ) { CH375_WR_CMD_PORT(CMD_UNLOCK_USB); CH375_WR_CMD_PORT(CMD_WR_USB_DATA7); CH375_WR_DAT_PORT(60); for ( i = 0; i < 60; i ++ ) CH375_WR_DAT_PORT(i); FLAG_INT_WAIT = 0; } main( ) {。。。。 EX0 = 0; CH375_WR_CMD_PORT(CMD_WR_USB_DATA5); Delay_us(2); CH375_WR_DAT_PORT(1); FLAG_INT_WAIT = 1; CH375_WR_DAT_PORT(0x30); EX0 = 1; } 运行结果:interrupt receive success bulk receive success 00h,00h,00h,00h
测到mLength为0,没有读成功吗?
长度为0的话说明下位机没有给计算机传输数据。 下位机程序估计有问题,你设置好模式之后,你可以让计算机先下传数据下来之后在传输数据。或者在设置好模式之后加50-100MS之后在传输数据,因为在你设置好模式之后,计算机还没初始化好CH372芯片,所以你往端点1写的数据CH372芯片是无响应的。
引用你们技术人员的话 “首先是通过中断端点(端点1)传数据,中断端点上传成功中断之后,然后再往批量端点写数据,等到批量端点上传成功之后再传下一次数据,还有PC机中的中断服务程序不要做太多费时的操作,一般都是发个消息,然后在消息响应中做相应处理(一般是读端点2的数据)” 我想让单片机往端点1写数据,告诉上位机要发数据上去了,再用批量端点传数据给上位机。现在端点1的数据能收到,但之后的批量传送的数据上位机没收到。 调试的时候发下下位机可以执行到else if ( InterruptStatus == USB_INT_EP2_IN ) {CH375_WR_CMD_PORT(CMD_UNLOCK_USB); }里面。是不是说明下位机的批量端点发送时成功的?
不好意思,上位机读数据mlength没有赋值,现在赋了值就好了~