Блиблиотека OLED дисплея SSD1306 для STM32 микроконтроллеров
Приветствую!
Многие, наверное, знают о таких маленьких дешёвых (меньше $3) OLED дисплеях, которые можно найти в огромном ассортименте на ebay или aliexpress. В интернете существует множество различных статей о том, как подключать эти дисплеи к Arduino и другим МК, но для STM32f10x затруднительно найти даже библиотеку. Поэтому я решил написать этото туториал.
Данный дисплей имеет разрешение 128х64 пиксела и контроллер SSD1306, подклчается к микроконтроллеру по интерфейсу I2C.
Для STM32 была найдена библиотека для этого дисплея, но она была для серии f4xx — необходимо было модифицировать для f10x и для драйверов HAL.
Исходные коды моей модифицированной библиотеки и тестовый проект можно взять тут: http://github.com/SL-RU/stm32libs/tree/master/HAL/ssd1306
Тестовый проект сделан в Keil при помощи программы STM32CubeMX.
Видео работы:
Подключение:
OLED pin | STM32 |
---|---|
Vcc | +3.3v |
GND | GND |
SDA | I2C1_SDA |
SCL | I2C1_SCL |
В CubeMX также необходимо сконфигурировать интерфейс I2C так:
Для работы с библиотекой нужно подключить заголовочный файл:
И перед использованием инициализировать:
Теперь можно что-нибудь нарисовать:
Всё, что мы нарисовали сейчас находится в буффере в оперативной памяти МК, чтобы вывести всё на дисплей необходимо вызвать:
После этого наш дисплей обновится и будет выводить надпись и кружок. После вызова SSD1306_UpdateScreen() буффер в МК не сбрасывается сам, поэтому новые рисунки будут поверх предыдущих, для сброса можно заполнить всё чёрным цветом:
Все функции библиотеки:
Доступные шрифты, но вы так же можете добавить свои, в том числе и русские при помощи этой программы:
- Font_7x10
- Font_11x18
- Font_16x26
Дисплей работает довольно быстро(FPS около 14-18) на скорости I2C 400кГц(450кГц тоже без проблем, но с лагами не стал, а на 500 подтормаживает существенно) и без проблем.
Тестовый проект для Keil IDE и саму библиотеку можно взять тут: https://github.com/SL-RU/stm32libs/tree/master/HAL/ssd1306
P.S. В Keil после загрузки прошивки в МК он не сбрасывается. Для меня это ненадолго стало серьёзной проблемой, но я справился. Всё решается очень просто - этой галочкой: