Я тоже рассматривал тайминги эти, но не был до конца уверен.
На выходных попробую завести экранчик 🙂 И спасибо за то что делитесь знаниями 🙂
Всем привет. Вопрос, при работе дисплея есть сдвиг ИЗО плюс по двум краям выводится полоски "мусора" (не важно какая ориентация дисплея). Как правильно исправить ошибку ? В среде Ардуино дисплеи показывают нормально.
@andrej-8 можно оффсеты задефайнить и везде при отправке команд CASET/RASET их добавлять. Наверняка в ардуино-библиотеке так и сделано.
@aveal, спасибо за туториал! Есть вопросы.
Во первых, как понять какие команды нужно отправлять при инициализации, а какие нет. Да, в даташите есть для некоторых команд описание из которого можно понять что ее нужно отправлять но по поводу большинства остальных остаются вопросы - нужно ее слать или нет, если нет то какие дефолтные значения и тп. Может быть есть какие то общие правила? Ну то есть хочется понять как в функции инит в туториале появились именно эти команды.
Ну и конкретно. Разбираюсь что за команды отсылаются. Вот например команда PWCTR1. В даташите на st7735 эта команда с двумя параметрами, а в туториале отсылаются 3. Почему так?
@romanfaktor Приветствую!
По поводу PWCTR1, у меня инициализация для ST7735R, упущение, что в статье не указал, добавлю сейчас...
В целом по командам, я обычно стараюсь начинать с минимальных изменений относительно дефолтных значений, дальше уже по мере необходимости. Эти конкретные команды как есть взял из старого проекта своего с этим дисплеем ) Дефолтные значения обычно там же, где описание, указаны должны быть:
@andrej-8 Судя по твоим фото ты сдвинул координаты отсчета, посмотри где то в коде может быть ошибка. Например разрешение дисплея 128, но адресация по 0 - 127 = 128 значений ! Для 160 = 0 - 159. В некотором коде разных библиотек в функции отрисовки области бывает заминусованы значения для удобства то есть ОтрисовывемОбласть(1,1,128,160) а на сторне функции ОтрисовывемОбласть(х-1,у-1,х1-1,у1-1) по тому что первый стоблик в дисплее нумеруется с 0, но так же и для строк.
Здраствуйте. Запустил по статье дисплей на STM32FCBT6. Намучался с выводом изображения пока понял что не хватает память у МК ))) Есть предложения как ускорить программу.
В добавление функции "ST7735_WaitLastData()" везде это слишком, точнее ждать после каждой отправки команды или данных освобождения передатчика "while((SPI1->SR & SPI_SR_BSY) != RESET)". Предлагаю при передачи данных вообще не ждать когда передатчик осободится. Сделать как-то так.
void ST7735_SendCommand(uint8_t data) { //HAL_GPIO_WritePin(ST7735_DC_PORT, ST7735_DC_PIN, GPIO_PIN_RESET); while((SPI1->SR & SPI_SR_BSY) != RESET); // Ждем когда передатчик освободится ST7735_DC_Command; ST7735_SendByte(data); ST7735_WaitLastData(); } /*----------------------------------------------------------------------------*/ void ST7735_SendData(uint8_t data) { //HAL_GPIO_WritePin(ST7735_DC_PORT, ST7735_DC_PIN, GPIO_PIN_SET); ST7735_DC_Data; ST7735_SendByte(data); //ST7735_WaitLastData(); }
Ну и еще можно вызов функции HAL() для переключения gpio заменить на атомарные операции
//HAL_GPIO_WritePin(ST7735_DC_PORT, ST7735_DC_PIN, GPIO_PIN_SET); ST7735_DC_Data;
подправив define-ы в файле "ST7735.h"
#define ST7735_CS_PORT (GPIOB) #define ST7735_CS_PIN_SET (GPIO_BSRR_BS2) #define ST7735_CS_PIN_RESET (GPIO_BSRR_BR2) #define ST7735_DC_PORT (GPIOB) #define ST7735_DC_PIN_SET (GPIO_BSRR_BS0) #define ST7735_DC_PIN_RESET (GPIO_BSRR_BR0) #define ST7735_CS_Enable ST7735_CS_PORT -> BSRR = ST7735_CS_PIN_RESET //RESET #define ST7735_CS_Reset ST7735_CS_PORT -> BSRR = ST7735_CS_PIN_SET //SET #define ST7735_DC_Command ST7735_DC_PORT -> BSRR = ST7735_DC_PIN_RESET //RESET #define ST7735_DC_Data ST7735_DC_PORT -> BSRR = ST7735_DC_PIN_SET //SET
@reni сейчас как раз в одном изделии буду этот дисплей ставить, можно будет протестировать на предмет ускорения 👍
@aveal Где можно будет увидеть результаты тестирования? 😋 Очень интересно. Кстати, проверь цвета в библиотеке я красный с синим менял для правильного отображения цветов.
@reni Отпишу тут как дойдут руки протестировать )
Там в одном из регистров задается RGB или BGR.
Доброго времени суток всем.
имеется отладачная плата stm32g030f6p6 и два экрана st7735s 096" и st7789 1.3". уже с неделю бьюсь с ними. никак не могу подружить хоть один.
7789 не получается установить библиотеки(или они карявые, или мои руки), а на st7735s 096" выводит какойто мусор. и то при скорости 4мбита(с библиотекой с етого сайта).
в сети находил упоминание что если выводит мусор - необходимо сдвигать начальные координаты Y отрисовки. перебрал через for от 0 до 160 и Y и X - не помогло.
for (i = 0; i < 160; i++) { ST7735_DrawRect(0, i, ST7735_X_SIZE, ST7735_Y_SIZE, ST7735_COLOR_RED); HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0); HAL_Delay(500); }
фото екрана не мое, но картина такая же.
кого не затруднит ПРОШУ помочь!
Доброго дня, можешь скинуть проект и ссылку на дисплей?
https://aliexpress.ru/item/4001282467099.html?spm=a2g2w.orderdetail.0.0.79a94aa63NTatA&sku_id=10000015593398595 оба брал тут.
как залить проект? собрал в *.7z и *.zip , не прикрепляет фаил.