STM32cube USB VCP 没有出现在 Windows 10
STM32cube USB VCP doesn't appear on Windows 10
我正在尝试了解如何在基于 STM32F103 的 Blue Pill 开发板上启用 USB VCP 功能。在下面Shawn Hymell's guide and attempting to troubleshoot with , I currently have the following (minified) 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);
}
}
我可以看出程序是 (otherwise) 运行 因为 UART 适配器显示 char msg
正在以正确的间隔输出并且开发板的 PC13
LED 正在闪烁。然而,我的 Windows 10 电脑甚至无法识别插入的 USB 设备,只显示 FTDI 适配器的 COM 端口和我的 STLink v2:
截至目前,我已经尝试了 中的以下潜在修复:
- 在
usbd_cdc_if.c
中设置 APP_RX_DATA_SIZE 64
和 APP_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;
- 在第一个调用实例前添加
HAL_Delay(1000);
CDC_Transmit_FS
- 确认我使用的USB线有数据线
- 在 CubeMX 设备配置工具中将
Minimum Heap Size
设置为 0x1000
有没有其他人见过这样的事情?我不确定接下来要尝试什么。
其实我的问题远比我想象的简单。以我无限的智慧,我决定在我以前用于 CANbus 测试的面包板上尝试这个,而不断开 CAN 电路。
(ref)
这永远不会奏效,因为我一直在尝试使用的 CANbus 引脚(并保持插入状态)与 USB 端口共享功能。在我拔下连接到 PA11
和 PA12
的面包板电线后,VCP 立即出现并开始工作。我觉得很傻,但现在松了一口气。
我正在尝试了解如何在基于 STM32F103 的 Blue Pill 开发板上启用 USB VCP 功能。在下面Shawn Hymell's guide and attempting to troubleshoot with 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);
}
}
我可以看出程序是 (otherwise) 运行 因为 UART 适配器显示 char msg
正在以正确的间隔输出并且开发板的 PC13
LED 正在闪烁。然而,我的 Windows 10 电脑甚至无法识别插入的 USB 设备,只显示 FTDI 适配器的 COM 端口和我的 STLink v2:
截至目前,我已经尝试了
- 在
usbd_cdc_if.c
中设置APP_RX_DATA_SIZE 64
和APP_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;
- 在第一个调用实例前添加
HAL_Delay(1000);
CDC_Transmit_FS
- 确认我使用的USB线有数据线
- 在 CubeMX 设备配置工具中将
Minimum Heap Size
设置为0x1000
有没有其他人见过这样的事情?我不确定接下来要尝试什么。
其实我的问题远比我想象的简单。以我无限的智慧,我决定在我以前用于 CANbus 测试的面包板上尝试这个,而不断开 CAN 电路。
这永远不会奏效,因为我一直在尝试使用的 CANbus 引脚(并保持插入状态)与 USB 端口共享功能。在我拔下连接到 PA11
和 PA12
的面包板电线后,VCP 立即出现并开始工作。我觉得很傻,但现在松了一口气。