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

[Решено] Инициализация SPI, дисплей ST7735

(@kappt)
Level 1

Хочу подключить дисплей с контроллером STM7735, такой:

d2

128*160 пикселей.

Микроконтроллер: STM32F103RB.

Подключаю по даташиту:

d1

RESET, CS - обычные порты ввода-вывода STM32. SDA и SCK, как я понял (несмотря на их названия как у I2C), подключаются к SPI. У меня SPI1, SCK - PA5, SDA - PA7.

Инициализация SPI:

static void MX_SPI1_Init(void)
{

  /* USER CODE BEGIN SPI1_Init 0 */

  /* USER CODE END SPI1_Init 0 */

  /* USER CODE BEGIN SPI1_Init 1 */

  /* USER CODE END SPI1_Init 1 */
  /* SPI1 parameter configuration*/
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI1_Init 2 */

  /* USER CODE END SPI1_Init 2 */

}

Не кидайте камнями, да, я использую STM32CUBE.

Проблему даже не знаю как сформулировать более точно - дисплей не работает... Подсветка есть. Поскольку связь по SPI однонаправленная, то сложно понять, есть ли в инициализационной последовательности проблема, либо в чем-то другом дело...

Верно ли я понимаю, что SDA/SCK это все же SPI? Может есть пример работающий, чтобы сходу залить и проверить, хотя я понимаю, что вряд ли именно под мой контроллер окажется неожиданно готовое решение)

В общем буду рад любым советам и помощи!!!

Цитата
Создатель темы Размещено : 15.06.2021 18:34
Aveal
(@aveal)
Top level Admin

Добрый день!

От: @kappt

Не кидайте камнями, да, я использую STM32CUBE.

У меня вообще нет религиозной ненависти к Cube и HAL ) Все зависит от задачи.

Так, давайте начнем с изменения:

hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
ОтветитьЦитата
Размещено : 16.06.2021 13:54
Aveal
(@aveal)
Top level Admin
От: @kappt

Верно ли я понимаю, что SDA/SCK это все же SPI?

А, ну и да - дисплей по SPI работает, все верно.

ОтветитьЦитата
Размещено : 16.06.2021 18:31
(@kappt)
Level 1
От: @aveal

hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;

Блин, ну как так... Я все перепроверил по 100 раз перед созданием темы, в итоге реально в этом и оказалась проблема, дисплей заработал... Aveal, спасибо...)

ОтветитьЦитата
Создатель темы Размещено : 20.06.2021 16:13
(@kappt)
Level 1

@aveal

С работой теперь все ОК, но отрисовывает очень медленно... Можете помочь? Или создать новую тему лучше?

ОтветитьЦитата
Создатель темы Размещено : 20.06.2021 16:14
Aveal
(@aveal)
Top level Admin
От: @kappt

@aveal

С работой теперь все ОК, но отрисовывает очень медленно... Можете помочь? Или создать новую тему лучше?

Рад, что заработало! Да, лучше отдельную.

 

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

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

ОтветитьЦитата
Размещено : 02.11.2021 11:02
Поделиться: