STM32 USB 扫码枪问题

最近在做STM32扫码枪的东西,用的是CH376,读取U盘、鼠标都没问题,现在连上扫码枪获取不到设备描述符,但是配置描述符能获取,而且Set idle success Set idle success,不知道哪里出了问题。还有扫码枪扫到的数据应该怎样读取?

",现在连上扫码枪获取不到设备描述符",试下把设置地址、总线复位删掉,能否获取?扫码枪的数据按照类似键盘的方式获取,对扫码枪上传中断端点不断发IN包。


                           

",现在连上扫码枪获取不到设备描述符",试下把设置地址、总线复位删掉,能否获取?扫码枪的数据按照类似键盘的方式获取,对扫码枪上传中断端点不断发IN包。

                       设置地址是在获取设备描述符之后,应该不影响。注掉复位后连配置描述符也获取不到了


“获取不到设备描述符”返回什么值?获取描述符使用的控制传输命令还是GET_DESCR(0X46)命令?


                           

“获取不到设备描述符”返回什么值?获取描述符使用的控制传输命令还是GET_DESCR(0X46)命令?

                       

uint8_t Get_Dev_Descr(void)

{

   uint8_t descr_len;

uint8_t *p = data_buf;

send_mode = 0x00;


WR_USB_DATA(8,(void*)SetupGetDevDescr);


issue_token(send_mode,( 0 << 4 ) | DEF_USB_PID_SETUP); 

status = wait_interrupt();

if( status == USB_INT_SUCCESS )              

{

receive_mode = 0x80;

}

else 

{

   return(0);

}


issue_token(receive_mode,( 0 << 4 ) | DEF_USB_PID_IN); 

status = wait_interrupt();            //这里返回0x2E

if( status == USB_INT_SUCCESS ) 

descr_len = data_buf[0] - RD_USB_DATA(data_buf);

while( descr_len > 0 )

{

receive_mode ^= 0x80;

p += 0x08;

issue_token(receive_mode,( 0 << 4 ) | DEF_USB_PID_IN); 

status = wait_interrupt();

if( status == USB_INT_SUCCESS ) 

{

descr_len -= RD_USB_DATA(p);

}

else 

{

   return(0);

}

}

}

else 

{

   return(0);

}

send_mode = 0x40;

WR_USB_DATA(0,(void*)SetupGetDevDescr);

issue_token(send_mode,( 0 << 4 ) | DEF_USB_PID_OUT); 

status = wait_interrupt();

if( status == USB_INT_SUCCESS )

{

return(1);

}

else 

{

   return(0);

}

}



返回值0x2E不算通讯异常,只是设备返回了一个STALL,协议上说可能为一个不支持的命令,不过在这里我觉得可能是设备忙暂时未响应,可以尝试重发。


                           

返回值0x2E不算通讯异常,只是设备返回了一个STALL,协议上说可能为一个不支持的命令,不过在这里我觉得可能是设备忙暂时未响应,可以尝试重发。

                       现在发现,第一次连接设备,获取不到设备描述符,拔了重连就可以


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