Найти в Дзене
Паяльник

Графические игры на STM32 микроконтроллере

Хочу представить развлекательный проект выходного дня - простая игровая консолька, если её можно так назвать, собранная из готовых модулей: отладочной платы "black pill" на STM32F411 и модуля дисплея на ili9225 разрешением 176х220 точек. Которую можно собрать даже на макетной плате. Для сборки будет достаточно двух вышеперечисленных модулей, пяти тактовых кнопок и немного проводов. Схема подключения модулей - элементарная, даже не требует подтягивающих резисторов для кнопок: Всего реализовано 3 игры. Тетрис: Змейка: Гонки: На фото видно, что устройство собрано на объединительной плате, да ещё и с каким-то разъёмом. На самом деле, я не стал бы заморачиваться с платой ради такой безделушки. Просто, этот проект является, скажем так - "развлекательной" частью более крупного проекта (https://github.com/AndrejChoo/portable_programmer), из которого я решил просто по-быстрому вырезать ту самую "развлекательную" часть, так как она проста в повторении и может заинтересовать новичков, желающих ос

Хочу представить развлекательный проект выходного дня - простая игровая консолька, если её можно так назвать, собранная из готовых модулей: отладочной платы "black pill" на STM32F411 и модуля дисплея на ili9225 разрешением 176х220 точек. Которую можно собрать даже на макетной плате. Для сборки будет достаточно двух вышеперечисленных модулей, пяти тактовых кнопок и немного проводов. Схема подключения модулей - элементарная, даже не требует подтягивающих резисторов для кнопок:

Всего реализовано 3 игры.

Тетрис:

-2

Змейка:

-3

Гонки:

-4

На фото видно, что устройство собрано на объединительной плате, да ещё и с каким-то разъёмом. На самом деле, я не стал бы заморачиваться с платой ради такой безделушки. Просто, этот проект является, скажем так - "развлекательной" частью более крупного проекта (https://github.com/AndrejChoo/portable_programmer), из которого я решил просто по-быстрому вырезать ту самую "развлекательную" часть, так как она проста в повторении и может заинтересовать новичков, желающих осваивать микроконтроллеры.

Проект написан в STM32CubeIDE с использованием CubeMX (HAL). Поэтому может быть легко адаптирован под другие камни STM.

Немного расскажу по программной реализации проекта. Дисплей управляется по SPI. Для более быстрой отрисовки объектов в играх я не использовал перерисовку всего экрана целиком, а перерисовывал только подвижные объекты (в тетрисе только движущиеся фигурки, в змейке только сегменты головы и хвоста, в машинках только движущуюся стену и машину только во время движения и в момент проезда через стену), благодаря этому в первых двух играх мерцание не заметно, в третьей игре из-за большего количества движущихся объектов уже есть некоторые артефакты. DMA я не использовал.

Обработка нажатия кнопок происходит в обработчике прерывания от таймера. Интервалы можно настроить для более-менее комфортного срабатывания кнопок (при большей задержке будет меньше шансов "дребезга", но и меньшая отзывчивость, при меньшей задержке - всё наоборот).

Также реализовано элементарное текстовое меню выбора игры. Оно не имеет подпунктов, только один экран со списком и курсор. Более разветвлённое меню можно посмотреть в "материнском" проекте, исходники и прошивка имеются по ссылке выше.

Для переноса проекта на микроконтроллеры от других производителей или другой архитектуры будет необходимо реализовать небольшое количество платформа-зависимых функций: прерывание по таймеру для обработки кнопок, SPI для управления дисплеем, реализовать миллисекундную задержку. Последние две игры я сам изначально отлаживал на CH32V203C8T6 (RISC-V) и с другим дисплеем (ST7735 128x160), а потом уже переносил на STM32.

Учитывая большое количество памяти у микроконтроллера STM32F411, можно будет реализовать ещё несколько простых игрушек. Есть планы и идеи по арканойду и танкам. Возможно, если будет настроение и желание, попробую сделать и эти игры.

А пока на этом - всё.

Прикрепленные файлы:

Автор: AndrejChoo