77范文网 - 专业文章范例文档资料分享平台

STM32-USB使用方法(2)

来源:网络收集 时间:2019-07-30 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

u16 rcv_num; u8 read_cnt; u8 i;

u16 temp; u8 j = 0;

//接收到的数据

rcv_num = USB_CNT0_RX & 0x03FF; //{

// unsigned char s[32] = {0};

// sprintf((char*)s, \端点0读取【%d】字节数据:\ // USART_send_str(s); //} //USART_send_str(\ //读取次数 read_cnt = (rcv_num+1)>>1; for(i=0;i> 8; } //for(i=0;i

//读取端点1收到的数据

u8 USB_read_EP1_buf(u8 *buf, u32 *USB_buf) { u16 rcv_num; u8 read_cnt; u8 i; u16 temp; u8 j = 0;

//接收到的数据

rcv_num = USB_CNT1_RX & 0x03FF; { }

unsigned char s[32] = {0};

sprintf((char*)s, \【端点1】读取【%d】字节数据:\USART_send_str(s);

USART_send_str(\ //读取次数 read_cnt = (rcv_num+1)>>1; for(i=0;i> 8; } for(i=0;i

//通过端点0发送数据

void USB_write_EP0_buf(u8 *buf, u32 *USB_buf, u8 len) { u8 send_cnt; u8 i; u8 j = 0; u16 h,l;

// { // unsigned char s[32] = {0}; // sprintf((char*)s, \端点0发送【%d】字节数据:\// USART_send_str(s); // } // // USART_send_str(\+++++++\\r\\n\

// for(i=0;i

//发送次数

send_cnt = (len+1) >> 1; for(i=0;i

//要发送数据的长度 USB_CNT0_TX = len; //使能发送:设置VALID { u16 t = EP0REG; t &= 0x8F8F;//1000 1111 1000 1111 把 t位都设置为0 t |= 0x8080;//1000 0000 1000 0000 把w0位都设置为1 switch(EP0REG & 0x0030) { case 0x0000: t |= 0x0030;break; case 0x0010: t |= 0x0020;break; case 0x0020: t |= 0x0010;break; case 0x0030: t |= 0x0000;break; } EP0REG = t; } }

//通过端点1发送数据

void USB_write_EP1_buf(u8 *buf, u32 *USB_buf, u8 len) { u8 send_cnt; u8 i; u8 j = 0; u16 h,l; { unsigned char s[32] = {0}; sprintf((char*)s, \端点1发送【%d】字节数据:\ USART_send_str(s); } USART_send_str(\+++++++\\r\\n\ for(i=0;i

} USART_send_str(\+++++++\\r\\n\\r\\n\

//发送次数 send_cnt = (len+1) >> 1; for(i=0;i

//发送数据给主机,提供端点0 void USB_ep0_send(void) { if(send_len_ep0 > dev_d[7])//如果需要发送数据长度大于端点0的最大长度:分包发送 { USB_write_EP0_buf(p_send_ep0, ((u32*)(PMAAddr+32*2)), dev_d[7]); send_len_ep0 -= dev_d[7]; p_send_ep0 += dev_d[7]; } else//需要发送的数据长度小于等于端点0的最大包长 {

if(send_len_ep0 != 0)//一次能够发送完成 { USB_write_EP0_buf(p_send_ep0, ((u32*)(PMAAddr+32*2)), send_len_ep0); send_len_ep0 = 0; }

else//等于0 { if(need_0_pack_ep0 == 1)

{ need_0_pack_ep0 =0; USB_write_EP0_buf(p_send_ep0, ((u32*)(PMAAddr+32*2)), 0); } } } }

//端点0枚举过程处理

void ep0_setup_Process(void) {

//读取接收到的数据

USB_read_EP0_buf(USB_rcv_buffer, (u32*)(PMAAddr+96*2)); req_type = USB_rcv_buffer[0]; req = USB_rcv_buffer[1];

w_value = (USB_rcv_buffer[3]<<8) | USB_rcv_buffer[2]; w_index = (USB_rcv_buffer[5]<<8) | USB_rcv_buffer[4]; w_length = (USB_rcv_buffer[7]<<8) | USB_rcv_buffer[6]; if(req_type & 0x80)//输入请求 { switch((req_type>>5) & 0x03)//请求的类型 { case 0://标准请求.省略了对“请求的接收者”的判断 {

//USART_send_str(\标准输入请求:\switch(req)//标准请求代码 {

case 0://获取状态 { //USART_send_str(\获取状态\\r\\n\}

break;

case 6://获取描述符 { //USART_send_str(\获取描述符——\

switch((w_value>>8) & 0xFF)//描述符类型 { case 1://设备描述符 {

//USART_send_str(\设备描述符\\r\\n\p_send_ep0 = (u8*)dev_d;//设备描述符数组

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

else//请求长度小于等于描述符长度,则返回请求长度

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库STM32-USB使用方法(2)在线全文阅读。

STM32-USB使用方法(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/666075.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: