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

STM32 USB虚拟串口(5)

STM32 USB虚拟串口(5)

这里要讲一下为什么要屏蔽SystemInit(),因为demo只运行虚拟串口功能,在USB未插入的情况下,是进入低功耗状态,插入时从低功耗状态退出后会调用此函数。当然我们在项目中一般不会这样,系统是否运行和插USB接口没有联系。所以我在下文中把进入低功耗代码屏蔽了,自然也就不用唤醒代码了。
图7
关于USB口使能控制引脚,需要根据开发板的引脚定义来修改宏定义platform_config.h文件中,笔者使用的是神舟3号开发板,控制信号刚好和demo相反,所以修改hw_config.c代码如下:
代码3
[url=][/url]
1 /******************************************************************************* 2 * Function Name  : USB_Cable_Config 3 * Description    : Software Connection/Disconnection of USB Cable 4 * Input          : None. 5 * Return         : Status 6 *******************************************************************************/ 7 void USB_Cable_Config (FunctionalState NewState) 8 { 9   if (NewState == DISABLE)10   {11     GPIO_ResetBits(USB_DISCONNECT, USB_DISCONNECT_PIN);12   }13   else14   {15     GPIO_SetBits(USB_DISCONNECT, USB_DISCONNECT_PIN);16   }17 }[url=][/url]


3,现在修改USB 回调函数中的代码usb_endp.c文件。使用下文代码替换:
代码4
[url=][/url]
  1 /* Includes ------------------------------------------------------------------*/  2 #include "usb_lib.h"  3 #include "usb_desc.h"  4 #include "usb_mem.h"  5 #include "hw_config.h"  6 #include "usb_istr.h"  7 #include "usb_pwr.h"  8   9 /* Private typedef -----------------------------------------------------------*/ 10 /* Private define ------------------------------------------------------------*/ 11 12 /* Interval between sending IN packets in frame number (1 frame = 1ms) */ 13 #define VCOMPORT_IN_FRAME_INTERVAL             5 14 15 /* Private macro -------------------------------------------------------------*/ 16 /* Private variables ---------------------------------------------------------*/ 17 static uint8_t txBuffter[VIRTUAL_COM_PORT_DATA_SIZE] = {0}; 18 static volatile uint8_t txFlg = 0; 19 static volatile uint32_t FrameCount = 0; 20 21 22 /* Private function prototypes -----------------------------------------------*/ 23 /* Private functions ---------------------------------------------------------*/ 24 25 /******************************************************************************* 26 * Function Name  : EP1_IN_Callback 27 * Description    : 28 * Input          : None. 29 * Output         : None. 30 * Return         : None. 31 *******************************************************************************/ 32 void EP1_IN_Callback (void) 33 { 34     uint16_t len = 0; 35      36     if (1 == txFlg) 37     { 38         len = USB_TxRead(txBuffter, sizeof(txBuffter)); 39 40         if (len > 0) 41         { 42             UserToPMABufferCopy(txBuffter, ENDP1_TXADDR, len); 43             SetEPTxCount(ENDP1, len); 44             SetEPTxValid(ENDP1); 45             FrameCount = 0; 46         } 47         else 48         { 49             txFlg = 0; 50         } 51     } 52 } 53 54 /******************************************************************************* 55 * Function Name  : EP3_OUT_Callback 56 * Description    : 57 * Input          : None. 58 * Output         : None. 59 * Return         : None. 60 *******************************************************************************/
继承事业,薪火相传
返回列表