请问那位大哥知道,当把ch372连到计算机上的时候是通电就提醒你有新硬件,要求安装驱动,还是要用单片机运行的时候才让你安装驱动? 我的D+和D-都是零V是不是ch372坏了啊?刚开始的时候用as1117供电,把线接错了,会不会把ch372弄坏了?
在单片机设置好模式之后(设置模式2),计算机才发现新的硬件,提醒你安装驱动,U+和D-都为0V的话,那说明你的模式没有设置好,你用测试命令(CHECK-EXIST),看下输出的数据是不是你输入数据的取反,如果是的话,那就说明你的硬件没什么问题,如果不是的话,那就说明你的硬件存在问题,例如晶振没起振,复位不完全,硬件连线有问题等等
请hcn大哥帮着看看这段程序有问题吗,我是用的c8051f020单片机,应该是ch372初始化以后就提示要安装驱动程序了把,我的没有提示啊?是那方面的原因啊?谢谢你了!
void CH375_WR_CMD_PORT( unsigned char cmd ) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ delay2us();
P1MDOUT = 0xff; //对于标准双向I/O,请在此设置为输出方向 P1 = cmd; CH375_A0 = 1; //选择CH375的命令口
CH375_RD = 1; //如果I/O默认电平是高电平,那么这是可选操作 CH375_CS = 0; CH375_WR = 0; CH375_CS = 0; //对于高速单片机,该指令用于延时,以便向CH375_WR产生宽度至少为80nS的低电平脉冲 CH375_WR = 1; CH375_CS = 1; CH375_A0 = 0; P1MDOUT = 0x00; //对于标准双向I/O,请在此设置为输入方向 P1 = 0xFF; //对于准双向I/O,请在此设置输出全高电平
delay2us(); }
void CH375_WR_DAT_PORT( unsigned char dat ) { /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */
P1MDOUT = 0xff; //对于标准双向I/O,请在此设置为输出方向 P1 = dat; CH375_RD = 1; //如果I/O默认电平是高电平,那么这是可选操作 CH375_A0 = 0; CH375_CS = 0; CH375_WR = 0; CH375_CS = 0; //对于高速单片机,该指令用于延时,以便向CH375_WR产生宽度至少为80nS的低电平脉冲 CH375_WR = 1; CH375_CS = 1; P1MDOUT = 0x00; //对于标准双向I/O,请在此设置为输入方向 P1 = 0xFF; //对于准双向I/O,请在此设置输出全高电平
// delay1us(); /* 因为MCS51单片机较慢所以实际上无需延时 */ }
unsigned char CH375_RD_DAT_PORT( void ) { /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */
unsigned char dat; P1MDOUT = 0x00; //对于标准双向I/O,请在此设置为输入方向 P1 = 0xFF; // 对于准双向I/O,请在此设置输出全高电平,便于输入 CH375_CS = 0; CH375_RD = 0; CH375_CS = 0; // 对于高速单片机,该指令用于延时,以便向CH375_RD产生宽度至少为80nS的低电平脉冲 dat = P1; CH375_RD = 1; CH375_CS = 1; P1 = 0xFF; //对于准双向I/O,请在此设置输出全高电平 return( dat ); }
/* 延时50毫秒,不精确 */
/* CH375初始化子程序 */ void CH375_Init( ) { unsigned char i; CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 测试CH375是否正常工作 */ CH375_WR_DAT_PORT( 0x55 ); /* 写入测试数据 */ i = ~ 0x55; /* 返回数据应该是测试数据取反 */ if ( CH375_RD_DAT_PORT( ) != i ) { /* CH375不正常 */ for ( i=80; i!=0; i-- ) { CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* 多次重复发命令,执行硬件复位 */ CH375_RD_DAT_PORT( ); } CH375_WR_CMD_PORT( 0 ); Delay50ms( ); /* 延时50ms */ } /* 设置USB工作模式, 必要操作 */ CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); CH375_WR_DAT_PORT( 2 ); /* 设置为使用内置固件的USB设备方式 */ for ( i=100; i!=0; i-- ) { /* 等待操作成功,通常需要等待10uS-20uS */ if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; }
IT0 = 0; /* 置外部信号为低电平触发 */ IE0 = 0; /* 清中断标志 */ EX0 = 1; /* 允许CH375中断 */ }
没有提示就说明你的硬件连接有问题 CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 测试CH375是否正常工作 */ CH375_WR_DAT_PORT( 0x55 ); /* 写入测试数据 */ i = ~ 0x55; /* 返回数据应该是测试数据取反 */ if ( CH375_RD_DAT_PORT( ) != i ) { /* CH375不正常 */ 将CH375_RD_DAT_PORT( )返回的数据读取出来看下数据是多少?如果不是0XAA的话,那就说明你的硬件有问题
我的返回值是0xff,是不是应该换个片子试试啊,其他地方应该没有问题的
返回FF的话,那么你的晶振起振了没有?
起振了,我用的是ch372V,有源晶振,波形类似方波
而且D+和D-一直都是零V
你在仔细检查下你的硬件连线有没有问题,还有就是你的写命令和写数据之间要2US的延时,数据和数据之间要1US的延时,还有就是在你的主程序一开始的时候要延时100MS左右,为的是使372复位完全
不弄了,郁闷先回家了,谢谢hcn大哥
我刚开始调也老读出0XFF,后来发现控制线的IO口忘了设置输出方向了.加上就好了,不知道你有没有类似的低级错误.