Цитата(den_po @ Oct 18 2014, 00:26)

Там должно быть не меньше, чем hpcd_USB_FS.Init.dev_endpoints.
Точнее, в hpcd_USB_FS.Init.dev_endpoints д.б. не больше, чем
xx в
Код
PCD_EPTypeDef IN_ep[xx]; /*!< IN endpoint parameters */
PCD_EPTypeDef OUT_ep[xx]; /*!< OUT endpoint parameters */
Если смотреть код инициализации ендпоинтов, то видим, что там используется два цикла - по одному для EP_IN и EP_OUT.
Индекс пробегает от 0 до hpcd_USB_FS.Init.dev_endpoints
Например, у меня семейство МК stm32f37x. Оно поддерживает до 5 endpoints (т.о.,
xx=5)
Для устройства CDC используем 3 точки -
*контрольная (д. б. всегда, адреса 0x00 и 0x80)
*блоковая передача данных (адреса 0х01 и 0х81 )
*управление линией (входная, адрес 0х82)
В коде инициализации ставим: Init.dev_endpoints = 3;
Кроме того, останется еще правильно настроить пакетный буфер, у меня используется низкоприоритетная конфигурация, с простыми буферами:
Код
// Offet from the beginning of PM memory, to actual packet buffers
// The math is as follows: num of endpoints used * 2 (reserved for in and out pipes) * 2 (2 descriptors per pipe) * 2 (2 byte per descriptor)
size_t pmaOffs = m_h.Init.dev_endpoints * 8;
HAL_PCDEx_PMAConfig(&m_h, 0x00, PCD_SNG_BUF, pmaOffs ); // EP0 (control in) - always must be there, for USB to function properly
pmaOffs += USB_FS_MAX_PACKET_SIZE;
HAL_PCDEx_PMAConfig(&m_h, 0x80, PCD_SNG_BUF, pmaOffs ); // EP0 (control out) - always must be there, for USB to function properly
pmaOffs += USB_FS_MAX_PACKET_SIZE;
HAL_PCDEx_PMAConfig(&m_h, CDC_IN_EP, PCD_SNG_BUF, pmaOffs ); // CDC commuinication IN
pmaOffs += CDC_DATA_FS_MAX_PACKET_SIZE;
HAL_PCDEx_PMAConfig(&m_h, CDC_OUT_EP, PCD_SNG_BUF, pmaOffs ); // CDC commuinication OUT
pmaOffs += CDC_DATA_FS_MAX_PACKET_SIZE;
HAL_PCDEx_PMAConfig(&m_h, CDC_CMD_EP, PCD_SNG_BUF, pmaOffs ); // CDC command EP
Прогнал CDC драйвер в FreeRTOS под стрессом, в отдельном треде запустил прием+передачу принятого, через терминал, выставил бодрейт 921600, и заслал файло на 20 мегов.
Все ОК, скорость ориентировочно получается 700 килобод.