首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM32 USB虚拟串口(6)

STM32 USB虚拟串口(6)

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和产品编号,如果修改了那驱动也要对应修改,官方驱动就无法自动进行安装了。
继承事业,薪火相传
返回列表