Top.Mail.Ru
Уведомления
Очистить все

[Решено] Дисплей st7735. Подключение к stm32f100, stm32f072

Страница 3 / 3
olegmik93
(@olegmik93)
Level 0

Я тоже рассматривал тайминги эти, но не был до конца уверен.
На выходных попробую завести экранчик 🙂 И спасибо за то что делитесь знаниями 🙂 
  

ОтветитьЦитата
Размещено : 15.11.2021 22:56
Aveal лайков
Aveal
(@aveal)
Top level Admin

@olegmik93 👍

От: @olegmik93

И спасибо за то что делитесь знаниями 🙂 

Спасибо за отзыв)

ОтветитьЦитата
Размещено : 16.11.2021 11:44
olegmik93 лайков
Андрей
(@andrej-8)
Level 1

Всем привет. Вопрос, при работе дисплея есть сдвиг ИЗО плюс по двум краям выводится полоски "мусора" (не важно какая ориентация дисплея). Как правильно исправить ошибку ? В среде Ардуино дисплеи показывают нормально.

IMG 20211117 121912
IMG 20211117 122009
IMG 20211117 121952
IMG 20211117 121928

 

ОтветитьЦитата
Размещено : 17.11.2021 13:02
Aveal
(@aveal)
Top level Admin

@andrej-8 можно оффсеты задефайнить и везде при отправке команд CASET/RASET их добавлять. Наверняка в ардуино-библиотеке так и сделано.

ОтветитьЦитата
Размещено : 17.11.2021 20:20
romanfaktor
(@romanfaktor)
Level 0

@aveal, спасибо за туториал! Есть вопросы.

Во первых, как понять какие команды нужно отправлять при инициализации, а какие нет. Да, в даташите есть для некоторых команд описание из которого можно понять что ее нужно отправлять но по поводу большинства остальных остаются вопросы - нужно ее слать или нет, если нет то какие дефолтные значения и тп. Может быть есть какие то общие правила? Ну то есть хочется понять как в функции инит в туториале появились именно эти команды.

Ну и конкретно. Разбираюсь что за команды отсылаются. Вот например команда PWCTR1. В даташите на st7735 эта команда с двумя параметрами, а в туториале отсылаются 3. Почему так?

ОтветитьЦитата
Размещено : 23.11.2021 15:52
Aveal лайков
Aveal
(@aveal)
Top level Admin

@romanfaktor Приветствую!

По поводу PWCTR1, у меня инициализация для ST7735R, упущение, что в статье не указал, добавлю сейчас...

В целом по командам, я обычно стараюсь начинать с минимальных изменений относительно дефолтных значений, дальше уже по мере необходимости. Эти конкретные команды как есть взял из старого проекта своего с этим дисплеем ) Дефолтные значения обычно там же, где описание, указаны должны быть:

ОтветитьЦитата
Размещено : 24.11.2021 18:08
romanfaktor лайков
Dimedrolus
(@dimedrolus)
Level 0

@andrej-8 Судя по твоим фото ты сдвинул координаты отсчета, посмотри где то в коде может быть ошибка. Например разрешение дисплея 128, но адресация по 0 - 127 = 128 значений ! Для 160 = 0 - 159. В некотором коде разных библиотек в функции отрисовки области бывает заминусованы значения для удобства то есть   ОтрисовывемОбласть(1,1,128,160) а на сторне функции   ОтрисовывемОбласть(х-1,у-1,х1-1,у1-1) по тому что первый стоблик в дисплее нумеруется с 0, но так же и для строк.

ОтветитьЦитата
Размещено : 05.01.2022 01:03
Reni
 Reni
(@reni)
Level 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();
}
ОтветитьЦитата
Размещено : 18.03.2022 13:11
Reni
 Reni
(@reni)
Level 0

Ну и еще можно вызов функции 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
ОтветитьЦитата
Размещено : 18.03.2022 13:23
Aveal
(@aveal)
Top level Admin

@reni сейчас как раз в одном изделии буду этот дисплей ставить, можно будет протестировать на предмет ускорения 👍 

ОтветитьЦитата
Размещено : 18.03.2022 21:05
Reni
 Reni
(@reni)
Level 0

@aveal Где можно будет увидеть результаты тестирования? 😋 Очень интересно. Кстати, проверь цвета в библиотеке я красный с синим менял для правильного отображения цветов.

ОтветитьЦитата
Размещено : 24.03.2022 23:17
Aveal
(@aveal)
Top level Admin

@reni Отпишу тут как дойдут руки протестировать )

Там в одном из регистров задается RGB или BGR.

ОтветитьЦитата
Размещено : 25.03.2022 11:39
Страница 3 / 3
Поделиться: