Главная » Микроконтроллеры
Призовой фонд
на май 2020 г.
1. Лабораторный БП NPS-1601 (0-32В, 0-5A)
Сайт Паяльник
2. 1050 руб.
От пользователей

Подключение дисплея HD44780 к STM32 в CubeIDE (HAL)

Многих новичков в программировании микроконтроллеров STM32 отпугивает огромное разнообразие регистров и настроек периферии. Поэтому они продолжают довольствоваться платформой Arduino. Для исправления этой ситуации компания ST Microelectronics создала библиотеку HAL, которая позволяет абстрагироваться от уровня регистров и тратить на настройку периферии минимальное время. Изначально HAL работала с таким генератором кода как CubeMX. И вот недавно компания выпустила свою собственную полноценную среду разработки CubeIDE. Она является объединением генератора кода CubeMX и среды разработки Atollic TrueStudio. Теперь мы можем быстро сконфигурировать проект, настроить тактирование, выполнить начальную инициализацию требуемой периферии и уже заниматься разработкой проекта. В ходе работы мы можем изменять начальные настройки проекта сколько угодно раз, и при этом не затрагивать написанный вами код. 

И в данной статье мы рассмотрим, как подключить к нашему проекту в CubeIDE популярный у радиолюбителей символьный дисплей HD44780. Для написания библиотеки за основу была взята библиотека на основе SPL из этой статьи. Стоит отметить, что библиотека получилась кросс-платформенной, ее легко можно портировать под любые микроконтроллеры, необходимо только настроить порты ввода\вывода на выход и в директивах #define файла hd44780.h прописать функции сброса/установки пинов, к которым подключен дисплей.

Давайте создадим наш новый проект и настроим его. Работаю я с микроконтроллером STM32F103R6, программатором ST-Link, кварц у меня на 16 МГц. В первую очередь включим на пинах интерфейс SWD, если этого не сделать, программатор ST-Link не будет виден после прошивки. Во вкладке System Core->SYS->Debug выберем Serial Wire.

Подключим к микроконтроллеру наш кварц. Во вкладке System Core->RCC->HSE выбираем Crystal/Ceramic Resonator.

Теперь можно и тактирование настроить, частота кварца умножается на 4 и раздается по остальным шинам.

Теперь добавим в проект два файла библиотеки hd44780.h и hd44780.c . Перетаскиваем эти файлы в папки Core->Inc и Core->Src, таким образом они подключатся к проекту. И не забываем в main.c прописать #include "hd44780.h"

В файле hd44780.с у нас имеется функция задержки в микросекундах:

void _delay_us(int us)
{

	HAL_TIM_Base_Start(&htim2);
	__HAL_TIM_SET_COUNTER(&htim2,0);
	while(__HAL_TIM_GET_COUNTER(&htim2) < us);
	HAL_TIM_Base_Stop(&htim2);
}

Она завязана с работой таймера. Для её функционирования необходимо настроить таймер на частоту 1 МГц. У нас в проекте частота шины, на которой находится таймер, 64 МГц, в настройке нужно выбрать делитель 64. Во вкладке Timer->TIM2->Clock Source выбираем Internal Clock. В поле Prescaler вводим 64 (на скриншоте ошибка), в Counter Period 65000.

Теперь нам остается только настроить пины, к которым мы хотим подключить дисплей. Заходим в hd44780.h и переопределяем наши пины.

#define PORT_SIG GPIOB

#define RS GPIO_PIN_0
#define RW GPIO_PIN_1
#define EN GPIO_PIN_2

#define PORT_DATA GPIOC

#define DB4 GPIO_PIN_6
#define DB5 GPIO_PIN_7
#define DB6 GPIO_PIN_8
#define DB7 GPIO_PIN_9

В генераторе кода те же самые пины настраиваем на выход и нажимаем на значок генерации кода(Device Configuration Tool Code Generation).

Функции библиотеки остались точно такие же, как и в статье, на которую я ссылался. Добавлена поддержка кириллицы. Для корректной работы кириллицы нужно изменить кодировку в самой IDE. Во вкладке Window->Preferences->General->Workspace необходимо выбрать кодировку CP1251. Напечатать необходимо вручную, по другому настройка сбивается.

Напишем что-нибудь в main.c и проверим работу дисплея:

  /* USER CODE BEGIN 2 */
  lcd_init();
  lcd_clear();
  lcd_set_xy(0, 0);
  lcd_out("Привет");
  /* USER CODE END 2 */

Как видите, всё работает.

На этом у меня всё. К статье прилагается проект для STM32CubeIDE.

Прикрепленные файлы:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (5) | Я собрал (0) | Подписаться

+1
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
влад #
Прикольный дисплей, кириллицу нативно поддерживает. Мне вот чтобы кириллические символы выводит, надо их коды из таблицы символов подставлять.
Ответить
0

[Автор]
RioDeJaneiro #
Как раз таки и попался дисплей, где коды русских символов из таблицы брать надо. Пришлось нагородить в этой библиотеке конструкцию switch...case, чтобы выводить кириллицу
Ответить
0
ashelehov #
Можете скинуть ссылку на дисплей с поддержкой кириллицы?
Ответить
+1

[Автор]
RioDeJaneiro #
Не я покупал его, на работе уже предоставили. Российский дисплей mt-20s4m-2ylg-3v0
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Набор для сборки - LED лампа Квадрокоптер Syma X11
вверх