又遇到CH376EVT评估版相关程序问题了

这次的问题是,在调用CH376FileOpen("/MY_DATA.TXT")函数时发生了一个很奇怪的现象: 我的U盘内没MY_DATA.TXT文件,所以当调用CH376FileOpen("/MY_DATA.TXT")函数后不可能返回USB_INT_SUCCESS,但是应该返回ERR_MISS_FILE,也就是说s应该从串口接收缓冲器中收到0x42这个值,可是我收到的却是0x6C,但是用示波器看到的却是0x42。 我不知道产生上述现象的原因是什么。串口应该不会有错,因为前面初始化时s返回值都是正确的。 请高手指教!!

如果示波器看到的是0x42,那么表示CH376返回的代码是正确的,出错很可能是你的串口接收子程序有点问题,贴出来看看


当 CH376有中断产生的时候,CH376的TXD引脚会自动的发送一个数据给单片机 表示有中断产生(主要目的是省略中断引脚),这个时候应该读单片机的串口数据并且清除单片机的串口标志(因为是无效数据),后续数据才是有效数据,程序中只需要在查询中断子程序中 多读一次 即可。


这个是AVR(MEG8515)串口操作CH376的中断查询程序,在你的中断查询函数中对应的地方修改下再试试: unsigned char Query376Interrupt( void ) { unsigned char temp; #ifdef CH376_INT_WIRE xReadCH376Data(); return( CH376_INT_WIRE ? FALSE : TRUE ); /* 如果连接了CH376的中断引脚则直接查询中断引脚 */ #else if((UCSRA & (1< { temp=UDR;//读数据寄存器,仅仅是为了硬件将串口接收标志清零. return ( TRUE ); } else return ( FALSE ); #endif }


其实我已经注意到了当单片机产生中断时,其TXD引脚会发出相应的中断状态值,而在后面查询时又会产生一个中断状态值,因此一般情况下,当发出会产生中断的命令后,单片机的串口接收缓冲寄存器将接收两个相同的数据(刚开始我以为接收缓冲器接收的第一个数据会被第二个数据覆盖,但是事实却不是这样的~~~~(>_<)~~~ )。 因此我定义一个数组来存储接收的数据,在串口接收中断里直接将接收到的值赋给该数组。这样可以随心所欲的查看单片机所接收到的数据啦^_^ 但是现在还有一个问题,就是在调用sprintf函数时,程序竟然跑飞了。。。跑到debug.c中的mIfErrStop()函数中去了。。。 请高手再帮我分析下~~谢谢啦O(∩_∩)O~~


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