Pārlūkot izejas kodu

Правильная работа с SPI

Vladimir N. Shilov 9 gadi atpakaļ
vecāks
revīzija
7f92f451fb
1 mainītis faili ar 32 papildinājumiem un 0 dzēšanām
  1. 32 0
      stm32/right_spi.c

+ 32 - 0
stm32/right_spi.c

@@ -0,0 +1,32 @@
+/**
+  * Разработка → 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);  
+
+  while (SPI_I2S_GetFlagStatus(SPI2,SPI_FLAG_BSY)!=RESET);  //ждем пока команда уйдет на дисплей (а не перейдет в shift reg)
+
+  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); // ждем пока данные передадутся до конца 
+. . .
+}