Помогите разобраться с библиотекой GxTFT
- Войдите на сайт для отправки комментариев
Пт, 13/08/2021 - 21:20
Друзья, помогите разобраться с библиотекой GxTFT: https://github.com/ZinggJM/GxTFT
Это библиотека для TFT дисплеев для разных контроллеров. Использую ее из-за того что она поддерживает FSMC интерфейс для STM32F407.
Использую отладочную плату STM32F407VET6: https://stm32-base.org/boards/STM32F407VET6-STM32-F4VE-V2.0
в связке с ядром Arduino_Core_STM32: https://github.com/stm32duino/Arduino_Core_STM32
Суть проблемы:
На плате STM32F407VET6 от пина PB1 разведено управление подсветкой дисплея. HIGH - включить подсветку, LOW - выключить
В ручную управлять нельзя, так как пин PB1 используется в библиотеке (для той же подсветки)
Если заглянуть в GxIO_STM32F4_FSMC.cpp то там есть функция, где происходит назначение этому пину:
GxIO_STM32F4_FSMC::GxIO_STM32F4_FSMC(bool bl_active_high) { _cs = PD7; // FSMC_NE1 _rs = PD13; // FSMC_A18 _rst = 0; // not available, driven from NRST _wr = PD5; // FSMC_NWE _rd = PD4; // FSMC_NOE _bl = PB1; ////------------------------------------ _bl_active_high = bl_active_high; }
Так же есть функция управления подсветкой:
void GxIO_STM32F4_FSMC::setBackLight(bool lit) { digitalWrite(_bl, (lit == _bl_active_high)); }
Если заглянуть в функцию инициализации дисплея то можно увидеть что подсветка выключается:
void GxIO_STM32F4_FSMC::init() { ... digitalWrite(_bl, LOW); pinMode(_bl, OUTPUT); }
В теории достаточно вызвать функцию setBackLight чтобы включить подсветку, но это почему-то не работает. В скетче GxTFT_FSMC_BlackSTM32F407V (пример из библиотеки) прописываю включение подсветки дисплея, но это ни на что не влияет, подсветка остается выключенной:
tft.init(); io.setBackLight(true);
Можете помочь мне разобраться из-за чего не работает подсветка, и что "перехватывает" ее управление?
В скетче GxTFT_FSMC_BlackSTM32F407V с пробовал вставлять команду включения в разные места. Подсветка включается только после прохождения всех циклов рисования, перед входом в цикл loop.
Может она на самом деле не этим пином включается?
Точно пином PB1. Проверял проcтым Блинком. Даже ШИМ есть. Хм... Может вообще с библиотеки убрать все что связанно с этим пином и просто написать свою функцию?
А то все пересмотрел - не пойму что мешает управлять.
Не понял, что значит "В ручную управлять нельзя".
Нельзя дать команду digitalWrite(PB1, HIGH); ?
Не понял, что значит "В ручную управлять нельзя".
Нельзя дать команду digitalWrite(PB1, HIGH); ?
Именно! Реакции нет.
а может digitalWrite(PB1, LOW); ?
Не понял, что значит "В ручную управлять нельзя".
Нельзя дать команду digitalWrite(PB1, HIGH); ?
Именно! Реакции нет.
А у меня вполне себе экран мигает. Что я делаю не так?
Вы бы привели полностью код, в котором Вы дергаете PB1, а экран на это не отзывается.
PS. И еще: лично у меня возникли некоторые проблемы с цоколевкой: заказал у одного продавца как плату stm32f407vet6, так и 3.2" экран к ней. Все пристыкуется и работает, НО! Оказалось, что распиновка разъема на плате контроллера - НЕСТАНДАРТНАЯ: по-другому разведены 4 пина. Т.е. для того, чтобы этот экран заработал со стандартной платой, нужен переходник.
Upd: Запустил указанную в первом посте библиотеку - работает. (использовал переходник)
PS. На всякий случай: плату и дисплей (которые подходят друг другу) брал здесь:
https://aliexpress.ru/item/4000953664266.html