Я столкнулся с некоторыми трудностями подключения экрана SSD1306 к микроконтроллеру STM32 в среде разработки STM32CubeIDE. Постараюсь описать как все-таки получилось подключить.
Первым делом естественно полез в Интернет искать библиотеки. И конечно же нашел. Например, вот здесь https://github.com/afiskon/stm32-ssd1306 и описание от автора вот здесь https://eax.me/stm32-ssd1306/
Ну, думаю, надо создать проект, положить в него каталог библиотеки, подключить через #include, посмотреть какие ножки нужно подключать и всё заработает. Не тут-то было. Пару дней провозился безрезультатно, потом отложил и просто изучал программирование под STM32. Потом вернулся к этой теме и только тогда все получилось.
Пошаговая инструкция
1. Создаем в STM32CubeIDE новый проект, выбираем в нем ваш микроконтроллер. В моем случае это STM32F103C8T6.
2. Как обычно включаем возможность отладки.
2. Настраиваем ножки SPI или I2C.
- Если связь будет осуществляться через SPI, тогда включаем его:
При этом видим какие ножки микроконтроллера будут для этого использоваться:
Еще понадобятся три ножки микроконтроллера. Пускай это будут PA1, PA2, PA3. Щелкаем по ним левой кнопкой мыши и выбираем GPIO_Output:
- Если связь будет осуществляться через I2C, то включаем его:
При этом видим какие ножки для этого будут использоваться:
3. Если надо, то на вкладке Clock Configuration настраиваем частоты микроконтроллера, если не надо, оставляем все как есть. Потом переходим на вкладку Project Manager и ставим следующую галку:
4. Остальные настройки оставляем без изменений и сохраняем проект. При этом IDE предлагает нам сгенерировать код. Соглашаемся.
5. Скачиваем библиотеку от сюда https://github.com/afiskon/stm32-ssd1306
Или от сюда https://disk.yandex.ru/d/ATLVwRvoRW4P6w
Берем от туда каталог ssd1306 и копируем себе в проект.
Чтобы он стал виден в Project Explorer нужно нажать F5
Но этого мало. Нужно добавить пути к каталогу еще и в свойствах проекта:
6. Добавить в проект include
7. Настроить файл конфигурации библиотеки
Для начала переименовываем файл "ssd1306_conf_template.h" в "ssd1306_conf.h"
В этом файле нужно раскомментировать строчку с типом вашего микроконтроллера, остальные закомментировать:
Далее выбрать тип связи:
Теперь надо настроить следующую часть кода в зависимости от типа связи и того, какие ножки микроконтроллера мы включили:
Обычно больше ничего настраивать не надо, но на всякий случай прочитайте комментарии в остальной части файла конфигурации и если вам что-то нужно, то поменяйте настройки.
8. Дальше для проверки можно запустить тестовые примеры:
10. Так как тестовые примеры занимают много памяти, то лучше взять из них только то, что вам нужно, а остальное удалить.
На этом подключение библиотеки заканчивается. Остается только использовать процедуры и функции для вывода нужных вам изображений на экран.
Подключение ножек
С названием ножек на модулях дисплеев есть некоторая путаница.
SCK может называться D0, SCL, CLK.
SDA может называться D1, MOSI.
RES может называться RST, RESET
DC может называться A0
Конкретно в моих примерах при подключении по I2C ножки соединяются так:
G микроконтроллера к GND дисплея
3.3 микроконтроллера к VCC дисплея
B6 микроконтроллера к SCL дисплея
B7 микроконтроллера к SDA дисплея
При подключении по SPI:
G микроконтроллера к GND дисплея
3.3 микроконтроллера к VCC дисплея
A5 микроконтроллера к D0 дисплея
A7 микроконтроллера к D1 дисплея
A1 микроконтроллера к CS дисплея
A2 микроконтроллера к DC дисплея
A3 микроконтроллера к RES дисплея
Где купить модули и дисплеи
Дисплеи проверял одноцветные, работающие по I2C и SPI (купить на АлиЭкспресс, купить на RoboShop 1, 2)
Работу библиотек я проверял на микроконтроллерах STM32F103C8T6, STM32F103C6T6 и STM32F401CEU6, но должно бы работать и на других сериях (купить на АлиЭкспресс, купить на RoboShop 1, 2)