/*
   STM32: SPI: LCD — Вы всё делаете не так !
   https://habrahabr.ru/post/276605/
*/

// передача данных на дисплей
void SPI2_SendByte(uint8_t sendData)
{
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
  SPI_I2S_SendData(SPI2, sendData);
}

// определение области для вывода
void ili9341c_SetWindow(uint16_t ystart, uint16_t xstart, uint16_t yend, uint16_t xend)
{
. . .
  GPIO_ResetBits(GPIOB, GPIO_Pin_12); // DC=0;

  SPI2_SendByte(LCD_PAGE_ADDR);

  //ждем пока команда уйдет на дисплей (а не перейдет в shift reg)
  while (SPI_I2S_GetFlagStatus(SPI2,SPI_FLAG_BSY)!=RESET);

  GPIO_SetBits(GPIOB, GPIO_Pin_12); // DC=1;

  SPI2_SendByte(xstart>>8);	// данные
  SPI2_SendByte(xstart&0xFF);	// передаются
  SPI2_SendByte(xend>>8);	// в непрерывном
  SPI2_SendByte(xend&0xFF);	// режиме без пауз !

  // ждем пока данные передадутся до конца
  while (SPI_I2S_GetFlagStatus(SPI2,SPI_FLAG_BSY)!=RESET);

. . .
}
