Главная

Главная

Сообщество

Сообщество

Форум

Форум

STM32

STM32

Электроника

Электроника

Raspberry Pi

Raspberry Pi

Уведомления
Очистить всё

[Решено] ST7735 медленная отрисовка

(@kappt)
Level 1

Продолжаю мучить дисплей... Сделал тестовый проект, заливаю весь дисплей разными цветами. Все работает, но очень медленно, даже по видео на youtube видно, что такой же дисплей работает намного быстрее. Вот мой код для отправки данных и установки цвета пикселя:

void SendCommand(uint8_t data)
{
  // Низкий уровень на ножку RS
  RS_LOW();
  HAL_SPI_Transmit(&hspi1, &data, 1, 2000);
}


void SendData(uint8_t data)
{
  // Высокий уровень на ножку RS
  RS_HIGH();
  HAL_SPI_Transmit(&hspi1, &data, 1, 2000);
}

void SetPixel(uint8_t xPos, uint8_t yPos, uint16_t color)
{
  LCD_SendCommand(0x2A);
  LCD_SendData(0x00);
  LCD_SendData(xPos);

  LCD_SendCommand(0x2B);
  LCD_SendData(0x00);
  LCD_SendData(yPos);

  LCD_SendCommand(0x2C);
  LCD_SendData((color & 0xFF00) >> 8);
  LCD_SendData(color & 0x00FF);
}

Цитата
Автор темы Опубликовано : 20.06.2021 22:34
Метки темы
Aveal MT
(@aveal)
Top level Admin
От: @kappt

Продолжаю мучить дисплей... Сделал тестовый проект, заливаю весь дисплей разными цветами. Все работает, но очень медленно, даже по видео на youtube видно, что такой же дисплей работает намного быстрее. Вот мой код для отправки данных и установки цвета пикселя:

Добрый день!

Это как раз тот случай, когда быстродействия HAL недостаточно. Надо отправку данных в SPI сделать напрямую через регистры - скорость отрисовки значительно увеличится.


ОтветЦитата
Опубликовано : 23.06.2021 01:26
tech
 tech
(@tech)
Level 3

Вот, набросал функции для работы с дисплеем на ST7735:

//--------------------------------------------------------------------------
void ST7735_SendByte(uint8_t data)
{
  while((SPI1->SR & SPI_SR_TXE) == RESET);  
  SPI1->DR = data;
}

//--------------------------------------------------------------------------
void ST7735_WaitLastData()
{
  while((SPI1->SR & SPI_SR_TXE) == RESET); 
  while((SPI1->SR & SPI_SR_BSY) != RESET);
}

//--------------------------------------------------------------------------
void ST7735_SendCommand(uint8_t data)
{
  HAL_GPIO_WritePin(RS_PORT, RS_PIN, GPIO_PIN_RESET);
  ST7735_SendByte(data);
  ST7735_WaitLastData();
}

//--------------------------------------------------------------------------
void ST7735_SendData(uint8_t data)
{
  HAL_GPIO_WritePin(RS_PORT, RS_PIN, GPIO_PIN_SET);  
  ST7735_SendByte(data);
  ST7735_WaitLastData();
}

//--------------------------------------------------------------------------
void ST7735_SendDataMultiple(uint8_t *data, int num)
{
  HAL_GPIO_WritePin(RS_PORT, RS_PIN, GPIO_PIN_SET);
  
  for (int i = 0; i < num; i++)
  {
    ST7735_SendByte(*data);
    data++;
  }
  
  ST7735_WaitLastData();
}

//--------------------------------------------------------------------------

ОтветЦитата
Опубликовано : 23.06.2021 11:29
(@kappt)
Level 1

Благодарю, вечером будет возможность проверить в деле )


ОтветЦитата
Автор темы Опубликовано : 23.06.2021 14:42
(@kappt)
Level 1

Готов отчитаться о результатах)

Все получилось, скорость ЗНАЧИТЕЛЬНО выросла. Только такой вопрос - теперь нужно и инициализацию SPI сделать без HAL?


ОтветЦитата
Автор темы Опубликовано : 24.06.2021 11:18
tech
 tech
(@tech)
Level 3

Да нет, незачем. HAL главное обдуманно использовать - критические участки кода, как в данном случае, по мере необходимости надо оптимизировать, переписав вручную через регистры напрямую. Без библиотечных оберток.


ОтветЦитата
Опубликовано : 24.06.2021 12:14
Aveal MT
(@aveal)
Top level Admin

Update: вышли статьи по работе с ST7735: ссылка_1, ссылка_2.


ОтветЦитата
Опубликовано : 02.11.2021 11:03
Обзор конфиденциальности

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