Проблема с настройками USB CDC и библиотеками для STM32F4 - PullRequest
0 голосов
/ 11 октября 2019

Я работаю во встроенном приложении для STM32F401RBT6 и пытаюсь установить соединение с ПК (Windows 10), но устройство не распознается системой. Код, сгенерированный STMCubeMX и отлаженный Atollic, не работает. Я видел и пытался воспроизвести несколько примеров, но все работает. В коде у меня есть все библиотеки, которые я считаю необходимыми.

archives archives2

IУ меня есть этот архив, сгенерированный STMCubeMX для связи CDC, но я новичок, и я не знаю, что мне нужно изменить в коде для USB, чтобы система распознала его. Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Помимо точки из Soup (сбой malloc, вызванный кучей, которая по умолчанию составляет всего 0x200), в некоторых версиях Windows есть проблема со строковым кодированием в примере.

В файле usbd_cdc_if.c вы должныдобавить:

/* USER CODE BEGIN PRIVATE_VARIABLES */
USBD_CDC_LineCodingTypeDef LineCoding =
    {
    115200, /* baud rate*/
    0x00,   /* stop bits-1*/
    0x00,   /* parity - none*/
    0x08    /* nb. of bits 8*/
    };

и чуть ниже

static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
.
.
.
case CDC_SET_LINE_CODING:
    LineCoding.bitrate    = (uint32_t)(pbuf[0] | (pbuf[1] << 8) |\
                            (pbuf[2] << 16) | (pbuf[3] << 24));
    LineCoding.format     = pbuf[4];
    LineCoding.paritytype = pbuf[5];
    LineCoding.datatype   = pbuf[6];

break;

case CDC_GET_LINE_CODING:
    pbuf[0] = (uint8_t)(LineCoding.bitrate);
    pbuf[1] = (uint8_t)(LineCoding.bitrate >> 8);
    pbuf[2] = (uint8_t)(LineCoding.bitrate >> 16);
    pbuf[3] = (uint8_t)(LineCoding.bitrate >> 24);
    pbuf[4] = LineCoding.format;
    pbuf[5] = LineCoding.paritytype;
    pbuf[6] = LineCoding.datatype;
break;

Таким образом, хост не получит неопределенные данные, если попытается установить строковое кодирование.

0 голосов
/ 11 октября 2019

Внутри функции USBD_CDC_Init (..) есть функция malloc, которая выделяет около 540 байт памяти в куче.

Это не было учтено в CubeMX при создании кода.

Итакпо крайней мере вы должны определить размер кучи с учетом этих дополнительных байтов, чтобы USB CDC работал.

...