/*====================================================================================================*/ void ILI9341_Config( void ) { GPIO_InitTypeDef GPIO_InitStruct; SPI_InitTypeDef SPI_InitStruct; /* SPI Clk Init *************************************************************/ RCC_APB1PeriphClockCmd(LCD_SPIx_CLK, ENABLE); RCC_APB2PeriphClockCmd(LCD_RST_GPIO_CLK | LCD_CST_GPIO_CLK | LCD_DC_GPIO_CLK | LCD_SCK_GPIO_CLK | LCD_SDO_GPIO_CLK | LCD_SDI_GPIO_CLK | RCC_APB2Periph_AFIO, ENABLE); ILI9341_LigConfig(); /* DC PB10 */ GPIO_InitStruct.GPIO_Pin = LCD_DC_PIN; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(LCD_DC_GPIO_PORT, &GPIO_InitStruct); /* RST PB11 */ GPIO_InitStruct.GPIO_Pin = LCD_RST_PIN; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(LCD_RST_GPIO_PORT, &GPIO_InitStruct); /* CST PB12 */ GPIO_InitStruct.GPIO_Pin = LCD_CST_PIN; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(LCD_CST_GPIO_PORT, &GPIO_InitStruct); /* SCK PB13 */ GPIO_InitStruct.GPIO_Pin = LCD_SCK_PIN; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(LCD_SCK_GPIO_PORT, &GPIO_InitStruct); /* SDO PB14 */ GPIO_InitStruct.GPIO_Pin = LCD_SDO_PIN; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(LCD_SDO_GPIO_PORT, &GPIO_InitStruct); /* SDI PB15 */ GPIO_InitStruct.GPIO_Pin = LCD_SDI_PIN; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(LCD_SDI_GPIO_PORT, &GPIO_InitStruct); LCD_CST_H; // 低電位有效 /* SPI Init ****************************************************************/ SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // Full Duplex SPI_InitStruct.SPI_Mode = SPI_Mode_Master; // Master Mode SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; // Data Size 8 bit SPI_InitStruct.SPI_CPOL = SPI_CPOL_High; // Transitioned On The Falling Edge SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge; // Latched On the Rising Edge SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; // Software NSS Signal SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; // fsck = APB1 36MHz / 2 = 18MHz SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB; // MSB First SPI_InitStruct.SPI_CRCPolynomial = 7; SPI_Init(LCD_SPIx, &SPI_InitStruct); SPI_Cmd(LCD_SPIx, ENABLE); }
/*====================================================================================================*/ void ILI9341_Config( void ) { GPIO_InitTypeDef GPIO_InitStruct; SPI_InitTypeDef SPI_InitStruct; /* SPI Clk ******************************************************************/ LCD_SPIx_CLK_ENABLE(); /* SPI AF *******************************************************************/ GPIO_PinAFConfig(LCD_SCK_GPIO_PORT, LCD_SCK_SOURCE, LCD_SCK_AF); GPIO_PinAFConfig(LCD_SDO_GPIO_PORT, LCD_SDO_SOURCE, LCD_SDO_AF); GPIO_PinAFConfig(LCD_SDI_GPIO_PORT, LCD_SDI_SOURCE, LCD_SDI_AF); /* SPI Pin ******************************************************************/ GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Pin = LCD_DC_PIN; GPIO_Init(LCD_DC_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = LCD_RST_PIN; GPIO_Init(LCD_RST_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = LCD_CST_PIN; GPIO_Init(LCD_CST_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Pin = LCD_SCK_PIN; GPIO_Init(LCD_SCK_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = LCD_SDO_PIN; GPIO_Init(LCD_SDO_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = LCD_SDI_PIN; GPIO_Init(LCD_SDI_GPIO_PORT, &GPIO_InitStruct); LCD_CST_H(); // LOW ENABLE /* SPI Init ****************************************************************/ SPI_InitStruct.SPI_Mode = SPI_Mode_Master; SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; SPI_InitStruct.SPI_CPOL = SPI_CPOL_High; SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStruct.SPI_CRCPolynomial = 7; SPI_Init(LCD_SPIx, &SPI_InitStruct); SPI_Cmd(LCD_SPIx, ENABLE); ILI9341_LigConfig(); }
/*====================================================================================================*/ void ILI9341_Config( void ) { GPIO_InitTypeDef GPIO_InitStruct; /* SPI Clk ******************************************************************/ LCD_DC_GPIO_CLK_ENABLE(); LCD_RST_GPIO_CLK_ENABLE(); LCD_CST_GPIO_CLK_ENABLE(); LCD_SCK_GPIO_CLK_ENABLE(); LCD_SDO_GPIO_CLK_ENABLE(); LCD_SDI_GPIO_CLK_ENABLE(); LCD_SPIx_CLK_ENABLE(); ILI9341_LigConfig(); /* SPI Pin ******************************************************************/ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Pin = LCD_DC_PIN; HAL_GPIO_Init(LCD_DC_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.Pin = LCD_RST_PIN; HAL_GPIO_Init(LCD_RST_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.Pin = LCD_CST_PIN; HAL_GPIO_Init(LCD_CST_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Pin = LCD_SCK_PIN; GPIO_InitStruct.Alternate = LCD_SCK_AF; HAL_GPIO_Init(LCD_SCK_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.Pin = LCD_SDO_PIN; GPIO_InitStruct.Alternate = LCD_SDO_AF; HAL_GPIO_Init(LCD_SDO_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.Pin = LCD_SDI_PIN; GPIO_InitStruct.Alternate = LCD_SDI_AF; HAL_GPIO_Init(LCD_SDI_GPIO_PORT, &GPIO_InitStruct); LCD_CST_H; // 低電位有效 /* SPI Init ****************************************************************/ SPI_HandleStruct.Instance = LCD_SPIx; SPI_HandleStruct.Init.Mode = SPI_MODE_MASTER; SPI_HandleStruct.Init.Direction = SPI_DIRECTION_2LINES; SPI_HandleStruct.Init.DataSize = SPI_DATASIZE_8BIT; SPI_HandleStruct.Init.CLKPolarity = SPI_POLARITY_HIGH; SPI_HandleStruct.Init.CLKPhase = SPI_PHASE_2EDGE; SPI_HandleStruct.Init.NSS = SPI_NSS_SOFT; SPI_HandleStruct.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; SPI_HandleStruct.Init.FirstBit = SPI_FIRSTBIT_MSB; SPI_HandleStruct.Init.TIMode = SPI_TIMODE_DISABLE; SPI_HandleStruct.Init.CRCCalculation = SPI_CRCCALCULATION_ENABLE; SPI_HandleStruct.Init.CRCPolynomial = 7; HAL_SPI_Init(&SPI_HandleStruct); __HAL_SPI_ENABLE(&SPI_HandleStruct); }