скрытое меню

Вступление

Зачем нам RNDIS ?

Все дело в том , что RNDIS позволит нам реализовать управление контроллером через вэб интерфейс.

То есть мы не имеет аппаратной реализации Ethernet, но мы можем сэмулировать ее через USB.

А поскольку скорость передачи данных по USB как-то совсем не маленькая, и к тому же USB ну везде есть , то поехали реализуем эту технологию на STM32 и Atollic True Studio.

Итак , что нам нужно

Нам нужно все бесплатно созданное хорошими людьми для нас (начинающих и не очень программистов) .

Это бесплатная среда Atollic True Studio со всеми нужными плюшками (отладка, трассировка).
Бесплатный конфигуратор Cube MX для создания начального набора файлов проекта.
Недорогой SWD программатор / отладчик JLink или ST Link2 .
Какой-нибудь контроллер STM32 лучше серии STM32F4хх (отладочная плата 500-800р.).

С чего начать

Есть добрые люди в интернете , которые предоставляют для скачивание готовые проекты.

Там обычно используется бесплатная библиотека lwip (реализация стека Ethernet) . Работает она поверх USB. Поэтому сначала по любому надо реализовать стек USB.

Стек USB к сожалению с реализацией RNDIS у STM в Cube MX я не нашел.

Но зато у нас есть опыт создания USB-HID, USB-VCOM, USB-MSD на чистом HAL под Cube MX и Atollic.
Поэтому USB стеком нас не испугать.

Стек USB

По предыдущему опыту мы примерно понимаем , что стек делится на 2 части (программно).

Первая часть для всех вариантов одинаковая - это инициализация периферии USB ,реализация описания дескрипторов , интерфейсов, конечных точек.

А вторая часть начинается с создания класса конкретного устройства (причем их может быть несколько).

Все начинается с USBD_Init

Эта функция вызывается всегда первой для инициализации USB интерфейса.

USBD_Init первая функция в файле usbd_core.c .

Первый попавшийся пример в интернете https://habr.com/ru/post/248097/ (спасибо Сергею Фетисову). Правда он для Кайла. А наша задача все реализовать в Atollic True Studio. Но нет проблем.

Читайте далее.