个人程序:
称为USB_WriteCom(0X05);/* 执行时钟 */
Delay1s();Delay1s();
USB_WriteCom(0X06); USB_WriteData(0X57);
温度 = USB_ReadData(); if(temp==0XA8) SendString8("Check OK");进入
USB_WriteCom(0X15); USB_WriteData(0X01);延迟1s();
温度 = USB_ReadData(); if( temp==0X51) SendString8("Set Mode OK");输入
while(1)
{
while( USB_INT );
USB_WriteCom(0X22);
temp = USB_ReadData();SendString8("INT=");SendString8_Num(temp,"%X");Enter
switch( temp )
{
case 0x0C: //端点0的接收器到接收到数据,SETUP成功
USB_WriteCom(0x28) ; //接收USB数据信息
temp = USB_ReadData(); //读取数据长度
if( temp==8 ) /*一定会出现8个数据 */
{
for ( i=0;i<8;i++ ) //读取8字节数据
{ USB_Buf
=USB_ReadData); }
CurrentSetupRequest = USB_Buf[1]; //得到bRequest,即设备
SendString8("SETUP="请求endString8_Num(CurrentSetupRequest");Enter
switch(CurrentSetRequest)
{
case 66: //设备请求,即设备请求3;%s
= USB_Buf]; // 类型
请求(");SendString8_Num(endString02d"); { case类型();SendString8_Num(%x02d)))
))
当前描述符 = 设备描述符;//将老公设备
录下来)(0x_WriteCom) //USB发送数据命令
USB_WriteData(8); //设置发送数据长度
for (i = 0; i < 8; i++) //发送八字节数据
{USB_WriteData( CurrentDescriptor );Delay1ms();Delay1ms(); }
USB_WriteCom(0x23);USB_ReadData(); //释放USB自由
CurrentDescriptor_ = 8; // 存储已经发送的数据位置
CurrentDescriptor_Size =8;//设置设备最大长度
1sendString8(send device descrn");
休息;
case 02: //配置请求x02
Current ConfigurationDesc 将配置描述符描述或配置文件/S/S 大小写当前配置文件_当前配置文件_配置文件_配置
文件///配置文件/最大配置描述rSIZ
");
休息;
}
打破;
case 0x05: // 设置设备地址
DeviceAddress = USB_Buf[2]; //取设备地址
USB_WriteCom(0x29); // USB发送数据命令
USB_WriteData(0); // 发送零字节数据
USB_WriteCom(0x23);USB_ReadData(); //释放USBbreak
;
}
}
打破;
case 0x08: //数据端点0的发送器发送完毕,IN成功
USB_WriteCom(0x23);USB_ReadData(); //释放结果
)if (( CurrentSetup= 0x06 )&&(CurrentDescriptor) //在已经发送过的设备 = 并且有可以发送的描述
{
Len = CurrentDescriptor_Size - CurrentDescriptor_Sent; //需要发送数据长度
Len = (Len > 8) ? 8:伦;//判断还需要发送多少位数据
USB_WriteCom(0x29); //USB发送数据命令
USB_WriteData(Len); 发送Len字节数据
for (i = 0; i <; i++) //发送剩下的数据
{
USB_WriteData( CurrentDescriptor[CurrentDescriptor_Sent] );
CurrentDescriptor_Sent++;
}
USB_WriteCom(0x23);USB_ReadData(); //"USB释放
发送SendString8(send desc");
}
else if ( CurrentSetupRequest == 0x05 )
{
USB_WriteCom(0x13); //将设备地址存入芯片
USB_WriteData(DeviceAddress); //发送设备地址
SendString8("set address");SendString8_Num(DeviceAddress,"%d");Enter
}
break;
case 0x00: // ep0 输出
USB_WriteCom(0x23);USB_ReadData(); // 解锁 USB
中断;
默认值: if ( (temp&0x03)==0x03 ) { SendString8("总线重置rn"); }
USB_WriteCom(0x23);
温度 = USB_ReadData(); //未知
中断;
}
}使用串口的打印信息如下: Check OK Set Mode OK INT=B Bus reset INT=B Bus
resetINT =B Bus reset INT=B Bus reset INT=C SETUP=6 Get Desc: 01 send device desc INT=0 INT=0 INT=C SETUP=5 INT=8设置地址 28 INT=7总线复位INT=7总线复位INT=7总线复位INT=C SETUP=6获取描述:01发送设备描述INT=0 INT =0 INT=C设置=5
INT=8
设置地址 29
INT=7
总线复位
INT=7
总线复位
INT=7
总线复位
INT=7
总线复位
INT=C
SETUP=6
获取描述:01
发送设备描述
INT=0
INT=0
INT=0
INT= 0
INT=0
INT=0
INT=C
SETUP=5
INT=8
设置地址 30
INT=7
总线复位
INT=7
总线复位
INT=7
总线复位
INT=C
SETUP=6
获取描述:01
发送设备描述
INT=0
INT=0
INT=C
SETUP=5
INT=8
设置地址31
无法正常发送设备请求符,设备无法正常枚举。