Этим полукреслом мастер Гамбс… Этим постом мы — проект IoT Академия Samsung и компания Unwired Devices — начинаем цикл публикаций по мотивам нового практического курса по программированию микроконтроллеров на ядре Cortex-M3, который с завтрашнего дня будет читаться в Институте Информационных Технологий Московского Технологического Университета (также известного как МИРЭА).
Цель курса — познакомить студентов с современными микроконтроллерами на ядре Cortex-M3 и дать им базовые навыки программирования под них на языке C под операционной системой. Требования к слушателям — знакомство с языком C (не обязательно на микроконтроллерах) и базовое понимание электроники (на уровне умения подключить светодиод).
Изначально программа IoT Академии задумывалась как достаточно высокоуровневая — студенты должны работать с готовыми модулями передачи данных для сетей LoRa и 6LoWPAN, в которые уже были загружены прошивки с поддержкой нужных датчиков и необходимой логикой работы с ними. Фактически, курс заключается в настройке этих модулей и написании высокоуровневого ПО для обработки приходящих данных на платформе Samsung Artik + Tizen.
Однако, как показала практика, многим студентам интересно более серьёзно углубиться в то, что происходит внутри микроконтроллеров. При этом на данный момент с обучающими курсами по контроллерам Cortex-M в паре с операционными системами всё обстоит достаточно плохо: по сути, девять из десяти таких курсов посвящены написанию несложного приложения с использованием StdPeriphLib и/или CubeMX, причём половина текста приходится на вопросы инициализации контроллера и его периферии.
Современная реальность, однако, выглядит иначе — в большинстве коммерческих проектов (мы ещё поговорим об этой статистике в следующей статье, она взята не с потолка) уже используются ОСРВ, которые привносят в разработку под микроконтроллеры абстрагирование от «железа», виртуализацию аппаратных ресурсов, многозадачность и много других полезных вещей.
Что особенно интересно, использование ОСРВ позволяет значительно снизить порог вхождения — а именно в нём зачастую и кроется основная проблема. Главный принцип образовательных программ — развитие от простого к сложному — при изучении современных микроконтроллеров на первом же занятии разбивается о схему тактирования STM32 (страница A4 целиком при не слишком крупном шрифте) и необходимость написать полстраницы кода только для того, чтобы микроконтроллер завёлся. Да, можно сделать цикл лекций, начав с ассемблера, регистров и схем тактирования — но будем откровенны: студенты, изначально серьёзно не заинтересованные в изучении этой темы, дойдут до конца разве что под угрозой сдачи экзамена.
Да, генераторы кода решают проблему входного порога, но они же приводят нас к работе с «чёрным ящиком», лишая понимания внутреннего устройства системы. А вот современные ОСРВ, распространяемые в исходных кодах, с одной стороны, позволяют быстро начать с достаточно простых вещей, а с другой — сколько угодно глубоко зарыться во внутреннее устройство системы по мере изучения различных нюансов.
В декабре прошлого года мы уже провели пробное занятие — его запись есть на YouTube — рассказав студентам немного о том, что собой представляют современные микроконтроллеры, а также о том, как на них помигать светодиодом. Должен сказать, что успех впечатлял: начали мы в половине одиннадцатого утра, при этом в аудитории не было ни одного человека с опытом программирования STM32 и лишь несколько с опытом работы с Arduino, а закончили в пять вечера в лаборатории IoT Академии, где некоторые из студентов уже перешли к написанию на STM32 игрушек с кнопками и RGB-линейками.
В результате мы — Unwired Devices, IoT Академия Samsung и Институт ИТ МИРЭА — пришли к выводу, что пора делать полноценный курс практического введения в работу с современными микроконтроллерами. И сделали.
Курс начинает читаться студентам Института ИТ МИРЭА завтра, 3 марта, и будет представлять собой цикл из 6 лекций и 5 практических занятий с постепенным углублением в связанные с контроллерами темы.
Более того, институт будет вести видеозапись всех лекций и выборочную видеозапись практических занятий, в блоге IoT Академии Samsung будут появляться конспекты прошедших лекций, адаптированные под использование плат ST Nucleo-L152, доступных в продаже для всех желающих по цене 1200-1400 рублей, а в Github-репозитарии Unwired Devices появится используемые на занятиях код.
Во всех практических занятиях мы будем использовать только базовый код ОС. Так, хотя студентам и доступен полноценный стек для сетей LoRa, в последнем занятии задача будет заключаться не в его использовании, а в написании своего протокола передачи данных и обеспечении его защиты от основных атак.
Мы не будем пользоваться StdPeriphLib, CubeMX и даже LL — если нам надо будет говорить о работе микроконтроллера, мы будем говорить о регистрах и CMSIS. В HAL-коде ОС также не используется ничего, кроме CMSIS.
Итак, что будет входить в курс?
0. Вводная лекция. Современные микроконтроллеры, средства программирования, операционные системы реального времени. Семейство контроллеров STM32.
1. Многозадачность во встраиваемых ОС. Вытесняющая и невытесняющая многозадачность, tickless-системы. Потоки, таймеры, прерывания.
Практика: написание простого приложения, работающего с кнопками и светодиодами путём передачи сообщений из прерываний в отдельный поток.
2. Порты ввода-вывода и интерфейсы SPI, I2C, UART. Тактирование, синхронные и асинхронные интерфейсы, аппаратная и программная реализация.
Практика: устройство драйвера датчика освещённости TI OPT3001 (I2C) и работа с ним из пользовательского приложения. Добавление в драйвер функции генерации прерывания по устанавливаемому пользователем порогу.
3. Работа с аналоговыми и квазианалоговыми сигналами. ШИМ, АЦП, ЦАП. Способы генерации аналогового сигнала. Оцифровка сигнала, частота дискретизации и теорема Котельникова.
Практика: регулировка яркости лампы с помощью ШИМ по величине входящего аналогового сигнала. Оцифровка меняющегося во времени аналогового сигнала и выгрузка полученных значений в UART.
4. Энергосбережение. Режимы работы ядра процессора — RUN, SLEEP, STOP, STANDBY. Пробуждение от внешних и внутренних источников. Сохранение состояния ОЗУ контроллера, backup-регистры RTC. Работа с низкопотребляющими режимами в ОС.
Практика: «спящее» приложение счётчика импульсов с периодическим опросом состояния заданного GPIO и накоплением значений. Сохранение накопленного значения в EEPROM и backup-регистрах.
5. Беспроводные сети передачи данных. Работа с радиоканалом LoRa. Защита передаваемых данных от типовых атак.
Практика: передача сообщений между двумя микроконтроллерами с использованием готового драйвера LoRa-трансивера SX1276. Шифрование сообщений, защита от подделки сообщений, защита от атак повтором.
6. Дополнительное практическое занятие в свободной форме. Вопрос-ответ, консультации по собственным проектам студентов.
Считаете ли вы, что упущено что-то важное и нужное? Пишите об этом в комментариях.
Автор: Олег Артамонов