Темы будущих уроков по STM32
На волне вчерашнего поста https://pikabu.ru/story/18_podrobneyshikh_urokov_po_programm...
Есть идеи по написанию уроков по различным темам в разрезе STM32. Приглашаю @DmitryAR, @witiliar, @XanderEVG, @Arimf, @Alexey9, @slonofil, и @AlexGyver к обсуждению. Сам я занимаюсь разработкой и проектированием автоматики для отопительных систем на биотопливе, готов говорить в этом разрезе.
Собственно не вижу смысла говорить об основах языка, вроде типов данных. @AlexGyver это уже осветил. Но может стоит это преподнести в разрезе C99, а не C++?
Вот темы, которые я бы мог осветить, по разделам:
Основы программирования в разрезе C99 и STM32:
- #define: хитрости и приёмы
- SWITCH/CASE или IF/ELSE: когда и где применять
- Битовые операции: хитрости и приёмы
Фишки в разрезе STM32:
- FreeRTOS: планировщик, семафоры, стэки
- CubeMX и HAL: как сохранить переносимость кода, как искать нужные функции, где искать примеры и прочее
- Настройка таймеров, их различия, где искать информацию в документации по их параметрам
- RTC
- ADC и DAC
- Обработчик ошибок с задержками с использованием FreeRTOS (собственная библиотека)
- Простая Round Robin База данных (собственная библиотека)
Среда программирования и аппаратная отладка:
- Настройка собственной среды под Linux и Windows
- Настройка Sublime Text, System Workbench for STM32, KEIL
- Отдельно по KEIL: стилизация под Monokai, дебагинг, трэйсинг, настройка компилятора
- Логический анализатор (могу рассказать про Saleae Logic)
Модули:
- Принципы работы шин I2C, SPI. Их достоинства и недостатки. Различные режимы: Polling, Interrupt, DMA
- Watchdog: IWDG и WWDG - назначение, настройка
- Использование 7-сегментных дисплеев: подключение напрямую к МК и с помощью драйвера MAXIM MAX6950/MAX6951 (собственная библиотека)
- SPI EEPROM STM M95xxx (собственная библиотека)
- I2C расширители портов NXP PCA9671 и PCF8574 (собственная библиотека)
Проектирование схем и хитрости:
- Как правильно разводить резонаторы
- Дребезг кнопок: триггеры Шмитта и RS-триггер
- Защита портов (в разрезе дискретных и аналоговых для токовых петель)
- Импульсные и линейные регуляторы напряжения: подбор элементной базы, разводка
- Реле: электромагнитные и твердотельные. Схемы подключения и различия использования
- В разрезе твердотельных реле особенно хочу остановиться на снабберных цепях
- Энкодеры
- Токовая петля
- Onewrire
- RS485 и Modbus (может имеет смысл рассмотреть их отдельно). По Modbus могу преподнести материал по адаптации FreeModbus Slave и собственную реализацию Modbus Master с использованием DMA и FreeRTOS
- Подключение датчика температуры PT100 напрямую (без звезды) с использованием ОУ в схеме стабилизации тока
- Фазовое регулирование напряжения: датчик нуля, табличные расчёты, таймеры
Проектирование готовых изделий:
- Проектирование плат в KiCAD: принципы работы, создание деталей, 3D-моделей и прочее
- Проектирование готового изделия в FreeCAD: сборочный чертёж, 3D-модель и т.д.
Отдельно могу поговорить об учёте и хранении радиодеталей, тем более, что использую самописную программу для этого.
Ну и на закуску, вот несколько готовых изделий:
"RS485 и Modbus" - HART забыл
"PT100 без звезды" - а не звездишь?
Весьма неплохая идея для таких уроков, хоть и тематика больше подходит для хабра. Да и подбор тем больше похож на блог, чем на обучающий курс. Про, CubeMX, HAL и обработчик ошибок с задержками с использованием FreeRTOS лично я бы почитал.
Однако вам стоит все же определиться с вашей аудиторией, для кого вы пишете уроки, на сколько она обширна. Я бы рекомендовал начать курс с выбора одной из популярных сред разработки и недорогой отладочной платы, вроде тех же discovery, или даже лучше bluepill (хотя под вопросом, там есть отличия в структуре от последующих стм-ок) + китайский stlink. И продолжать весь курс на этой базе, вплоть до проектирования собственных плат. Ардуинщики привыкли просто запускать готовые обучающие проекты и с ними уже разбираться, большинство забивают на обучение стм на этапе: скопировал его код, а он не комилится, и я не знаю почему. Было бы неплохо сопровождать код вырезками из документации, вроде: я написал так, потому что - "страница документации"
с описанием.
Еще можно про libopencm3 рассказать, как о замене HAL, CubeMX или чего еще они придумают завтра.
Если Вы реально сделаете ролики по всему что описали это будет очень круто.