【问题标题】:STM32cube USB VCP doesn't appear on Windows 10STM32cube USB VCP 未出现在 Windows 10 上
【发布时间】:2021-11-23 11:52:32
【问题描述】:

我正在尝试弄清楚如何在基于 STM32F103 的 Blue Pill 板上启用 USB VCP 功能。在关注Shawn Hymell's guide 并尝试使用this other SO Q/A 进行故障排除时,我目前有以下(缩小main.c:(Git Gist with full file

#include "main.h"
#include "usb_device.h"
#include <string.h>

int main(void) {
  char msg[50];
  uint8_t state = 0;

  HAL_StatusTypeDef ret_status;
  MX_USB_DEVICE_Init();

  sprintf(msg, "Restart!\n");
  ret_status = HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
  HAL_Delay(1000);

  while (1) {
      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, state ? GPIO_PIN_RESET : GPIO_PIN_SET);
      sprintf(msg, "Hello World! LED State: %d\n", state);
      ret_status = HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
      ret_status = CDC_Transmit_FS((uint8_t*)msg, strlen(msg));

      state = state == 1 ? 0 : 1;
      HAL_Delay(500);
  }
}

我可以看出程序(否则)运行正常,因为 UART 适配器显示 char msg 正在以正确的间隔输出,并且电路板的 PC13 LED 正在闪烁。但是,我的 Windows 10 计算机甚至无法识别插入的 USB 设备,只显示 FTDI 适配器的 COM 端口和我的 STLink v2:

截至目前,我已经尝试了来自the other SO Q/A 的以下潜在修复:

  • usbd_cdc_if.c 中设置APP_RX_DATA_SIZE 64APP_TX_DATA_SIZE 64
  • 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;
  • 在调用CDC_Transmit_FS的第一个实例之前添加HAL_Delay(1000);
  • 确认我使用的USB线有数据线
  • 在 CubeMX 设备配置工具中将 Minimum Heap Size 设置为 0x1000

以前有没有其他人见过这样的事情?我不确定接下来要尝试什么。

【问题讨论】:

  • 检查电缆 :) 你的主要而不是足够的。您需要设置时钟初始化 hal、gpio 等。
  • 另一个问题 - 检查 D+ 和 D- 线上的上拉电阻。许多英国石油公司都错了
  • 好吧,不确定这是否有帮助,但我做了更多的挖掘工作,发现正在触发对CDC_Transmit_FS 中的TxState != 0 的检查,导致返回码USBD_BUSY。我不完全知道如何解释这个......
  • Hrm,@0_______,他们应该是什么?
  • 另外,我对main.c 文件的缩小删除了这些行。所有正常的配置函数都在那里并被调用。

标签: c usb stm32 stm32cubeide


【解决方案1】:

其实,我的问题比我想象的要简单得多。在我无限的智慧中,我决定在我以前用于 CANbus 测试的面包板上尝试这个,而不断开 CAN 电路。

(ref)

这永远不会奏效,因为我一直在尝试使用的 CANbus 引脚(并插入)与 USB 端口共享功能。在我拔掉连接到PA11PA12 的面包板电线后,VCP 立即出现并开始工作。我现在感觉很笨,但松了一口气。

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2016-02-06
    • 2016-09-03
    • 2017-03-28
    • 2017-02-18
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多