Календар-годинник на STM32F103 із TFT-дисплеєм та Bluetooth-синхронізацією

Вбудовані системи на базі мікроконтролерів використовуються у вимірювальній техніці, автоматизації, робототехніці, системах керування та пристроях Інтернету речей. Одним із практичних прикладів такої системи є календар-годинник локального часу, створений на базі мікроконтролера STM32F103.

Проєкт поєднує електронну схему, роботу з периферією мікроконтролера, передавання даних через цифрові інтерфейси, бездротове налаштування часу та виведення україномовної інформації на TFT-дисплей.

Матеріал буде корисним студентам, які опановують програмування мікроконтролерів, цифрову електроніку, вбудовані системи та інформаційно-вимірювальні технології.

Завдання проєкту

Метою розробки було створення компактного пристрою, який:

  • відображає поточний час і дату;
  • зберігає дані календаря;
  • показує інформацію українською мовою;
  • підтримує кольоровий TFT-дисплей;
  • дозволяє коригувати час зі смартфона;
  • використовує внутрішній годинник реального часу мікроконтролера;
  • продовжує зберігати службові дані під час відсутності основного живлення.

Для реалізації проєкту використано мікроконтролерний модуль STM32F103 Smart, TFT-дисплей, Bluetooth-модуль HC-06 та програмне забезпечення мовою C.

Основні компоненти системи

До складу пристрою входять:

  • STM32F103 Smart;
  • TFT LCD 1,3″ із роздільною здатністю 240×240 або TFT LCD 1,44″ із роздільною здатністю 128×128;
  • Bluetooth-модуль HC-06;
  • резервне джерело живлення для RTC;
  • з’єднувальна або перехідна плата;
  • Android-застосунок для встановлення часу.

Обидва варіанти дисплея підключаються до мікроконтролера через інтерфейс SPI. Bluetooth-модуль підключено через USART2.

Передавання даних на TFT-дисплей

TFT-дисплей використовується для відображення:

  • годин;
  • хвилин;
  • секунд;
  • числа;
  • місяця;
  • року;
  • дня тижня;
  • службових повідомлень.

Передавання графічних даних від мікроконтролера до дисплея здійснюється через послідовний інтерфейс SPI.

Під час складання пристрою необхідно враховувати, що модулі TFT LCD 1,3″ та 1,44″ можуть мати різне розташування контактів. Тому схема підключення повинна відповідати конкретній моделі дисплея.

Налаштування часу через Bluetooth

Для встановлення або коригування поточного часу використовується Bluetooth-модуль HC-06.

Модуль підключений до STM32F103 через інтерфейс USART2. Дані про дату й час надходять від Android-застосунку у вигляді послідовності символів.

Мікроконтролер приймає:

  • день;
  • місяць;
  • рік;
  • години;
  • хвилини;
  • секунди.

Після приймання дані перетворюються у внутрішній формат і записуються в систему RTC.

Такий підхід дозволяє встановлювати час без додаткових кнопок, енкодерів або складного меню на самому пристрої.

Робота годинника реального часу

STM32F103 містить апаратний модуль RTC — Real-Time Clock. Він використовується для підрахунку секунд і збереження часу.

У програмному забезпеченні час подається у форматі UNIX time — як кількість секунд, що минула від 1 січня 1970 року.

Це спрощує виконання календарних обчислень, оскільки одне числове значення містить інформацію про:

  • рік;
  • місяць;
  • день;
  • день тижня;
  • години;
  • хвилини;
  • секунди.

Для перетворення дати та часу використовується стандартна бібліотека time.h. Функція mktime() перетворює структуру tm у значення типу time_t.

Перетворення BCD-даних

У проєкті частина параметрів часу обробляється у форматі BCD — Binary-Coded Decimal.

У цьому форматі кожна десяткова цифра зберігається окремою групою бітів. Наприклад, значення 0x29 у BCD відповідає десятковому числу 29.

Після отримання даних із Bluetooth-повідомлення програма:

1. виділяє окремі цифри;
2. формує числові значення;
3. записує їх у структуру tm;
4. перетворює дату й час у time_t;
5. передає значення в RTC.

Фрагмент алгоритму:

tstart.tm_sec =
    (aRxBuffer[10] & 0x0F) * 10 +
    (aRxBuffer[11] & 0x0F);

tstart.tm_min =
    (aRxBuffer[8] & 0x0F) * 10 +
    (aRxBuffer[9] & 0x0F);

tstart.tm_hour =
    (aRxBuffer[6] & 0x0F) * 10 +
    (aRxBuffer[7] & 0x0F);

daytime = mktime(&tstart);

Збереження часу в резервних регістрах

Значення time_t може мати розмір 32 біти. Для запису в резервні регістри воно розділяється на дві 16-бітні частини:

uint16_t daytimeL = daytime & 0x0000FFFF;
uint16_t daytimeH = (daytime >> 16) & 0x0000FFFF;

HAL_RTCEx_BKUPWrite(
    &RtcHandle,
    RTC_BKP_DR2,
    daytimeL
);

HAL_RTCEx_BKUPWrite(
    &RtcHandle,
    RTC_BKP_DR3,
    daytimeH
);

Це дозволяє зберегти базове значення часу в резервній області мікроконтролера.

Українські шрифти для TFT LCD

Однією з особливостей проєкту є підтримка української мови.

Стандартні бібліотеки для невеликих TFT-дисплеїв не завжди містять українські символи. Тому для пристрою було сформовано власний растровий шрифт.

Для цього використано програму GLCD Font Creator. Вона дозволяє:

  • імпортувати системний TrueType-шрифт;
  • обрати необхідний діапазон Unicode;
  • задати розмір символів;
  • згенерувати масив байтів мовою C;
  • додати масив безпосередньо до проєкту мікроконтролера.

У матеріалі використовується діапазон Unicode, який охоплює кирилицю та додаткові українські символи, зокрема «І», «Ї», «і» та «ї».

Згенерований масив має приблизно такий вигляд:

const uint8_t myFont_ukr[] = {
    0x00,
    0x00,
    0x06, 0x04,
    0x85, 0x04,
    0x27,
    0x00
};

Кожен символ подається як набір байтів, у якому окремі біти відповідають пікселям зображення.

Структура програмного забезпечення

Код проєкту створено мовою C з використанням бібліотеки HAL.

Програмне забезпечення виконує кілька основних функцій:

  • ініціалізацію мікроконтролера;
  • налаштування SPI;
  • налаштування USART;
  • налаштування RTC;
  • керування TFT-дисплеєм;
  • приймання даних через Bluetooth;
  • перетворення часу;
  • відображення тексту і графіки;
  • роботу з растровими шрифтами.

Для розроблення та складання проєкту використано середовище Keil.

Практичне значення проєкту

Цей календар-годинник є хорошим прикладом комплексного навчального проєкту, у якому поєднуються кілька напрямів:

  • цифрова електроніка;
  • мікроконтролери;
  • програмування мовою C;
  • послідовні інтерфейси;
  • бездротовий зв’язок;
  • робота з дисплеями;
  • обробка часу;
  • кодування символів;
  • проєктування вбудованих систем.

Подібні проєкти допомагають зрозуміти не лише окремі функції мікроконтролера, а й принципи створення завершеної програмно-апаратної системи.

Зв’язок з інформаційно-вимірювальними технологіями

Фахівці з інформаційно-вимірювальних технологій працюють із датчиками, мікроконтролерами, електронними модулями, каналами передавання даних і програмним забезпеченням.

Створення такого пристрою передбачає:

  • проєктування електронної схеми;
  • налаштування апаратної частини;
  • написання програмного коду;
  • передавання та оброблення даних;
  • відображення результатів;
  • перевірку правильності роботи системи.

Саме такі компетентності формуються під час навчання на кафедрі інформаційно-вимірювальних технологій.

Висновок

Розробка календаря-годинника на STM32F103 демонструє, як за допомогою доступних електронних компонентів можна створити повноцінну вбудовану систему.

Проєкт поєднує роботу з TFT-дисплеєм, Bluetooth, RTC, UNIX time, BCD-даними, українськими шрифтами та мовою C.

Матеріал може бути використаний як навчальний приклад для студентів, які вивчають мікроконтролери, електроніку, програмування, автоматизацію та інформаційно-вимірювальні технології.


Самарцев Юрій Миколайович
доцент, кандидат технічних наук
кафедра інформаційно-вимірювальних технологій
КПІ ім. Ігоря Сікорського


Навчайтеся створювати сучасні інженерні системи

На кафедрі ІВТ студенти вивчають програмування, мікроконтролери, електроніку, вимірювальні системи, автоматизацію, робототехніку, комп’ютерний зір і штучний інтелект.

Освітні програми кафедри
Вступ на бакалаврат
Спеціальність G6 «Інформаційно-вимірювальні технології»