完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
个人程序:
称为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 无法正常发送设备请求符,设备无法正常枚举。 |
|
相关推荐
1个回答
|
|
您好,看您的打印,这边这个地址也设置了。您是如何判断的375没有正常发送设备描述符的,看您的打印时产生08中断,即端点0的IN中断了,您可以看一下您的上传的数组的设备描述符是否正确。
|
|
|
|
只有小组成员才能发言,加入小组>>
491 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2884 浏览 2 评论
2374 浏览 1 评论
834浏览 2评论
511浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
379浏览 1评论
657浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
396浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 11:56 , Processed in 0.899108 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号