[求助]ch376用的串口通信,根目录没有MY_ADC.TXT却说找到了

ch376用的串口通信,根目录没有建MY_ADC.TXT却说找到了,没有执行新建文件命令,也没有写入数据,关闭文件自动更新不成功。如果去掉判断有没有MY_ADC.TXT文件的程序直接新建的话可以,且写入数据成功,但关闭文件并自动更新还是不成功,电脑上读MY_ADC.TXT文件中只有一个字节,不知道为什么。我想是执行CH376FileOpen后返回的中断都是USB_INT_SUCCESS 但是为什么呢???

请说下你的程序流程,不知道前面的CH376DSIK_MOUNT是否通过?


for ( s = 0; s < 10; s ++ ) { /* 最长等待时间,10*50mS */ mDelaymS( 50 ); if ( CH376DiskMount( ) == USB_INT_SUCCESS ) break; /* 初始化磁盘并测试磁盘是否就绪 */ } 前面有初始化磁盘呀,通过了呀,就是是执行CH376FileOpen后返回的中断都是USB_INT_SUCCESS,可以新建文件但请求写入命令后返回的中断还是USB_INT_SUCCESS而不是USB_INT_DISK_WRITE 所以写入不了,我没有更改模块程序就是屏蔽掉了正式通信的波特率,还是用的9600


确认CH376DiskMount()这个函数返回0X14,还有如果返回USB_INT_SUCCESS那么是你的单片机没有等待中断,或者等待中断之后没有发送0X22的命令来获取中断状态。


CH376DiskMount()后是返回0x14,我用电脑的串口做的监控 s= Wait376Interrupt( ); //读取中断 用上面的等待读取中断值也没错呀,可是不论是CH376FileOpen()打开文件还是请求写入命令后返回的中断都是USB_INT_SUCCESS,这究竟是为啥呀,论坛有个兄弟跟我的情况一摸一样也没有解决,是芯片的问题吗


s= Wait376Interrupt( ); //读取中断 把这个函数实体贴出来看下


#ifndef NO_DEFAULT_CH376_INT UINT8 Wait376Interrupt( void ) /* 等待CH376中断(INT#低电平),返回中断状态码, 超时则返回ERR_USB_UNKNOWN */ { #ifdef DEF_INT_TIMEOUT #if DEF_INT_TIMEOUT < 1 while ( Query376Interrupt( ) == FALSE ); /* 一直等中断 */ return( CH376GetIntStatus( ) ); /* 检测到中断 */ #else UINT32 i; for ( i = 0; i < DEF_INT_TIMEOUT; i ++ ) { /* 计数防止超时 */ if ( Query376Interrupt( ) ) return( CH376GetIntStatus( ) ); /* 检测到中断 */ /* 在等待CH376中断的过程中,可以做些需要及时处理的其它事情 */ } return( ERR_USB_UNKNOWN ); /* 不应该发生的情况 */ #endif #else UINT32 i; for ( i = 0; i < 5000000; i ++ ) { /* 计数防止超时,默认的超时时间,与单片机主频有关 */ if ( Query376Interrupt( ) ) return( CH376GetIntStatus( ) ); /* 检测到中断 */ /* 在等待CH376中断的过程中,可以做些需要及时处理的其它事情 */ } return( ERR_USB_UNKNOWN ); /* 不应该发生的情况 */ #endif } #endif 没改过呀。。。


你调试的时候,把超时去掉,在那边死等中断


使用串口操作的时候,查询中断函数改成下面的试试 /* 查询CH376中断(INT#低电平) */ UINT8 Query376Interrupt( void ) { #ifdef CH376_INT_WIRE if(RI==1) //串口接收标志,串口接收到数据 RI=0; //清串口标志 return( CH376_INT_WIRE ? FALSE : TRUE ); /* 如果连接了CH376的中断引脚则直接查询中断引脚 */ #else if ( RI ) ////串口接收标志,串口接收到数据 { RI = 0; //清串口标志 return( TRUE ); } else return( FALSE ); #endif }


我把DEF_INT_TIMEOUT定义为0就是死等中断呀, 查询中断函数我改成这样才好使,原来的那个检测不到中断,我用AVR单片机128的,有中断引脚,应该不是中断函数的事 UINT8 Query376Interrupt( void ) { #ifdef CH376_INT_WIRE if(CH376_INT_WIRE) return(FALSE);

else{ puts1("检测到中断...."); return(TRUE); } }


1. 建议你看一下CH376手册关于串行接口部分的描述。 2. Query376Interrupt( void ) 这个函数你改的完全不对。 给你贴的程序看不明白吗?只是单片机的寄存器不一样,对照修改一下就可以了


这个函数写错的话通信和u盘初始化不可能成功就因为不能通信上我才改的


终于成功了!!不是修改Query376Interrupt( void ) 函数而是要修改CH376GetIntStatus( void )获取中断值的函数,在发命令读中断值之前要加清除串口的接收寄存器,因为不清的话读的就是以前的中断返回值了,还是打电话管用,谢谢技术人员。。。


只有登录才能回复,可以选择微信账号登录