Подключение дисплея LCD1602 через интерфейс I²C к STM32 в CubeIDE
В данной статье подробно опишу процедуру подключения LCD-дисплея формата 1602 с интерфейсом I2C к плате STM32 Blue Pill, а также приведу пример написания программного кода в среде разработки STM32CubeIDE.

1. Описание дисплея LCD1602
LCD1602 дисплей позволяет выводить текстовую информацию двумя строками по 16 символов каждая. Может выводить стандартные цифровые и алфавитные знаки (кроме кириллицы, но сейчас уже есть дисплеи которые поддерживают), а также можно самостоятельно создавать символы для отображения примитивной графики, таких как шкалы или иконки. Устройство оборудовано популярным контроллером HD44780 и дополнительным модулем I2C, обеспечивающим удобное соединение с платой STM.

При прямом подключении стандартного LCD дисплея к STM32 потребуется задействовать минимум восемь цифровых вводов-выводов, что неоправданно расточительно расходует ограниченное количество свободных портов микроконтроллера. Именно поэтому предпочтительнее выбрать версию LCD-дисплея с поддержкой интерфейса I2C. В рамках данного руководства мы будем использовать именно I2C версию дисплея 16×2. Основное преимущество её применения состоит в том, что такое решение требует лишь двух выводов микроконтроллера STM32 для полноценного взаимодействия с экраном.
Распиновка модуля:
► GND – минус от источника;
► VCC – питание модуля 3.3В;
► SDA – шины данных I2C (SPI);
► SCL – шины данных I2C (SPI).

С обратной стороны дисплея расположен переменные резистор (синий квадрат). Предназначен для изменение уровня контрастности отображаемых символов на экране, благодаря этому потенциометру можно регулировать контрастность в различной степени освещения.
2. Подключение дисплея LCD1602 к STM32
В примере ниже покажу схему подключения дисплея LCD1602 к микроконтроллеру STM32, а также вывод небольшого фрагмента текста на экран.
Необходимые компоненты.
► Arduino UNO R3 x 1 шт.
► Датчик качества воздуха, температуры и влажности ENS160 + AHT21 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт
Подключение:
Соберите схему, которая представлена ниже, питание дисплея LCD осуществляется от контакта 3.3В и GND платы STM32. Выводы SCL и SDA соединяем с соответствующими выводами PB7 и PB6 на плате STM32.

3. Настройка STM32CubeIDE
Программирование платы STM32 будет осуществляться посредством среды STM32CubeIDE. Запустив среду, создайте новый проект, в предыдущей статье рассказывал об этом. На этапе выбора платы укажите «STM32F103C8T6» или укажите свою платы разработки. Далее выберите любой доступный пункт в открывшемся списке, аналогично изображению ниже, и подтвердите выбор нажатием кнопки «Next».

Задайте название вашего проекта и завершите этап начальной настройки, нажав кнопку «Finish»


Далее перейдите в раздел «Connectivity -> I2C1». Здесь установите режим работы I2C на значение ‘I2C‘.

Теперь нужно включить внешний резонатор, для этого перейдите в раздел «System Core > RCC», затем в параметрах высокочастотных часов выберите вариант «Crystal / Ceramic Resonator».

Далее необходимо настроить часов, для этого перейдите в раздел «Clock Configuration», расположенный вверху. Здесь мы выберем частоту тактового сигнала, как показано ниже.

Теперь сохраните ваш проект, воспользовавшись комбинацией клавиш «Ctrl + S». После сохранения появится окно подтверждения, в котором нужно нажать кнопку «Yes». Это действие инициирует автоматическую генерацию базового шаблона кода.

Далее откроется дополнительное окно с предложением перейти к перспективе. Подтвердите действие, выбрав вариант «Yes».

4. Установка библиотеки для работы с дисплеем LCD1602 по интерфейсу I2C
Для работы с дисплеем необходимо специальная библиотека «liquidcrystal_i2c», для этого в программе «STM32CubeIDE» откройте папку «Core», перейдите в подпапку «Inc» и скопируйте файл под названием «liquidcrystal_i2c.h». Далее, аналогично, перейдите в «Core > Src» и скопируйте файл «liquidcrystal_i2c.c»

Перед сохранением файла вам потребуется внести следующие изменения:
- Измените строку 4 на #include “stm32f1xx_hal.h”
- Измените строку 58 на #define DEVICE_ADDR (0x27 << 1)
5. Программа
Скопируйте приведенный ниже программу в файл «main.c» в указанные строки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* USER CODE BEGIN Includes */ #include "liquidcrystal_i2c.h" /* USER CODE END Includes */ /* USER CODE BEGIN 2 */ HD44780_Init(2); HD44780_Clear(); HD44780_SetCursor(0,0); HD44780_PrintStr("HELLO"); HD44780_SetCursor(0,1); HD44780_PrintStr("WORLD"); HAL_Delay(2000); } /* USER CODE END 2 */ |
Описание программы:
Первым делом мы включаем библиотеку liquidcrystal_i2c.h, что даст нам возможность пользоваться функциями управления LCD дисплеем.
1 |
#include "liquidcrystal_i2c.h" |
Первым шагом является инициализация дисплея. Функция принимает только один параметр, количество строк. Поскольку мы используем дисплей 16×2, мы указали в качестве параметра значение «2».
1 |
HD44780_Init(2); |
Далее выполняем очистку экрана путем вызова функции
1 |
HD44780_Clear(); |
До вывода текста задаём позицию курсора посредством функции HD44780_SetCursor(). Данная функция требует двух аргументов: первый — номер столбца, второй — номер строки. Мы задали значения «0» и «0», соответственно, курсор окажется в самом левом верхнем углу дисплея. Следующим шагом отображается текстовая строка «HELLO» путём вызова функции HD44780_PrintStr().
1 2 3 4 5 |
HD44780_SetCursor(0,0); HD44780_PrintStr("HELLO"); HD44780_SetCursor(10,1); HD44780_PrintStr("WORLD"); HAL_Delay(2000); |
После внесения правок сохраняем файл main.c и можем приступать к компиляции проекта.
Создаем проект нажатием комбинации клавиш Ctrl + B либо выбрав пункт меню Project → Build All. После запуска сборки через несколько секунд проект будет готов, если отсутствуют ошибки.
6. Загрузка прошивки с помощью программатора ST-Link в STM32
Итак, проект успешно собран, теперь приступим к следующему шагу — прошивке платы STM32. Подключим нашу плату Blue Pill к программатору ST-Link, используя версию ST-Link V2.

Для подключения программатора ST-Link с STM32 задействуются выводы: SWDIO, SWCLK, GND и 3,3 В. Контакт SWDIO служит для передачи данных, а SWCLK обеспечивает синхронизацию сигналов. Назначение каждого вывода определяется согласно спецификации ST-LINK V2.

Также переключите джампер BOOT в правую позицию, чтобы перевести микроконтроллер в состояние готовности к программированию.

Подключите ST-LINK V2 к вашему компьютеру через USB-кабель. Нажмите кнопку «RUN» в среде разработке IDE (зеленая стрелка вправо), далее появится диалоговое окно «Изменение конфигурации», подтвердите выбор кнопкой «OK». Спустя несколько секунд прошивка успешно загрузится на плату STM32. Останется вернуть перемычку в обратное положение и на дисплее появится текст.

