Display works

This commit is contained in:
Dylan Smith
2026-01-08 10:53:13 -05:00
parent 5e118e7639
commit caee1f3778
4 changed files with 302 additions and 19 deletions

View File

@@ -20,8 +20,7 @@
#include "main.h"
#include "cmsis_os.h"
#include "stm32f4xx_hal_ltdc.h"
#include "stm32f4xx_hal_sdram.h"
#include "stm32f4xx_ll_fmc.h"
#include "stm32f4xx_hal_spi.h"
#include "usb_host.h"
/* Private includes ----------------------------------------------------------*/
@@ -88,6 +87,166 @@ void StartDefaultTask(void const * argument);
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void LCD_Write_Cmd(uint8_t cmd)
{
LCD_CS_LOW();
LCD_DC_LOW();
HAL_SPI_Transmit(&hspi5, &cmd, 1, 1000);
LCD_CS_HIGH();
}
void LCD_Write_Data (uint8_t data)
{
LCD_CS_LOW();
LCD_DC_HIGH();
HAL_SPI_Transmit(&hspi5, &data, 1, 1000);
LCD_CS_HIGH();
}
//initialize the tft
void ILI9341_Init(void)
{
LCD_RES_LOW();
osDelay(50);
LCD_RES_HIGH();
osDelay(20);
LCD_Write_Cmd(ILI9341_SWRESET);
osDelay(10);
LCD_Write_Cmd(ILI9341_POWERB);
osDelay(10);
LCD_Write_Data(0x00);;
LCD_Write_Data(0xD9);
LCD_Write_Data(0x30);
LCD_Write_Cmd(ILI9341_POWER_SEQ);
LCD_Write_Data(0x64);
LCD_Write_Data(0x03);
LCD_Write_Data(0X12);
LCD_Write_Data(0X81);
LCD_Write_Cmd(ILI9341_DTCA);
LCD_Write_Data(0x85);
LCD_Write_Data(0x10);
LCD_Write_Data(0x7A);
LCD_Write_Cmd(ILI9341_POWERA);
LCD_Write_Data(0x39);
LCD_Write_Data(0x2C);
LCD_Write_Data(0x00);
LCD_Write_Data(0x34);
LCD_Write_Data(0x02);
LCD_Write_Cmd(ILI9341_PRC);
LCD_Write_Data(0x20);
LCD_Write_Cmd(ILI9341_DTCB);
LCD_Write_Data(0x00);
LCD_Write_Data(0x00);
LCD_Write_Cmd(ILI9341_POWER1);
LCD_Write_Data(0x1B);
LCD_Write_Cmd(ILI9341_POWER2);
LCD_Write_Data(0x12);
LCD_Write_Cmd(ILI9341_VCOM1);
LCD_Write_Data(0x08);
LCD_Write_Data(0x26);
LCD_Write_Cmd(ILI9341_VCOM2);
LCD_Write_Data(0XB7);
LCD_Write_Cmd(ILI9341_PIXEL_FORMAT);
LCD_Write_Data(0x55); //select RGB565
LCD_Write_Cmd(ILI9341_FRMCTR1);
LCD_Write_Data(0x00);
LCD_Write_Data(0x1B);//frame rate = 70
LCD_Write_Cmd(ILI9341_DFC); // Display Function Control
LCD_Write_Data(0x0A);
LCD_Write_Data(0xA2);
LCD_Write_Cmd(ILI9341_3GAMMA_EN); // 3Gamma Function Disable
LCD_Write_Data(0x02);
LCD_Write_Cmd(ILI9341_GAMMA);
LCD_Write_Data(0x01);
LCD_Write_Cmd(ILI9341_PGAMMA); //Set Gamma
LCD_Write_Data(0x0F);
LCD_Write_Data(0x1D);
LCD_Write_Data(0x1A);
LCD_Write_Data(0x0A);
LCD_Write_Data(0x0D);
LCD_Write_Data(0x07);
LCD_Write_Data(0x49);
LCD_Write_Data(0X66);
LCD_Write_Data(0x3B);
LCD_Write_Data(0x07);
LCD_Write_Data(0x11);
LCD_Write_Data(0x01);
LCD_Write_Data(0x09);
LCD_Write_Data(0x05);
LCD_Write_Data(0x04);
LCD_Write_Cmd(ILI9341_NGAMMA);
LCD_Write_Data(0x00);
LCD_Write_Data(0x18);
LCD_Write_Data(0x1D);
LCD_Write_Data(0x02);
LCD_Write_Data(0x0F);
LCD_Write_Data(0x04);
LCD_Write_Data(0x36);
LCD_Write_Data(0x13);
LCD_Write_Data(0x4C);
LCD_Write_Data(0x07);
LCD_Write_Data(0x13);
LCD_Write_Data(0x0F);
LCD_Write_Data(0x2E);
LCD_Write_Data(0x2F);
LCD_Write_Data(0x05);
LCD_Write_Cmd(ILI9341_RGB_INTERFACE);
LCD_Write_Data(0xC2); //Data is fetched during falling edge of DOTCLK
LCD_Write_Cmd(ILI9341_INTERFACE);
LCD_Write_Data(0x01);
LCD_Write_Data(0x00);
LCD_Write_Data(0x06);
LCD_Write_Cmd(ILI9341_MAC); // Memory Access Control command
LCD_Write_Data(MADCTL_BGR);
LCD_Write_Cmd(ILI9341_SLEEP_OUT); //Exit Sleep
osDelay(100);
LCD_Write_Cmd(ILI9341_DISPLAY_ON); //display on
osDelay(100);
}
/* USER CODE END 0 */
/**
@@ -193,7 +352,7 @@ void SystemClock_Config(void)
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 4;
RCC_OscInitStruct.PLL.PLLM = 16;
RCC_OscInitStruct.PLL.PLLN = 72;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 3;
@@ -385,7 +544,10 @@ static void MX_LTDC_Init(void)
Error_Handler();
}
/* USER CODE BEGIN LTDC_Init 2 */
/* Enable Layer 1 */
__HAL_LTDC_LAYER_ENABLE(&hltdc, 0);
/* Reload configuration immediately */
__HAL_LTDC_RELOAD_IMMEDIATE_CONFIG(&hltdc);
/* USER CODE END LTDC_Init 2 */
}
@@ -694,17 +856,17 @@ static void MX_GPIO_Init(void)
void StartDefaultTask(void const * argument)
{
/* init code for USB_HOST */
MX_USB_HOST_Init();
/* USER CODE BEGIN 5 */
times_changed = 0;
ILI9341_Init();
/* Infinite loop */
for(;;)
{
DisplayTest(0xffff);
HAL_LTDC_Reload(&hltdc, LTDC_RELOAD_IMMEDIATE);
osDelay(500);
DisplayTest(0x0000);
HAL_LTDC_Reload(&hltdc, LTDC_RELOAD_IMMEDIATE);
osDelay(500);
}
/* USER CODE END 5 */

View File

@@ -271,9 +271,9 @@ void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc)
/** Initializes the peripherals clock
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
PeriphClkInitStruct.PLLSAI.PLLSAIN = 50;
PeriphClkInitStruct.PLLSAI.PLLSAIR = 2;
PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2;
PeriphClkInitStruct.PLLSAI.PLLSAIN = 192;
PeriphClkInitStruct.PLLSAI.PLLSAIR = 4;
PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_16;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();