Цікава тема, та на жаль занадто мало висвітлена в мережі.
Я вже мав можливість "поюзати" Liquid crystal display controller - на SPL та "штатному" LCD STM32L-DISСOVERY. Використовувались при цьому стандартний набор бібліотек для Discovery, на той час...
А зараз розберемо, цю тему в розрізі бібліотеки HAL та кодогенератора CubeMX. Крім того, будемо використовувати не "штатний LCD" на платі STM32L Discovery, а сторонній сегментний LCD.
Наш "піддослідний" сегментний LCD. Ви його бачите на фото на початку статті. Нічого особливого в ньому нема - 8 символів, три cпарених COMx-піна (1...6) та на кожний символ використано по 3 сегментних піна, загалом 30 пінів.
"Добув" я його із електронного лічильника "Енергія-9" 2011 року випуску, який чомусь забракувала енергопостачальна організація... Було зрозуміло, що дисплей без вмонтованого контролера, і невелике "гугління" вивело на дисплеї фірми МЭЛТ МТ-8Т2 - http://www.melt.com.ru/docs/MT-8T2.pdf, які так і позиціонуються фірмою-виробником, як дисплеї для електролічильників.
MT-8T2-4T |
|
|
Без контроллера |
70x25x2.8 |
-40-+70 |
Для электросчетчиков |
Дисплей пересаджений на макетну плату, та під дисплеєм перемичками з'єднані піни дисплея СОМ3, СОМ2, СОМ1, відповідно 1-6, 2-5, 3-4. Все це добро, в свою чергу під'єднане до Discovery із STM32L152RBT6 на борту. Задіяні лише перших два символа дисплея, так би мовити для проби, оскільки майбутній проект із дисплеєм планується на іншому МК L-серії. Мені важливо було "просто поюзати тему"...
Проект в CubeMX. Запускаємо кодогенератор та вибираємо на МК STM32L152RBT6. Вмикаємо SWD-інтерфейс, "часовий" кварц, світлодіоди на платі РВ6, РВ7. Я ще ввімкнув кварц тактування мікроконтролера, хоча в проекті він не використовується, та i взагалі він на платі STM32L Discovery, заводом-виробником не впаюється (хоча в мене впаяний - колись "юзав" USB, i якщо будете запаювати, обовязково поставте перемички каплею припою на платі Discovery, див.схему).
Також було ввімкнено RTC, оскільки без цієї процедури відмовлялось працювати, та "висло" на перевірці while(__HAL_LCD_GET_FLAG(hlcd, LCD_FLAG_RDY) == RESET) у функції HAL_LCD_Init (файл stm32l1xx_hal_lcd.c). Думаю це повязано із особливостями плати Discovery, на ній не під'єднано пін VLCD, оскільки резистор R29 незапаяний заводом-виробником, тому потрібно задіювати внутрішнє джерело керуючої напруги. Та без задіяння RTC, це зробити не вдалось. На сайті ziblog.ru читаємо ось таке:
Однак безпосередньо (відразу) вказати LSI-генератор як джерело тактових сигналів LCD модуля можна, так як тактування з`єднано з годинником реального часу (RTC) і пріоритет відданий йому (це видно за назвою сигналу RTCCLK і бітів вибору тактових частот RTCSEL), а в увазі специфіки роботи RTC модуля, необхідно попередньо (після скидання мк) "отримати" доступ до бітам RTCSEL.
Вкладка Clock Configuration має такий вигляд:
Далі вмикаємо контроллер LCD, режим multiplex. В PDF на дисплей МЭЛТ МТ-8Т2, вказано метод керування дисплеєм - 1/3DUTY, 1/3BIAS, VOP=3,0V. Сегменти SEG3...SEG6 не задіяні, в звязку із особливостями плати Discovery, підключено "тач-скрін", тому використаємо слідуючі вільні - SEG7(PB3), SEG8(PB4), SEG9(PB5).
Вкладка LCD Configuration - привязана до параметрів нашого дисплея та деякі параметри налаштувань були підглянуті в репозиторії CubeMX для STM32L15x, там є приклади для плати STM32L Discovery.
Проект. Генеруємо проект в KEIL 5, та в основному циклові будемо виводити на дисплей числа від 0 до 10, потім число 2,2 ну а потім знову з нуля... Проект чисто демонстраційний - http://radiomanoff.at.ua/load/segment/1-1-0-42
|