2016-11-14 403 views
1

我用CubeMX为USB VCP生成了一个“stm32f103c8t6”的代码,当我添加“CDC_Transmit_FS”命令发送数据时,该端口无法被windows10识别! 我该怎么办?这里是一个没有错误编译代码:STM32 USB VCP(Virtual Com Port)

#include "stm32f1xx_hal.h" 
#include "usb_device.h" 
#include "usbd_cdc_if.h" 

int main(void) 
{ 
    uint8_t Text[] = "Hello\r\n"; 
    while (1) 
    { 
    CDC_Transmit_FS(Text,6); /*when commented the port is recognized*/ 
     HAL_Delay(1000); 
    } 
} 
+1

我很确定应该有一些初始化代码... –

+0

我在YouTube上观看了2个视频,这两个视频都和我一样,并且对他们很好! – Mehran

+1

'CDC_Transmit_FS'函数存在一个错误,我想,你有一个问题,这里描述:http://electronics.stackexchange.com/questions/161772/stm32-usb-vcp-bug – SergeyLebedev

回答

3

放缓之前CDC_Transmit_FS调用 - 它会等待initiatialization。您的代码应该是这样的

int main(void) 
{ 
    uint8_t Text[] = "Hello\r\n"; 
    HAL_Delay(1000); 
    while (1) 
    { 
    CDC_Transmit_FS(Text,6); /*when commented the port is recognized*/ 
     HAL_Delay(1000); 
    } 
} 
+0

谢谢,它的工作! – Mehran

0

您可能需要安装驱动程序,以获取设备识别为COM端口 你可以从ST网站 得到它,如果没有安装设备列出与设备管理问题或感叹号

请注意,直到设备连接到主机后才能发送! 不确定CubeMX CDC_Transmit_FS是否正在检查此 而不是延迟重新发送您将检查CDC类数据“TXSstate” 是0意味着tx结束。

+0

驱动程序已安装,问题已解决,因为Sergey告诉USB需要延迟初始化。 – Mehran

1

有您需要在我的经验,检查三两件事:

  1. startup_stm32f405xx.s - >增加堆大小。我使用堆大小800和堆栈大小800以及。
  2. usbd_cdc_if.c - > APP_RX_DATA_SIZE 64和64 APP_TX_DATA_SIZE
  3. usbd_cdc_if.c - >下面的代码添加到CDC_Control_FS()函数

代码:

case CDC_SET_LINE_CODING: 
    tempbuf[0]=pbuf[0]; 
    tempbuf[1]=pbuf[1]; 
    tempbuf[2]=pbuf[2]; 
    tempbuf[3]=pbuf[3]; 
    tempbuf[4]=pbuf[4]; 
    tempbuf[5]=pbuf[5]; 
    tempbuf[6]=pbuf[6]; 
    break; 
case CDC_GET_LINE_CODING: 
    pbuf[0]=tempbuf[0]; 
    pbuf[1]=tempbuf[1]; 
    pbuf[2]=tempbuf[2]; 
    pbuf[3]=tempbuf[3]; 
    pbuf[4]=tempbuf[4]; 
    pbuf[5]=tempbuf[5]; 
    pbuf[6]=tempbuf[6]; 
    break; 

并定义uint8_t tempbuf[7];在用户private_variables部分。

没有增加堆大小,Windows根本没有反应。 如果没有第3点,Windows将发送波特率信息,然后读取波特率,期望获得相同的值。由于您不返回任何值,因此虚拟COM端口将保持为驱动程序未加载状态。

如果你这样做,可以使用Windows 10开箱即用的VCP驱动程序。无需在您的系统上安装非常旧的ST VCP驱动程序。 PS:我在某处打开VSense会造成问题。不知道,我没有配置它,所有的作品都像一个魅力。

+0

谢谢你。我不必更改数据大小(第2点),但是我必须添加CDC_XXX_LINE_CODING个案。这很关键。虽然我做了栈和堆的更改,但我没有测试原始条件。 我也觉得在Windows 10上的ST Micro USB驱动程序是片状的,我卸载它们并使用Windows默认的串行驱动程序,并且所有工作都完美无缺。 – Edward