STML4 USB虚拟com端口

STML4 USB虚拟com端口,usb,stm32,cdc,nucleo,Usb,Stm32,Cdc,Nucleo,我有核子板(核子-L4R5ZI),想写一个代码,以便能够通过USB将数据从uC发送到PC。我学习了一些教程,使用了STM32CubeMx,以及互联网上的其他解决方案,但无论如何我失败了。我可以在PC端打开vcp(使用Hterm、TeraTerm和Realterm),但无法获取任何数据 我使用Eclipse和buildin调试器,我将其闪存到JLink 主回路: int main(void) { HAL_Init(); SystemClock_Config(); MX

我有核子板(核子-L4R5ZI),想写一个代码,以便能够通过USB将数据从uC发送到PC。我学习了一些教程,使用了STM32CubeMx,以及互联网上的其他解决方案,但无论如何我失败了。我可以在PC端打开vcp(使用Hterm、TeraTerm和Realterm),但无法获取任何数据

我使用Eclipse和buildin调试器,我将其闪存到JLink

主回路:

int main(void)
{

  HAL_Init();    
  SystemClock_Config();    
  MX_GPIO_Init();    
  MX_USB_DEVICE_Init();    
  HAL_Delay(10000);

  uint8_t HiMsg[] = "0123456789987654321001234567899876543210\r\n";
  while (1)
  {    
       if( CDC_Transmit_FS(HiMsg, 20) == USBD_OK )
       {
           HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7); // blue LED
       }
       HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14); // red LED
       HAL_Delay(1000);
  }    
}
执行此功能后,蓝色LED仅点亮一次,且从不改变其状态(不闪烁)。这意味着CDC_Transmit_FS(…)只返回USBD_OK一次,下一次调用将使USBD_忙碌

MX_USB_设备_Init()如下所示:

void MX_USB_DEVICE_Init(void)
{
  USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS);
  USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC);
  USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS);
  USBD_Start(&hUsbDeviceFS);
  USBD_CDC_Init (&hUsbDeviceFS, &USBD_CDC); // I need to init it somewhere so I think here is a good place
}
CDC_传输__FS看起来像:

uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{

  uint8_t result = USBD_OK;
  /* USER CODE BEGIN 7 */
  CDC_Init_FS();
  USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
  if (hcdc->TxState != 0){
    return USBD_BUSY;
  }
  USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
  result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
  CDC_Init_FS();
  /* USER CODE END 7 */
  return result;
}
有人知道如何让它运行吗?我错过了什么


最好是,这部分看起来可疑:

 result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
  CDC_Init_FS();

调用CDC_Init_FS()可能会在数据包有机会发送到主机之前将其杀死。

因此。。。我找到了解决办法! 我可以确认上面的代码是有效的(只需删除CDC_Init_FS)


不幸的是,这是一个司机的问题。对于windows 10,您还需要安装它,尽管参考文件中写了什么

以前我的标准配置没有CDC_Init_FS()和CDC_DeInit_FS(),结果是一样的……不幸的是,这是一个驱动程序问题。对于windows 10,您还需要安装它。