STM32-USBʹÓ÷½·¨(2)

2019-07-30 13:09

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//ÇëÇ󳤶ÈСÓÚµÈÓÚÃèÊö·û³¤¶È£¬Ôò·µ»ØÇëÇ󳤶È


STM32-USBʹÓ÷½·¨(2).doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ ÏÂÔØÊ§°Ü»òÕßÎĵµ²»ÍêÕû£¬ÇëÁªÏµ¿Í·þÈËÔ±½â¾ö£¡

ÏÂһƪ£º¸ýÉêÈÕ²»Í¬Ê±³½ÉúÈ˵ÄÃüÔ˽âÎö

Ïà¹ØÔĶÁ
±¾ÀàÅÅÐÐ
¡Á ×¢²á»áÔ±Ãâ·ÑÏÂÔØ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩

ÂíÉÏ×¢²á»áÔ±

×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£º QQ£º