Перейти к содержанию
    

Есть такая плата STM32F429I-DISC1. При конфигурации LCD есть конфигурация SPI.

/* Configure the LCD_SPI interface -----------------------------------------*/
  LCD_SPIConfig(); 

И потом обращение к LCD

void LCD_WriteData(uint8_t value)
{
    /* Set WRX to send data */
  LCD_CtrlLinesWrite(LCD_WRX_GPIO_PORT, LCD_WRX_PIN, Bit_SET);
  
  /* Reset LCD control line(/CS) and Send data */  
  LCD_ChipSelect(DISABLE);
  SPI_I2S_SendData(LCD_SPI, value);
  
  /* Wait until a data is sent(not busy), before config /CS HIGH */
  
  while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_TXE) == RESET) ;
  
  while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET);
  
  LCD_ChipSelect(ENABLE);
}

Но у LCD  на этой демо плате нет SPI интерфейса.

lcd.png.f2ec24760b27d912c4e5b24c28e19724.png

 

Я что то не понимаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У этого индикатора все-таки SPI. Комнады ILI9341. То что на схеме написано SDA и SCL пусть Вас не смущает - это по-китайски.

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, jenya7 сказал:

Есть такая плата STM32F429I-DISC1. При конфигурации LCD есть конфигурация SPI.Но у LCD  на этой демо плате нет SPI интерфейса.

...

Но у LCD  на этой демо плате нет SPI интерфейса.

Вот так открытие! А у меня проект на этой плате уже второй год с LCD по SPI работает и не знает о том, что его там нет!  :shok:  :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну может быть схема не соответствует реальности.

но у меня код затыкается на обращении к SPI на этой строке.

 while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_TXE) == RESET) ;

можете показать функцию конфигурации?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 минут назад, GenaSPB сказал:

У этого индикатора все-таки SPI. Комнады ILI9341. То что на схеме написано SDA и SCL пусть Вас не смущает - это по-китайски.

Китайцы всё правильно написали. ILI9341 может работать по разным интерфейсам. Используя одни и те же ноги. По названиям ног определять интерфейс нельзя. Просто кто-то не читает даташитов.....  :unknw:

8 минут назад, jenya7 сказал:

можете показать функцию конфигурации?

Конфигурации чего?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

 

Конфигурации чего?

конфигурацию LCD.

в LCD_SPIConfig есть строка

 /* Enable L3GD20_SPI  */
    SPI_Cmd(LCD_SPI, ENABLE);

и по схеме я вижу что SPI честно приходит на  датчик L3GD20.

Что делать? Это оригинальная STишная демо плата.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, jenya7 сказал:

и по схеме я вижу что SPI честно приходит на  датчик L3GD20.

Что делать? Это оригинальная STишная демо плата.

Ну и что? Этот датчик на том же SPI сидит. SPI - это шина.

Мой конфиг LCD для этой платы (lcdInit[]):

Спойлер

#define LCD_ORIENT     1 //0 или 1 - нормальный или перевёрнутый экран

#define C_NOP       0x00 //No Operation
#define C_SWRESET   0x01 //Software Reset
#define C_RDDIDIF   0x04 //Read display identification information
#define C_RDDST     0x09 //Read Display Status
#define C_RDDPM     0x0A //Read Display Power Mode
#define C_RDDMADCTL 0x0B //Read Display MADCTL
#define C_RDDCOLMOD 0x0C //Read Display Pixel Format
#define C_RDDIM     0x0D //Read Display Image Format
#define C_RDDSM     0x0E //Read Display Signal Mode
#define C_RDDSDR    0x0F //Read Display Self-Diagnostic Result
#define C_SLPIN     0x10 //Enter Sleep Mode
#define C_SLPOUT    0x11 //Sleep Out
#define C_PTLON     0x12 //Partial Mode ON
#define C_NORON     0x13 //Normal Display Mode ON
#define C_DINVOFF   0x20 //Display Inversion OFF
#define C_DINVON    0x21 //Display Inversion ON
#define C_GAMSET    0x26 //Gamma Set
#define C_DISPOFF   0x28 //Display OFF
#define C_DISPON    0x29 //Display ON
#define C_CASET     0x2A //Column Address Set
#define C_PASET     0x2B //Page Address Set
#define C_RAMWR     0x2C //Memory Write
#define C_RGBSET    0x2D //Color Set
#define C_RAMRD     0x2E //Memory Read
#define C_PLTAR     0x30 //Partial Area
#define C_VSCRDEF   0x33 //Vertical Scrolling Definition
#define C_TEOFF     0x34 //Tearing Effect Line OFF
#define C_TEON      0x35 //Tearing Effect Line ON
#define C_MADCTL    0x36 //Memory Access Control
#define C_VSCRSADD  0x37 //Vertical Scrolling Start Address
#define C_IDMOFF    0x38 //Idle Mode OFF
#define C_IDMON     0x39 //Idle Mode ON
#define C_PIXSET    0x3A //Pixel Format Set
#define C_RAMWR_C   0x3C //Memory Write Continue
#define C_RAMRD_C   0x3E //Memory Read Continue
#define C_WRDISBV   0x51 //Write Display Brightness
#define C_RDDISBV   0x52 //Read Display Brightness
#define C_WRCTRLD   0x53 //Write CTRL Display
#define C_RDCTRLD   0x54 //Read CTRL Display
#define C_WRCABC    0x55 //Write Content Adaptive Brightness Control
#define C_RDCABC    0x56 //Read Content Adaptive Brightness Control
#define C_RDID1     0xDA //Read ID1
#define C_RDID2     0xDB //Read ID2
#define C_RDID3     0xDC //Read ID3
#define C_IFMODE    0xB0 //RGB Interface Signal Control
#define C_FRMCTR1   0xB1 //Frame Rate Control (In Normal Mode/Full Colors)
#define C_FRMCTR2   0xB2 //Frame Rate Control (In Idle Mode/8 colors)
#define C_FRMCTR3   0xB3 //Frame Rate control (In Partial Mode/Full Colors)
#define C_INVTR     0xB4 //Display Inversion Control
#define C_PRCTR     0xB5 //Blanking Porch Control
#define C_DISCTRL   0xB6 //Display Function Control
#define C_ETMOD     0xB7 //Entry Mode Set
#define C_PWCTRL1   0xC0 //Power Control 1
#define C_PWCTRL2   0xC1 //Power Control 2
#define C_PWCTRL3   0xC2 //Power Control 3 (For Normal Mode)
#define C_PWCTRL4   0xC3 //Power Control 4 (For Idle Mode)
#define C_PWCTRL5   0xC4 //Power Control 5 (For Partial Mode)
#define C_VMCTRL1   0xC5 //VCOM Control 1
#define C_VMCTRL2   0xC7 //VCOM Control 2
#define C_POWERA    0xCB //Power control A register
#define C_POWERB    0xCF //Power control B register
#define C_NVMWR     0xD0 //NV Memory Write
#define C_NVMPKEY   0xD1 //NV Memory Protection Key
#define C_RDNVM     0xD2 //NV Memory Status Read
#define C_RDID4     0xD3 //Read ID4
#define C_PGAMCTRL  0xE0 //Positive Gamma Correction
#define C_NGAMCTRL  0xE1 //Negative Gamma Correction
#define C_DGAMCTRL1 0xE2 //Digital Gamma Control 1
#define C_DGAMCTRL2 0xE3 //Digital Gamma Control 2
#define C_DTCA      0xE8 //Driver timing control A
#define C_DTCB      0xEA //Driver timing control B
#define C_POWER_SEQ 0xED //Power on sequence control
#define C_ENABLE_3G 0xF2 //3 Gamma enable register
#define C_IFCTL     0xF6 //Interface Control
#define C_PRC       0xF7 //Pump ratio control register

//Контрастность задаётся напряжением == VCOMH - VCOML
#define VCOMH  4250  //[mV] напряжение VCOMH, должно быть +2700mV...+5875mV с шагом 25mV
#define VCOML  -1500 //[mV] напряжение VCOML, должно быть -2500mV...0mV с шагом 25mV
//Напряжение смещения VCOMF
#define VCOMF  -1450 //[mV] напряжение VCOMF, должно быть -1575mV...+1575mV с шагом 25mV

#if VCOMH < 2700 || VCOMH > 5875 || VCOML < -2500 || VCOML > 0 || VCOMF < -1575 || VCOMF > 1575
#error VCOMH or VCOML or VCOMF out of range!
#endif
#define VMH ((VCOMH - 2700) / 25)
#define VML ((VCOML + 2500) / 25)
#define VMF (VCOML / 25 + 64)

enum {RET_Ok, RET_Arg};

#define IDELAY(ms) (B7 | (ms))

static u8 const lcdInit[] = {
  1,  C_SWRESET,
  IDELAY(6),
  6,  C_POWERA,    0x39, 0x2C, 0x00, 0x34, 0x02,
  4,  C_POWERB,    0x00, 0xC1, 0x30,
  4,  C_DTCA,      0x85, 0x00, 0x78,
  3,  C_DTCB,      0x00, 0x00,
  5,  C_POWER_SEQ, 0x64, 0x03, 0x12, 0x81,
  2,  C_PRC,       2 << 4,            //Pump ratio control
  2,  C_PWCTRL1,   0x23,              //Power controlVR: H[5:0]
  2,  C_PWCTRL2,   0x10,              //Power control: SAP[2:0];BT[3:0]
  3,  C_VMCTRL1,   VMH, VML,          //VCM control
  2,  C_VMCTRL2,   VMF | B7,          //VCM control2
  2,  C_MADCTL,                       //Memory Access Control: BIT_GRB | BIT_MV | BIT_MX | BIT_MY
      B3 | B5 | (B6 | B7) * LCD_ORIENT,
  2,  C_PIXSET,    5 | 5 << 4,        //COLMOD: Pixel Format Set
  3,  C_FRMCTR1,   0x00, 0x18,
  4,  C_DISCTRL,   0x0A, 0x82, 0x27,  //Display Function Control
  4,  C_IFCTL,     B0, 1 << 4, 0x00,  //Interface Control
  2,  C_ENABLE_3G, 0x00,              //3Gamma Function Disable
  2,  C_GAMSET,    0x01,              //Gamma curve selected
  16, C_PGAMCTRL,  0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E, 0xF1, //Set Gamma
                   0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00,
  16, C_NGAMCTRL,  0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31, 0xC1, //Set Gamma
                   0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F,
  1,  C_SLPOUT,
  IDELAY(121),

  5,  C_CASET,     0x00, 0x00, 0x01, 0x3F,
  5,  C_PASET,     0x00, 0x00, 0x00, 0xEF,
  1,  C_DISPON,
  0
};

 

Каждая строка lcdInit - команда. Первый байт - длина команды, 2-й - код команды. IDELAY() - задержка в мс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

Ну и что? Этот датчик на том же SPI сидит. SPI - это шина.

Мой конфиг LCD для этой платы (lcdInit[]):

  Reveal hidden contents


#define LCD_ORIENT     1 //0 или 1 - нормальный или перевёрнутый экран

#define C_NOP       0x00 //No Operation
#define C_SWRESET   0x01 //Software Reset
#define C_RDDIDIF   0x04 //Read display identification information
#define C_RDDST     0x09 //Read Display Status
#define C_RDDPM     0x0A //Read Display Power Mode
#define C_RDDMADCTL 0x0B //Read Display MADCTL
#define C_RDDCOLMOD 0x0C //Read Display Pixel Format
#define C_RDDIM     0x0D //Read Display Image Format
#define C_RDDSM     0x0E //Read Display Signal Mode
#define C_RDDSDR    0x0F //Read Display Self-Diagnostic Result
#define C_SLPIN     0x10 //Enter Sleep Mode
#define C_SLPOUT    0x11 //Sleep Out
#define C_PTLON     0x12 //Partial Mode ON
#define C_NORON     0x13 //Normal Display Mode ON
#define C_DINVOFF   0x20 //Display Inversion OFF
#define C_DINVON    0x21 //Display Inversion ON
#define C_GAMSET    0x26 //Gamma Set
#define C_DISPOFF   0x28 //Display OFF
#define C_DISPON    0x29 //Display ON
#define C_CASET     0x2A //Column Address Set
#define C_PASET     0x2B //Page Address Set
#define C_RAMWR     0x2C //Memory Write
#define C_RGBSET    0x2D //Color Set
#define C_RAMRD     0x2E //Memory Read
#define C_PLTAR     0x30 //Partial Area
#define C_VSCRDEF   0x33 //Vertical Scrolling Definition
#define C_TEOFF     0x34 //Tearing Effect Line OFF
#define C_TEON      0x35 //Tearing Effect Line ON
#define C_MADCTL    0x36 //Memory Access Control
#define C_VSCRSADD  0x37 //Vertical Scrolling Start Address
#define C_IDMOFF    0x38 //Idle Mode OFF
#define C_IDMON     0x39 //Idle Mode ON
#define C_PIXSET    0x3A //Pixel Format Set
#define C_RAMWR_C   0x3C //Memory Write Continue
#define C_RAMRD_C   0x3E //Memory Read Continue
#define C_WRDISBV   0x51 //Write Display Brightness
#define C_RDDISBV   0x52 //Read Display Brightness
#define C_WRCTRLD   0x53 //Write CTRL Display
#define C_RDCTRLD   0x54 //Read CTRL Display
#define C_WRCABC    0x55 //Write Content Adaptive Brightness Control
#define C_RDCABC    0x56 //Read Content Adaptive Brightness Control
#define C_RDID1     0xDA //Read ID1
#define C_RDID2     0xDB //Read ID2
#define C_RDID3     0xDC //Read ID3
#define C_IFMODE    0xB0 //RGB Interface Signal Control
#define C_FRMCTR1   0xB1 //Frame Rate Control (In Normal Mode/Full Colors)
#define C_FRMCTR2   0xB2 //Frame Rate Control (In Idle Mode/8 colors)
#define C_FRMCTR3   0xB3 //Frame Rate control (In Partial Mode/Full Colors)
#define C_INVTR     0xB4 //Display Inversion Control
#define C_PRCTR     0xB5 //Blanking Porch Control
#define C_DISCTRL   0xB6 //Display Function Control
#define C_ETMOD     0xB7 //Entry Mode Set
#define C_PWCTRL1   0xC0 //Power Control 1
#define C_PWCTRL2   0xC1 //Power Control 2
#define C_PWCTRL3   0xC2 //Power Control 3 (For Normal Mode)
#define C_PWCTRL4   0xC3 //Power Control 4 (For Idle Mode)
#define C_PWCTRL5   0xC4 //Power Control 5 (For Partial Mode)
#define C_VMCTRL1   0xC5 //VCOM Control 1
#define C_VMCTRL2   0xC7 //VCOM Control 2
#define C_POWERA    0xCB //Power control A register
#define C_POWERB    0xCF //Power control B register
#define C_NVMWR     0xD0 //NV Memory Write
#define C_NVMPKEY   0xD1 //NV Memory Protection Key
#define C_RDNVM     0xD2 //NV Memory Status Read
#define C_RDID4     0xD3 //Read ID4
#define C_PGAMCTRL  0xE0 //Positive Gamma Correction
#define C_NGAMCTRL  0xE1 //Negative Gamma Correction
#define C_DGAMCTRL1 0xE2 //Digital Gamma Control 1
#define C_DGAMCTRL2 0xE3 //Digital Gamma Control 2
#define C_DTCA      0xE8 //Driver timing control A
#define C_DTCB      0xEA //Driver timing control B
#define C_POWER_SEQ 0xED //Power on sequence control
#define C_ENABLE_3G 0xF2 //3 Gamma enable register
#define C_IFCTL     0xF6 //Interface Control
#define C_PRC       0xF7 //Pump ratio control register

//Контрастность задаётся напряжением == VCOMH - VCOML
#define VCOMH  4250  //[mV] напряжение VCOMH, должно быть +2700mV...+5875mV с шагом 25mV
#define VCOML  -1500 //[mV] напряжение VCOML, должно быть -2500mV...0mV с шагом 25mV
//Напряжение смещения VCOMF
#define VCOMF  -1450 //[mV] напряжение VCOMF, должно быть -1575mV...+1575mV с шагом 25mV

#if VCOMH < 2700 || VCOMH > 5875 || VCOML < -2500 || VCOML > 0 || VCOMF < -1575 || VCOMF > 1575
#error VCOMH or VCOML or VCOMF out of range!
#endif
#define VMH ((VCOMH - 2700) / 25)
#define VML ((VCOML + 2500) / 25)
#define VMF (VCOML / 25 + 64)

enum {RET_Ok, RET_Arg};

#define IDELAY(ms) (B7 | (ms))

static u8 const lcdInit[] = {
  1,  C_SWRESET,
  IDELAY(6),
  6,  C_POWERA,    0x39, 0x2C, 0x00, 0x34, 0x02,
  4,  C_POWERB,    0x00, 0xC1, 0x30,
  4,  C_DTCA,      0x85, 0x00, 0x78,
  3,  C_DTCB,      0x00, 0x00,
  5,  C_POWER_SEQ, 0x64, 0x03, 0x12, 0x81,
  2,  C_PRC,       2 << 4,            //Pump ratio control
  2,  C_PWCTRL1,   0x23,              //Power controlVR: H[5:0]
  2,  C_PWCTRL2,   0x10,              //Power control: SAP[2:0];BT[3:0]
  3,  C_VMCTRL1,   VMH, VML,          //VCM control
  2,  C_VMCTRL2,   VMF | B7,          //VCM control2
  2,  C_MADCTL,                       //Memory Access Control: BIT_GRB | BIT_MV | BIT_MX | BIT_MY
      B3 | B5 | (B6 | B7) * LCD_ORIENT,
  2,  C_PIXSET,    5 | 5 << 4,        //COLMOD: Pixel Format Set
  3,  C_FRMCTR1,   0x00, 0x18,
  4,  C_DISCTRL,   0x0A, 0x82, 0x27,  //Display Function Control
  4,  C_IFCTL,     B0, 1 << 4, 0x00,  //Interface Control
  2,  C_ENABLE_3G, 0x00,              //3Gamma Function Disable
  2,  C_GAMSET,    0x01,              //Gamma curve selected
  16, C_PGAMCTRL,  0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E, 0xF1, //Set Gamma
                   0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00,
  16, C_NGAMCTRL,  0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31, 0xC1, //Set Gamma
                   0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F,
  1,  C_SLPOUT,
  IDELAY(121),

  5,  C_CASET,     0x00, 0x00, 0x01, 0x3F,
  5,  C_PASET,     0x00, 0x00, 0x00, 0xEF,
  1,  C_DISPON,
  0
};

 

Каждая строка lcdInit - команда. Первый байт - длина команды, 2-й - код команды. IDELAY() - задержка в мс.

Так у вас LCD_SPIConfig есть? У этого LCD  SPI есть?

Вот конфигурация из примера

Spoiler

void LCD_Config(void)
{
    LTDC_InitTypeDef               LTDC_InitStruct;
    LTDC_Layer_InitTypeDef         LTDC_Layer_InitStruct;
    GPIO_InitTypeDef               GPIO_InitStructure;
  
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  
    /* Configure NCS in Output Push-Pull mode */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
  
    /* Configure the LCD Control pins ------------------------------------------*/
    LCD_CtrlLinesConfig();
    LCD_ChipSelect(DISABLE);
    LCD_ChipSelect(ENABLE);
  
    /* Configure the LCD_SPI interface -----------------------------------------*/
    LCD_SPIConfig(); 
  
    /* Power on the LCD --------------------------------------------------------*/
    LCD_PowerOn();
  
    /* Enable the LTDC Clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_LTDC, ENABLE);
  
    /* Enable the DMA2D Clock */
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2D, ENABLE); 
  
    /* Configure the LCD Control pins */
    LCD_AF_GPIOConfig();  
  
    /* Configure the FMC Parallel interface : SDRAM is used as Frame Buffer for LCD */
    SDRAM_Init();
  
    /* Enable Pixel Clock ------------------------------------------------------*/
  
    /* Configure PLLSAI prescalers for LCD */
    /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */
    /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAI_N = 192 Mhz */
    /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAI_R = 192/3 = 64 Mhz */
    /* LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDivR = 64/8 = 8 Mhz */
    RCC_PLLSAIConfig(192, 7, 3);
    RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8);
  
  /* Enable PLLSAI Clock */
  RCC_PLLSAICmd(ENABLE);
  /* Wait for PLLSAI activation */
  while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET)
  {
  }
  
  /* LTDC Initialization -----------------------------------------------------*/
  
  /* Initialize the horizontal synchronization polarity as active low*/
  LTDC_InitStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL;     
  /* Initialize the vertical synchronization polarity as active low */  
  LTDC_InitStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL;     
  /* Initialize the data enable polarity as active low */ 
  LTDC_InitStruct.LTDC_DEPolarity = LTDC_DEPolarity_AL;     
  /* Initialize the pixel clock polarity as input pixel clock */ 
  LTDC_InitStruct.LTDC_PCPolarity = LTDC_PCPolarity_IPC;
  
  /* Timing configuration */
  /* Configure horizontal synchronization width */     
  LTDC_InitStruct.LTDC_HorizontalSync = 9;
  /* Configure vertical synchronization height */
  LTDC_InitStruct.LTDC_VerticalSync = 1;
  /* Configure accumulated horizontal back porch */
  LTDC_InitStruct.LTDC_AccumulatedHBP = 29; 
  /* Configure accumulated vertical back porch */
  LTDC_InitStruct.LTDC_AccumulatedVBP = 3;  
  /* Configure accumulated active width */  
  LTDC_InitStruct.LTDC_AccumulatedActiveW = 269;
  /* Configure accumulated active height */
  LTDC_InitStruct.LTDC_AccumulatedActiveH = 323;
  /* Configure total width */
  LTDC_InitStruct.LTDC_TotalWidth = 279; 
  /* Configure total height */
  LTDC_InitStruct.LTDC_TotalHeigh = 327;
  
   /* Configure R,G,B component values for LCD background color */                   
  LTDC_InitStruct.LTDC_BackgroundRedValue = 0;            
  LTDC_InitStruct.LTDC_BackgroundGreenValue = 0;          
  LTDC_InitStruct.LTDC_BackgroundBlueValue = 0; 
  
  LTDC_Init(&LTDC_InitStruct);
  
  /* LTDC initialization end -------------------------------------------------*/
  
  /* Layer1 Configuration ----------------------------------------------------*/  
  
  /* Windowing configuration */ 
  /* In this case all the active display area is used to display a picture then:
  Horizontal start = horizontal synchronization + Horizontal back porch = 30 
  Horizontal stop = Horizontal start + window width -1 = 30 + 240 -1
  Vertical start   = vertical synchronization + vertical back porch     = 4
  Vertical stop   = Vertical start + window height -1  = 4 + 160 -1      */ 
  LTDC_Layer_InitStruct.LTDC_HorizontalStart = 30;
  LTDC_Layer_InitStruct.LTDC_HorizontalStop = (240 + 30 - 1); 
  LTDC_Layer_InitStruct.LTDC_VerticalStart = 4;
  LTDC_Layer_InitStruct.LTDC_VerticalStop = 160 + 4 -1; 
  
  /* Pixel Format configuration*/           
  LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_RGB565;
  
  /* Alpha constant (255 totally opaque) */
  LTDC_Layer_InitStruct.LTDC_ConstantAlpha = 255; 
  
  /* Configure blending factors */       
  LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_PAxCA;    
  LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_PAxCA;  
  
  /* Default Color configuration (configure A,R,G,B component values) */          
  LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 0;        
  LTDC_Layer_InitStruct.LTDC_DefaultColorGreen = 0;       
  LTDC_Layer_InitStruct.LTDC_DefaultColorRed = 0;         
  LTDC_Layer_InitStruct.LTDC_DefaultColorAlpha = 0;   
  
  /* Input Address configuration */    
  LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (uint32_t)&ST_LOGO_1;
  
  /* the length of one line of pixels in bytes + 3 then :
  Line Lenth = Active high width x number of bytes per pixel + 3 
  Active high width         = 240 
  number of bytes per pixel = 2    (pixel_format : RGB565) 
  */
  LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((240 * 2) + 3);
  
  /*  the pitch is the increment from the start of one line of pixels to the 
  start of the next line in bytes, then :
  Pitch = Active high width x number of bytes per pixel     
  */
  LTDC_Layer_InitStruct.LTDC_CFBPitch = (240 * 2);  
  
  /* configure the number of lines */
  LTDC_Layer_InitStruct.LTDC_CFBLineNumber = 160;
  
  LTDC_LayerInit(LTDC_Layer1, &LTDC_Layer_InitStruct);
  
  /* Layer1 Configuration end ------------------------------------------------*/
  
  /* Layer2 Configuration ----------------------------------------------------*/
  
  /* Windowing configuration */ 
  /* In this case only 320x240 window of the active display area is used 
  to display a picture then :
  Horizontal start = horizontal sync + offset_x + Horizontal back porch = 30
  Horizontal stop = Horizontal start + offset_x + window width -1 = 30 + 240 -1 
  Vertical start  = vertical sync + offset_y + vertical back porch  = 160 + 4
  Vertical stop  = Vertical start + offset_y + window height -1  = 4 + 320 -1 */  
  LTDC_Layer_InitStruct.LTDC_HorizontalStart = 30;
  LTDC_Layer_InitStruct.LTDC_HorizontalStop = (240 + 30 - 1); 
  LTDC_Layer_InitStruct.LTDC_VerticalStart = 160 + 4;
  LTDC_Layer_InitStruct.LTDC_VerticalStop = (320 + 4 - 1);
  
  /* Pixel Format configuration */           
  LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_RGB565;
  
  /* Alpha constant configuration : The constant alpha for layer 2 is decreased 
  to see the layer 1 in the intersection zone*/
  LTDC_Layer_InitStruct.LTDC_ConstantAlpha = 255;
  
  /* Default Color configuration (configure A,R,G,B component values) */           
  LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 0;        
  LTDC_Layer_InitStruct.LTDC_DefaultColorGreen = 0;       
  LTDC_Layer_InitStruct.LTDC_DefaultColorRed = 0;         
  LTDC_Layer_InitStruct.LTDC_DefaultColorAlpha = 0;
  
  /* blending Factors */    
  LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_PAxCA;    
  LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_PAxCA;
  
  /* Configure Input Address : frame buffer is located at FLASH memory */    
  LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (uint32_t)&ST_LOGO_2;
  
  /* the length of one line of pixels in bytes + 3 then :
  Line Lenth = Active high width x number of bytes per pixel + 3 
  Active high width         = 240 
  number of bytes per pixel = 2    (pixel_format : RGB565)   */
  
  LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((240 * 2) + 3); 
  LTDC_Layer_InitStruct.LTDC_CFBPitch = (240 * 2);
  
  /*  the pitch is the increment from the start of one line of pixels to the 
  start of the next line in bytes, then :
  Pitch = Active high width x number of bytes per pixel     
  */
  LTDC_Layer_InitStruct.LTDC_CFBLineNumber = 160; 
  
  /* Initialize the Layer 2 */
  LTDC_LayerInit(LTDC_Layer2, &LTDC_Layer_InitStruct);
  
  /* Layer2 Configuration end ------------------------------------------------*/
    LTDC_DitherCmd(ENABLE);
}

 

 

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, jenya7 сказал:

Так у вас LCD_SPIConfig есть?

Такой функции нет. Примерами не пользуюсь.

5 минут назад, jenya7 сказал:

У этотго LCD  SPI есть?

Ищите, Шура, ищите...  :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Залез в проект...

SPI:
    PF7    - SCLK
    PF8    - MISO
    PF9    - MOSI

CHIP SELECTS:
    PC1 - L3GD20 (on board)
    PC2 - TFT LCD (on board)
 

Вот этими ногами все управляется. В процессоре к PF7/PF8/PF9 можно подключить SPI5.

 

Можно по SPI формировать изображение или перевести в RGB режим и обновлять из памяти по LTDC.

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, GenaSPB said:

Залез в проект...

SPI:
    PF7    - SCLK
    PF8    - MISO
    PF9    - MOSI

CHIP SELECTS:
    PC1 - L3GD20 (on board)
    PC2 - TFT LCD (on board)
 

Вот этими ногами все управляется. В процессоре к PF7/PF8/PF9 можно подключить SPI5.

 

Можно по SPI формировать изображение или перевести в RGB режим и обновлять из памяти по LTDC.

 

спасибо. вроде все сходиться. буду искать почему SPI затыкается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а у кого есть рабочий SetSysClock() ?

Я падаю на

if (HSEStatus == (uint32_t)0x01)
{
       /////////////////////////////
       /////////////////////////////
}
else
  { /* If HSE fails to start-up, the application will have wrong clock
         configuration. User can add here some code to deal with this error */
      error = 1;
  }

попадаю в else

мои настройки

#define HSE_VALUE   ((uint32_t)8000000)
#define PLL_M      8
#define PLL_Q      7
#define PLL_N      360
#define PLL_P      2

похоже дело не доходит до настроек, я падаю в самом начале

/* Enable HSE */
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);
 
  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

 

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кто то работал с LCD на этой плате?

хочу высветить строку

LCD_DisplayStringLine(1, (uint8_t *)"TEST!");

Падаю в HardFault_Handler внутри функции на

 LCD_DisplayChar(Line, refcolumn, *ptr);

даже внутрь функции зайти не могу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Arlleex said:

SDRAM проинициализирована? Шрифт установлен (LCD_SetFont())?

точно. спасибо. нужно шрифт установить

LCD_SetFont(&Font8x8);

но у меня темный экран почему то. хотя я включил леер.

 /* Enable Layer 1 */
 LTDC_LayerCmd(LTDC_Layer1, ENABLE);

/* Enable The LCD */
  LTDC_Cmd(ENABLE);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...