Межмодульный интерфейс SPI. Графический индикатор

Электроника

Мы продолжим изучать модули микроконтроллера и рассмотрим интерфейс SPI на примере графического индикатора. После чего адаптируем библиотеку этого индикатора для вывода примитивов на экран индикатора
Глоссарий
Для успешного освоения материала рекомендуем вам изучить следующие понятия:
SPI
SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии
Графический индикатор
наиболее сложный тип индикаторов, позволяющий передавать как символьную информацию, так и рисунки
Видеолекция
Конспект
Продолжим изучать модули микроконтроллера и рассмотрим интерфейс SPI на примере графического индикатора. Также адаптируем библиотеку этого индикатора для вывода примитивов на экран индикатора.

SPI — наиболее распространенный межмодульный интерфейс, так как он обеспечивает очень высокую скорость передачи и наименьшее количество выводов. Широко используется для периферийных модулей в интегральном исполнении. Мы будем использовать графический индикатор Waveshare и организуем подключение через интерфейс SPI.

Подключение SPI к микроконтроллеру
SPI имеет специальные входы — MOSI и CLK, которые подключаются к портам SPI микроконтроллера. Дополнительные входные линии мы подключим к цифровым выходам микроконтроллера.
Важно
Так как индикатор будет только принимать данные, то порт SPI микроконтроллера следует настроить только на передачу
Задача
  1. Настроить модуль SPI для микроконтроллера
  2. Подключить стандартную библиотеку от разработчика для индикатора
  3. Нарисовать на индикаторе примитивы, например, окружность, текст, иконки
Работа на компьютере
1. Копируем предыдущий проект, переименовываем и открываем

2. Заходим в конфигурацию, выбираем Connectivity и используем SPI2

3. Выбираем режим Transmit Only Master, то есть только передачу данных

4. Устанавливаем передачу размера 8 бит

5. Указываем скорость 40 Мбит/с
6. Настраиваем ножки для индикатора:
  • SPI2_SCK передвинем на ножку PB13, зажав Ctrl
  • аналогично сдвигаем SPI2_MOSI на PB15

7. Добавляем дополнительные управляющие сигналы для индикатора GPIO_Output
8. Добавляем OLED_CS
9. Аналогично добавляем OLED_DC и OLED_RST

10. Проверяем все ножки и переходим к настройке выводов

11. В разделе GPIO находим все выходные порты и устанавливаем им скорость Very High

12. Сохраняем и генерируем код
Работа с кодом
1. В main.c находим функцию инициализации SPI2

2. Скачиваем библиотеку для используемого графического индикатора с сайта waveshare.com (Modules → Displays → OLED)
3. Скачиваем архив (Resources → Code)
4. Распаковываем содержимое, но вне нашего проекта

5. Находим файл Fonts.h и копируем в каталог inc

6. Находим файл Fonts.с и копируем в каталог Src

7. Аналогично SSD1331.h копируем в inc, а SSD1331.h в Src

8. В USER находим функцию main.c и из нее копируем вызовы отрисовки примитивов в содержимое нашей функции main.c
Адаптация библиотеки
1. Заменяем delay_ms на HAL_Delay

2. Заменяем System_init на библиотечную функцию ssd1331_init

3. Поправляем добавление заголовочных файлов. В main добавляем заголовочный файл библиотеки #include "SSD1331.h" и #include "Fonts.h", в котором располагаются шрифты для вывода текста

4. Исправляем файлы библиотеки:
  • убираем лишние заголовочные файлы, которые не используются
  • добавляем заголовочный файл для микроконтроллера #include "stm32l4xx_hal.h"
  • добавляем заголовочный файл для main

5.
Функции для управления портами записываем в ssd1331 в виде вызовов соответствующих портов

6. Создаем функцию get_hspi1() и копируем ее в main.c и main.h
Основные ошибки
1. Отсутствие наименования порта для reset
Исправление: в main.c находим названия портов и копируем эти названия в соответствующий вызов
2. Ошибка «undefined reference»
Исправление: к функции инициализации добавляем написанную функцию сброса микроконтроллера
Тестирование
После сброса устройства видим вызовы очистки красным, зеленым, синим. Потом выводы шрифтов разного цвета и размера, а в конце — пиктограммы
Мы изучили настройку SPI для микроконтроллера, адаптировали библиотеку для графического индикатора и создали проект для работы с индикатором. Приступим к проверке знаний.
Интерактивное задание
Тест
Для закрепления полученных знаний пройдите тест
Стартуем!
Вам необходимо передвинуть SPI2_SCK на ножку PB13. Какая клавиша вам понадобится?
Дальше
Проверить
Узнать результат
Как исправить ошибку отсутствия наименования порта для reset?
Дальше
Проверить
Узнать результат
Где найти вызовы отрисовки примитивов в скаченной библиотеке?
Дальше
Проверить
Узнать результат
Что располагается в #include "Fonts.h"
Дальше
Проверить
Узнать результат
К сожалению, вы ответили неправильно
Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Неплохо!
Но можно лучше. Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Отлично!
Вы отлично справились. Теперь можете ознакомиться с другими компетенциями
Пройти еще раз