Для создания USB CDC используем STM32Cube v.4.1.0 и STM32Cube_FW_F4_V1.8.0
Создаем проект
- включаем USB_OTG_FS mode Device_Only
- RCC HSE Crystal/Ceramic Res
- USB_DEVICE class for FS IP CDC
- настраиваем Clock Configuration
- порты PD12-PD15 Output Push Pull
Создаем код
переносим в Eclipse, настраиваем проект.
меняем функцию CDC_Receive_FS (файл usbd_cdc_if.с) для эхо ответа
(http://habrahabr.ru/post/249395/)
[codesyntax lang=»cpp» container=»pre» blockstate=»collapsed»]
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
{
for (int i = 0; i < *Len; i++)
UserTxBufferFS[i] = UserRxBufferFS[i];
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, &UserTxBufferFS[0], *Len);
USBD_CDC_TransmitPacket(&hUsbDeviceFS);
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &UserRxBufferFS[0]);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
return (USBD_OK);
}
[/codesyntax]
Здесь можно взять готовый проект usb_cdc_hal.zip