U盘插入后不能自动进入读写操作,需要将U盘插在USB口中再将单片机复位才能识别出U盘,进入读写操作,请问大师这是怎么回事啊,要如何解决?我的硬件连线和程序都没有问题的
插上U盘都,U盘两端的电压是多少? 可能是因为在插入U盘时引起电压突降,导致375或单片机不能正常工作。你的USB口电压处有没有加上100UF左右的电容呢?
我没有连电容,但是我测了两端电压,没有突降,只有0.02V左右的变化呀
在USB口上的电源和地之间接一个大于200UF的电解电容试下看可能操作
插上U盘产生的电压突降是瞬时状态,可能只有几十纳秒,你加上个100UF左右的电容试试。
那你后插U盘的话可以工作吗??
多谢大师们的关心,我把USB供电的线连到别的地方就好的啦.可能原来那个点的电压本身就不稳定.呵呵,谢谢你们了.还幼个问题要请教一下,我要用375和单片机既要能读写U盘,又要做SLAVE与PC机相连,可以吗?请问有没有这方面的资料?
可以的,可以参考FILELIB4/EXAM0的例子,可以读写U盘,也可以连接计算机通讯
大师,我实验了你们USB口转串口的实验,那只是将USB接受到的数通过串口发送出去.可我想直接用USB口作为与PC机数据交换的接口,不知道有此相关的资料吗?
FILELIB4/EXAM0提供的就是即能做主机又能做设备的例子,375在做主机时可以实现对U盘的读写,在做设备时实现通过USB口与PC通信。只是需要进行主从切换。
你可以下载CH372EVT.ZIP/PUB/TEST 下位机用TEST程序,将数据发给PC机,上位机用DEBUG372这个工具可以调试下位机程序,测试数据上传或下传成功.
FILELIB4/EXAM0里面有3个C文件,该使用哪个呢?是不是用CH375.C?
主程序里只要这个就行了码?#define CH375HF_NO_CODE 1 #include "CH375.H"
/* 为printf和getkey输入输出初始化串口 */ void mInitSTDIO( ) { SCON = 0x50; PCON = 0x80; TMOD = 0x21; TH1 = 0xf3; /* 24MHz晶振, 9600bps */ TR1 = 1; TI = 1; }
UINT8 IsKeyPress( ) { if ( USER_KEY_IN == 0 ) { /* 有键按下 */ LED_OUT_INACT( ); /* LED灭 */ mDelaymS( 50 ); if ( USER_KEY_IN == 0 ) { while ( USER_KEY_IN == 0 ); /* 等待按键释放 */ mDelaymS( 50 ); while ( USER_KEY_IN == 0 ); /* 按键去抖动 */ LED_OUT_ACT( ); /* LED亮以示工作 */ return( 1 ); } LED_OUT_ACT( ); /* LED亮以示工作 */ } return( 0 ); }
main( ) { LED_OUT_INIT( ); LED_OUT_ACT( ); /* 开机后LED闪烁一下以示工作 */ mDelaymS( 100 ); /* 延时100毫秒 */ LED_OUT_INACT( ); mDelaymS( 100 );
mInitSTDIO( ); /* 为了让计算机通过串口监控演示过程 */ printf( "Start CH375 demo ...\n" );
EA = 1; LED_OUT_ACT( ); /* LED亮以示工作 */ while ( 1 ) { /* 用户按键导致USB主从模式来回切换 */ LED_HOST( ); printf( "Set USB host mode\n" ); host( ); LED_DEVICE( ); printf( "Set USB device mode\n" ); device( ); } }
HOST.C于DEVICE.C怎么使用?
实际上是这样的,在你按下键之后,首先会检测,如果有USB设备上来的话,就操作设备,在按下键,如果是接到计算机上面的话,就和计算机通信
可我只用mani函数的话好象并没有您说的那样工作.我不知道HOST.C与DEVICE.C该怎么样使用,是不是只使用375.C,还是要将这三个C合在一起?请大师讲解一下具体的使用方法好吗?谢谢啦
我用了EXAM0了,但是工作不正常,用于监控程序的LED一直再闪,串口一直重复显示Start CH375 demo ...与Set USB host mode,按了切换的按钮也没有用,主程序是这样的main( ) { LED_OUT_INIT( ); LED_OUT_ACT( ); /* 开机后LED闪烁一下以示工作 */ mDelaymS( 100 ); /* 延时100毫秒 */ LED_OUT_INACT( ); mDelaymS( 100 );
mInitSTDIO( ); /* 为了让计算机通过串口监控演示过程 */ printf( "Start CH375 demo ...\n" );
EA = 1; LED_OUT_ACT( ); /* LED亮以示工作 */ while ( 1 ) { /* 用户按键导致USB主从模式来回切换 */ LED_HOST( ); printf( "Set USB host mode\n" ); host( ); LED_DEVICE( ); printf( "Set USB device mode\n" ); device( ); } }请问大师这是什么原因呀??