61 void EP3_OUT_Callback(void) 62 { 63 static uint8_t buffter[VIRTUAL_COM_PORT_DATA_SIZE] = {0}; 64 65 uint16_t USB_Rx_Cnt; 66 67 /* Get the received data buffer and update the counter */ 68 USB_Rx_Cnt = USB_SIL_Read(EP3_OUT, buffter); 69 70 /* USB data will be immediately processed, this allow next USB traffic being 71 NAKed till the end of the USART Xfer */ 72 USB_RxWrite(buffter, USB_Rx_Cnt); 73 74 /* Enable the receive of data on EP3 */ 75 SetEPRxValid(ENDP3); 76 77 } 78 79 80 /******************************************************************************* 81 * Function Name : SOF_Callback / INTR_SOFINTR_Callback 82 * Description : 83 * Input : None. 84 * Output : None. 85 * Return : None. 86 *******************************************************************************/ 87 void SOF_Callback(void) 88 { 89 uint16_t len = 0; 90 91 if(bDeviceState == CONFIGURED) 92 { 93 if (0 == txFlg) 94 { 95 if (FrameCount++ == VCOMPORT_IN_FRAME_INTERVAL) 96 { 97 /* Reset the frame counter */ 98 FrameCount = 0; 99 100 /* Check the data to be sent through IN pipe */101 len = USB_TxRead(txBuffter, sizeof(txBuffter));102 103 if (len > 0)104 {105 UserToPMABufferCopy(txBuffter, ENDP1_TXADDR, len);106 SetEPTxCount(ENDP1, len);107 SetEPTxValid(ENDP1);108 109 txFlg = 1;110 }111 }112 }113 } 114 }115 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/[url=][/url]
这里讲下大概意思,函数EP3_OUT_Callback是在USB口收到数据后,将数据存入FIFO中。
函数SOF_Callback定时查询用户是否有要发送的数据,如果有则进行发送,在发送完成后会触发发送中断EP1_IN_Callback函数,如果发送完毕就不调用SetEPTxValid(ENDP1)函数,发送完成后就不会再触发EP1_IN_Callback函数。
4,修改usb_pwr.c在前文中说到:不让系统进入休眠状态,这里屏蔽185行 __WFI();
5,修改usb_prop.c屏蔽COM初始化代码。137行USART_Config_Default(); 237行USART_Config();
6,修改usb_desc.c 这里修改需要参考一些USB专业的书籍,推荐全圈圈的书,讲的通俗易懂。关于本程序的驱动,笔者在win7下测试可以自动安装,如果无法自动安装可使用文章开始的链接中的驱动程序。本文件如果修改需谨慎,其中pid,vid是制造商ID和产品编号,如果修改了那驱动也要对应修改,官方驱动就无法自动进行安装了。 |