Друзья, привет! Продолжаем тему Rust для embedded. Это уже 4 статья по теме rust embedded, для ознакомления с предыдущими статьями, вот список:

  1. Rust embedded.
  2. Rust embedded. Сиквел.
  3. Rust embedded. Gpio.

Сегодня у нас в статье GPIO, SPI, графический экран SSD1306 и крейт «embedded-graphics». Задача примера по нажатию на пользовательскую кнопку на отладочной плате вращать изображение на 180 градусов, изображение выводится на дисплей SSD1306. Для этого мы сконфигурируем пользовательскую кнопку, настроим базовое тактирование RCC, настроим шину SPI и пин CS (выбор устройства на шине).

Embedded-graphics

Крейт «embedded-graphics» призван сделать рисование 2D-примитивов супер простым. В настоящее время он поддерживает следующее:

  • 1 бит на пиксель изображения
  • 8 бит на пиксель изображения
  • 16 бит на пиксель изображения
  • Примитивы
    • Линии
    • Прямоугольники (и квадраты)
    • Круги
    • Треугольники
  • Текст с несколькими шрифтами

Основная цель состоит в том, чтобы сделать вышеупомянутое без использования любых буферов; крейт должен работать без динамического распределения памяти и без предварительного выделения больших кусков памяти. Для достижения этого используется подход, основанный на итераторе, где значения и позиции пикселей рассчитываются на лету с минимальным сохраненным состоянием. Это позволяет запущенному приложению использовать намного меньше оперативной памяти при небольшом или нулевом снижении производительности. Изображение для вывода на дисплей будет браться из файлов. Выводить будем два изображения первое изображение (rust.raw) это лого Rust, второе изображение (ssd1306-image.data) талисман Rust краб (неофициальный талисман). Для выбора необходимого изображения закомментируй или раскомментируй строку кода — let im = Image1BPP::new(include_bytes!(«./rust.raw»), 64, 64); или let im = Image1BPP::new(include_bytes!(«./ssd1306-image.data»), 128, 64);

Модули
coord — знаковая 2D координация в пространстве экрана
dev — помощники в тестировании и разработки
drawable — типаж Drawable и помощники
fonts — пиксельные шрифты
image — объект изображения
pixelcolor — типаж цветного пикселя
prelude — служит вступлением
primitives — графические примитивы
style — стилистические структуры для настройки внешнего вида объектов
transform — преобразование для графических объектов
unsignedcoord — без знаковая 2D координация в пространстве экрана

Типажи (Трейты) 
Drawing — основной типаж этого крейта. Все графические объекты должны реализовывать данный момент. Типаж (trait, трейт) — это набор методов, определённых для неизвестного типа: Self. Они могут получать доступ к другим методам, которые были объявлены в том же типаже.

Все исходники лежат на github, клонируй и пользуйся в свое удовольствие.
git clone https://github.com/mcuby/rust-stm32f429i-disco

Отправить ответ

avatar

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
Уведомлять о