STM32-USB使用方法(3)

2019-07-30 13:09

{ }

send_len_ep0 = w_length;

USB_ep0_send(); }

break;

case 2://配置描述符 { //USART_send_str(\配置描述符\\r\\n\

p_send_ep0 = (u8*)cfg_d;//设备描述符数组

send_len_ep0 = (cfg_d[3]<<8) | cfg_d[2];//发送长度等于配置集合长度

if(w_length > send_len_ep0)//如果请求的数据大于端点0,返回端点0最大长度 { if((send_len_ep0 % dev_d[7]) == 0) { need_0_pack_ep0 = 1;//是包长的整数倍,需要发送0长度数据包 } }

else//请求小于等于端点0,返回请求长度 { send_len_ep0 = w_length; }

USB_ep0_send(); }

break;

case 3://字符串描述符 { //USART_send_str(\字符串描述符\\r\\n\}

break;

case 0x22://报告描述符 { //USART_send_str(\报告描述符\\r\\n\

p_send_ep0 = (u8*)rpt_d; send_len_ep0 = sizeof(rpt_d);

if(w_length > send_len_ep0)//如果请求的长度大于实际长度 { if((send_len_ep0 % dev_d[7]) == 0) {

need_0_pack_ep0 = 1;//是包长的整数倍,需要发送0长度数据包 } } else { send_len_ep0 = w_length;//返回长度等于请求长度 }

USB_ep0_send();

// // //

}

break;

default://其他描述符 { USART_send_str(\其他描述符:\ USART_send_HEX((w_value>>8)&0xFF); USART_send_str(\ } break; } }

break;

case 8://获取配置 {

//USART_send_str(\获取配置\\r\\n\}

break;

case 10://获取接口 { //USART_send_str(\获取接口\\r\\n\}

break;

case 12://帧同步 {

//USART_send_str(\帧同步\\r\\n\}

break;

default: { //USART_send_str(\未定义输入请求\\r\\n\}

break;

} } break;

case 1://类请求 { //USART_send_str(\类输入请求\\r\\n\}

break;

case 2://厂商请求 {

//USART_send_str(\厂商输入请求\\r\\n\}

break;

case 3://保留 { //USART_send_str(\输入请求:保留\\r\\n\}

break; } }

else/*********************************输出请求*********************************/ { switch((req_type>>5) & 0x03)//请求的类型 { case 0://标准请求.省略了对“请求的接收者”的判断 { //USART_send_str(\标准输出请求:\

switch(req)//标准请求代码【GET】 { case 1://清除特性 { //USART_send_str(\清除特性\\r\\n\

send_len_ep0 = 0; need_0_pack_ep0 = 1;

USB_ep0_send();//发送数据 }

break;

case 5://设置地址 {

USART_send_str(\设置地址\\r\\n\//USART_send_HEX(w_value&0xFF); //USART_send_str(\

usb_status = 1;//表示主机设置了地址 usb_addr = w_value & 0xFF; send_len_ep0 = 0; need_0_pack_ep0 = 1;

USB_ep0_send();//发送数据 }

break;

case 9://设置配置 { USART_send_str(\设置配置\\r\\n\

//设置RX Valid .【端点1】可用于接收 { u16 t = EP1REG; t &= 0x8F8F;//1000 1111 1000 1111 把 t位都设置为0 t |= 0x8080;//1000 0000 1000 0000 把w0位都设置为1 t |= 0x3000;//0011 0000 0000 0000 把 SRAT_RX[1:0]设置为1 EP1REG = t; }

send_len_ep0 = 0; need_0_pack_ep0 = 1;

USB_ep0_send();//发送剩余数据 usb_status = 3;

}

break;

case 7://设置描述符 { //USART_send_str(\设置描述符\\r\\n\}

break;

case 3://设置特性 {

//USART_send_str(\设置特性\\r\\n\}

break;

case 11://设置接口 { //USART_send_str(\设置接口\\r\\n\}

break;

default://出错 { //USART_send_str(\标准输出请求代码出错\\r\\n\}

break;

} }

break;

case 1://类请求 { //USART_send_str(\类输出请求:\

switch(req) { case 0x0A: { USART_send_str(\设置空闲\\r\\n\

send_len_ep0 = 0; need_0_pack_ep0 = 1;

USB_ep0_send();//发送剩余数据 }

break;

default: { #ifdef HEEY_DEBUG //UART_send_str(\未知请求\\r\\n\ #endif }

break;

} }

break;

}

}

}

case 2://厂商请求 { //USART_send_str(\厂商输出请求\\r\\n\}

break;

case 3://保留 { //USART_send_str(\输出请求:保留\\r\\n\}

break;

//描述符的话用数组实现的这里就不给出来。

源程序的kile 4 - arm写的,可以向我要。奋斗STM32迷你板应该下载后可以直接使用。

上位机软件使用vb。

一下是枚举过程 USB断开 USB连接 【U】【S】【B】【复】【位】【中】【断】 【U】【S】【B】【复】【位】【中】【断】 端点0【SETUP】分组接收完成 端点0读取【8】字节数据:

-------------------------------------------------------------------------------- 0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00

--------------------------------------------------------------------------------

USB标准输入请求:获取描述符——设备描述符 端点0发送【18】字节数据:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x40 0xAA 0xAA 0x02 0x00 0x00 0x01 0x00 0x00 0x00 0x01

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

0x62 0x60 tx=2 tx2=3 rx=2 rx2=3

****************端点0的IN分组发送完成**************** rx=0 rx2=0

端点0的【OUT】分组接收完成 端点0读取【0】字节数据:

--------------------------------------------------------------------------------

-------------------------------------------------------------------------------- rx=0


STM32-USB使用方法(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:庚申日不同时辰生人的命运解析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: