Nokia 5110 на STM32

Рассмотрим подключение и работу с дисплеем Nokia 5110 на STM32. В качестве контроллера STM32 возьмем отладочную плату STM32F407VET6. В программе на экран будем выводить картинку с логотипом, а также отобразим 5 счетчиков.

Описание LCD Nokia 5110

Пример экранов Nokia 5110

Характеристики дисплея LCD Nokia 5110 представлены в таблице ниже:

ХарактеристикаЗначение
Напряжение3.3 В
Размер видимой области84х48 pixel
ТипTFT
Цветмонохромный
Интерфейс обменаSPI
Потреблениебез подсветки 5 мА
с подсветкой 20 мА
Температура работы0..+50
Частота тактировниядо 4Мгц
Время сброса100 нс
МикросхемаPCD8544
Подключение подсветкиСиний: к VCC.
Красный: к GND

Схема подключения дисплея

схема подключения к микроконтроллеру STM32 дисплея

Описание контактов дисплея NOKIA 5110

VCCПитание 3,3 В
GNDОбщий провод
CEВключение, активный низкий уровень
DCДанные/команда: 0 – данные, 1 – команда
DINВход интерфейса SPI
CLKТактовый сигнал
ResetСброс, активный низкий уровень
LEDПодсветка. Для модулей на красной плате соединить с общим, для синих
модулей соединить с питанием. Применять в цепи подсветки резистор 330
Ом. В некоторых модификациях уже установлен резистор в некоторых
нет. Для определения наличия резистора и выбора оптимального режима
подсветки следует контролировать ток модуля и ток подсветки. Он не
должен превышать 20 мА.

Подключение дисплея Nokia 5110

Обратите внимание, в модулях синего цвета подсветка подключается к питанию, в красных модулях к GND.

Дисплей Nokia 5110 Плата Arduino
Контакт 1 RST PB11
Контакт 2 CE PB12
Контакт 3 DC PB14
Контакт 4 DIN PB15
Контакт 5 CLK PB13
Контакт 6 VCC +3.3V
Контакт 7 LIGHT GND
Контакт 8 GND GND

Настройка портов производилась в CubeMX, а затем код был сгенерирован для CubeIDE. На рисунке ниже пример из проекта по настройке портов для подключения дисплея.

Настройка GPIO в STM32

Настройка SPI в CubeMX выглядит следующим образом:

Настройка SPI в STM32

Обратите внимание на Baud Rate. Это скорость передачи. Она должна быть ниже 4Мгц. Уменьшение скорости можно сделать повышая предделитель Prescaler.

Подготовка графики для дисплея

И так, мы подключили наш дисплей к STM32, но нам необходимо подготовить графику для LCD. Так как дисплей монохромный то у нас в наличии только 2 цвета: черный и белый. Так же необходимо помнить о размере дисплея: 84×48.

Для удобной работы с графикой, используйте программу Image Generator. Сделаем в ней логотип нашего сайта.

Нажимаем Картинка, открываем нужный файл и нажимаем преобразовать.

Преобразование картинки

Далее в вкладке Массив, мы имеем наш массив байт. Его мы копируем и вставляем в нашу программу.

Пример использования LCD на STM32

#include "main.h"
#include "nokia5110.h"
#include "FONT_IMAGE.h"
#include <stdio.h>

#define DELAY   2000

  N5110_Init();
  N5110_SetContrast(60);
  HAL_TIM_Base_Start_IT(&htim6);
  N5110_DrawBitmap(0, 0, (uint8_t *)Logo, N5110_MAX_WIDTH, N5110_MAX_HEIGHT);
  //N5110_Update();
  HAL_Delay(3000);
  int counter = 0;
  char numb[6];

  while (1)
  {
     N5110_Clear();
     N5110_SetFont(SmallFont);
     sprintf(numb,"%d",(uint16_t)counter);
     N5110_PrintStr(0, 0, numb, true);
     sprintf(numb,"%d",(uint16_t)counter*2);
     N5110_PrintStr(0, 10, numb, true);
     sprintf(numb,"%d",(uint16_t)counter*3);
     N5110_PrintStr(0, 20, numb, true);
     sprintf(numb,"%d",(uint16_t)counter*4);
     N5110_PrintStr(0, 30, numb, true);
     sprintf(numb,"%d",(uint16_t)counter*5);
     N5110_PrintStr(0, 40, numb, true);
     HAL_Delay(550);
     counter++;
  }
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim == &htim6)
	{
		N5110_Update();
	}
}

В примере мы настроили прерывание от таймера 6 на срабатывание через каждые 10мс, и в функции Callback вызываем обновление экрана. Полный проект для CubeMX и CubeIDE вы сможете скачать ниже по ссылкам.

Если вы не знакомы как настраивать прерывания в CubeMX, прочтите текст ниже:

Первым делом нам необходимо настроить время срабатывания таймера. Для этого в меню справа в разделе Timers выбираем нужный нам таймер и настраиваем его согласно картинке ниже:

Настройка таймера STM32

Далее в вкладке NVIC Settings необходимо установить галку, тем самым мы разрешаем прерывание от этого таймера:

Разрешение прерывания от таймера в STM32

И последней настройкой будет включение функции Callback от таймера. Для этого переходим в Project Manager — > Advenced Settings и справа в поле Register CallBack установите TIM-> Enable. Все теперь можно использовать функцию CallBack с прерыванием от таймера.

Видео с демонстрацией работы библиотеки представлено ниже:

Загрузки

Где купить

  • Плата STM32F407VET6
  • Дисплей Nokia 5110

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии