LRNDIS - сначала настраиваем USB

Первый пример , скачанный в интернете, по теме lwip , RNDIS и STM32.

Для понимания как происходит USB прерывание по приходу данных и передача данных для обработки данных в LWIP функции :

USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &usbd_rndis_cb, &USR_cb); [app.c]
// это инициализация USBD периферии, делается один раз
   USBD_Class_cb_TypeDef usbd_rndis_cb  [usbd_rndis_core.c]
   // это структура где описываются указатели на стандартные обязательные пользовательские функции 
   // для обработки поступающих данных (коллбеки)
       usbd_rndis_data_out    [usbd_rndis_core.c] 
       // коллбек для обработки данных , пришедших от хоста
           handle_packet  [usbd_rndis_core.c]
                rndis_rxproc [app.c]
                     on_packet [app.c]
                           recvSize
                               ethernet_input

Таким образом файл usbd_rndis_core.c отвечает за прием данных от Хоста , первоначальную обработку , и потом только получается готовый пакет , который надо передать на обработку в lwip.

Вот теперь становится понятно, как работает проект.

Далее мы возьмем наш проект созданный на CubeMX для STM32F205VG. Сделаем в нем USBD CDC. И далее срастим два проекта плавно адаптируя код из LRNDIS в наш HAL проект.

В коде программы LRNDIS ставим трассировку и наблюдаем логику программы :

USBD_OTG_ISR_Handler [usb_dcd_int.c]
USBD_SetupStage [usbd_core.c]
usbd_rndis_setup [usbd_rndis_core.c]