我在 STM32F4 Discovery 上想要正常初始化 USB 虚拟串口(VCP)。
一开始我修改代码:
pdev->pClassData = USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));
改为
pdev->pClassData = (void *) USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));
不加强制类型转换时,pClassData***等于 NULL,导致上层函数usbd_cdc.c内的USBD_CDC_Init直接退出,接口初始化失败。
继续测试问题发现源头在 usbd_cdc.h 宏定义:
#define CDC_DATA_HS_MAX_PACKET_SIZE 512
将这个数值修改为 256 之后,虚拟串口就能正常工作。
VCP 数据回显示例代码,添加到 usb_cdc_if.c 的 CDC_Receive_FS 回调函数内:
static uint8_t buff_RX[256];
static uint8_t buff_TX[256];
int i = 0;
for (i = 0; i < *Len; i++)
buff_TX[i] = buff_RX[i];
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, &buff_TX[0], *Len);
USBD_CDC_TransmitPacket(&hUsbDeviceFS);
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &buff_RX[0]);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
同时在文件头部增加外部声明:
extern USBD_HandleTypeDef hUsbDeviceFS;
|
|