Зачем нам RNDIS ?
Все дело в том , что RNDIS позволит нам реализовать управление контроллером через вэб интерфейс.
Remote Network Driver Interface Specification.
То есть мы не имеет аппаратной реализации 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. Но нет проблем.
Читайте далее.