我为" stm32f103c8t6"生成了代码。使用CubeMX for USB VCP,当我添加" CDC_Transmit_FS"命令发送数据,该端口不被windows10识别! 我该怎么办?这是编译时没有错误的代码:
#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);
}
}
答案 0 :(得分:4)
在CDC_Transmit_FS
调用之前放置延迟 - 它将等待初始化。你的代码应该是这样的
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);
}
}
答案 1 :(得分:2)
根据我的经验,您需要检查三件事:
代码:
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;
并在用户private_variables部分中定义uint8_t tempbuf[7];
。
如果没有增加堆大小,Windows根本不会做出反应。 如果没有第3点,Windows将发送波特率信息,然后读取波特率,期望获得相同的值。由于您不返回任何值,因此虚拟COM端口仍为驱动程序未加载。
如果您执行所有这些操作,则可以使用Windows 10开箱即用的VCP驱动程序。无需在系统上安装非常旧的ST VCP驱动程序。
PS:我在某处看到,VSense也会出现问题。不知道,我没有配置它,一切都像魅力。
答案 2 :(得分:1)
我遇到了类似的问题。我无法连接到端口,该端口仅显示为“虚拟 com 端口”。我添加了 while 循环以等待来自 CDC_Transmit_FS 的 USBD_OK。然后它即使在没有它或在 init 函数之后延迟也能正常工作。我不确定是什么问题。
while(CDC_Transmit_FS((uint8_t*)txBuf, strlen(txBuf))!=USBD_OK)
{
}
答案 3 :(得分:0)
您可能必须安装驱动程序才能将设备识别为com端口 你可以从st网站获得它 如果未安装,则设备在设备管理器上列出问题或感叹号
请注意,在设备连接到主机之前,您无法发送! 不确定CubeMX CDC_Transmit_FS是否正在检查此内容 也可以检查CDC类数据“TXSstate”而不是延迟重发 是0平均tx结束。
答案 4 :(得分:0)
我知道这有点晚了,但我偶然发现了这篇文章,它非常有帮助。
这是我需要做的:
以下是不需要的(在 STM32F405RGT6 芯片上):
还有一些过去发生在我身上的事情需要考虑: