Reduce display startup time
This commit is contained in:
		@ -1,6 +1,7 @@
 | 
			
		||||
#include "hx8357d.h"
 | 
			
		||||
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "shorttimer.h"
 | 
			
		||||
 | 
			
		||||
void HX8357D_WriteData(uint8_t *data, size_t data_len) {
 | 
			
		||||
  for (size_t byte = 0; byte < data_len; byte++) {
 | 
			
		||||
@ -9,9 +10,9 @@ void HX8357D_WriteData(uint8_t *data, size_t data_len) {
 | 
			
		||||
          ((data[byte] >> (7 - bit)) & 1) ? GPIO_PIN_SET : GPIO_PIN_RESET;
 | 
			
		||||
      HAL_GPIO_WritePin(DISPSPI_SCL_GPIO_Port, DISPSPI_SCL_Pin, GPIO_PIN_RESET);
 | 
			
		||||
      HAL_GPIO_WritePin(DISPSPI_SDA_GPIO_Port, DISPSPI_SDA_Pin, state);
 | 
			
		||||
      HAL_Delay(1);
 | 
			
		||||
      shorttimer_sleep(1);
 | 
			
		||||
      HAL_GPIO_WritePin(DISPSPI_SCL_GPIO_Port, DISPSPI_SCL_Pin, GPIO_PIN_SET);
 | 
			
		||||
      HAL_Delay(1);
 | 
			
		||||
      shorttimer_sleep(1);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -19,11 +20,11 @@ void HX8357D_WriteData(uint8_t *data, size_t data_len) {
 | 
			
		||||
void HX8357D_WriteReg(uint8_t addr, uint8_t *data, size_t data_len) {
 | 
			
		||||
  HAL_GPIO_WritePin(DISPSPI_CSX_GPIO_Port, DISPSPI_CSX_Pin, GPIO_PIN_RESET);
 | 
			
		||||
  HAL_GPIO_WritePin(DISPSPI_DCX_GPIO_Port, DISPSPI_DCX_Pin, GPIO_PIN_RESET);
 | 
			
		||||
  HAL_Delay(1);
 | 
			
		||||
  shorttimer_sleep(1);
 | 
			
		||||
 | 
			
		||||
  HX8357D_WriteData(&addr, 1);
 | 
			
		||||
  HAL_GPIO_WritePin(DISPSPI_DCX_GPIO_Port, DISPSPI_DCX_Pin, GPIO_PIN_SET);
 | 
			
		||||
  HAL_Delay(1);
 | 
			
		||||
  shorttimer_sleep(1);
 | 
			
		||||
 | 
			
		||||
  if (data_len > 0) {
 | 
			
		||||
    HX8357D_WriteData(data, data_len);
 | 
			
		||||
 | 
			
		||||
@ -26,6 +26,8 @@
 | 
			
		||||
#include "ft_logo_orange_rgb565.h"
 | 
			
		||||
#include "ft_logo_rainbow_rgb565.h"
 | 
			
		||||
#include "hx8357d.h"
 | 
			
		||||
#include "shorttimer.h"
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
@ -63,8 +65,10 @@ SPI_HandleTypeDef hspi3;
 | 
			
		||||
TIM_HandleTypeDef htim1;
 | 
			
		||||
TIM_HandleTypeDef htim2;
 | 
			
		||||
TIM_HandleTypeDef htim4;
 | 
			
		||||
TIM_HandleTypeDef htim17;
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN PV */
 | 
			
		||||
TIM_HandleTypeDef *htim_us = &htim17;
 | 
			
		||||
volatile int ltdc_cb_triggered;
 | 
			
		||||
/* USER CODE END PV */
 | 
			
		||||
 | 
			
		||||
@ -81,6 +85,7 @@ static void MX_TIM1_Init(void);
 | 
			
		||||
static void MX_TIM2_Init(void);
 | 
			
		||||
static void MX_TIM4_Init(void);
 | 
			
		||||
static void MX_CRC_Init(void);
 | 
			
		||||
static void MX_TIM17_Init(void);
 | 
			
		||||
/* USER CODE BEGIN PFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PFP */
 | 
			
		||||
@ -128,14 +133,17 @@ int main(void) {
 | 
			
		||||
  MX_TIM2_Init();
 | 
			
		||||
  MX_TIM4_Init();
 | 
			
		||||
  MX_CRC_Init();
 | 
			
		||||
  MX_TIM17_Init();
 | 
			
		||||
  /* Call PreOsInit function */
 | 
			
		||||
  MX_TouchGFX_PreOSInit();
 | 
			
		||||
  /* USER CODE BEGIN 2 */
 | 
			
		||||
  if (HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4) != HAL_OK) {
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
  }
 | 
			
		||||
  shorttimer_init(htim_us);
 | 
			
		||||
 | 
			
		||||
  HX8357D_Init();
 | 
			
		||||
 | 
			
		||||
  HX8357D_Mode_RGB666();
 | 
			
		||||
  /* USER CODE END 2 */
 | 
			
		||||
 | 
			
		||||
@ -678,6 +686,35 @@ static void MX_TIM4_Init(void) {
 | 
			
		||||
  HAL_TIM_MspPostInit(&htim4);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief TIM17 Initialization Function
 | 
			
		||||
 * @param None
 | 
			
		||||
 * @retval None
 | 
			
		||||
 */
 | 
			
		||||
static void MX_TIM17_Init(void) {
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN TIM17_Init 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM17_Init 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN TIM17_Init 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM17_Init 1 */
 | 
			
		||||
  htim17.Instance = TIM17;
 | 
			
		||||
  htim17.Init.Prescaler = 16 - 1;
 | 
			
		||||
  htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
 | 
			
		||||
  htim17.Init.Period = 1000 - 1;
 | 
			
		||||
  htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 | 
			
		||||
  htim17.Init.RepetitionCounter = 0;
 | 
			
		||||
  htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
 | 
			
		||||
  if (HAL_TIM_Base_Init(&htim17) != HAL_OK) {
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE BEGIN TIM17_Init 2 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM17_Init 2 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief GPIO Initialization Function
 | 
			
		||||
 * @param None
 | 
			
		||||
@ -772,7 +809,10 @@ static void MX_GPIO_Init(void) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 4 */
 | 
			
		||||
 | 
			
		||||
// Ugly hack to ensure HAL_TIM_PeriodElapsedCallback() is called
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
/* USER CODE END 4 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -791,7 +831,9 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
 | 
			
		||||
    HAL_IncTick();
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE BEGIN Callback 1 */
 | 
			
		||||
 | 
			
		||||
  if (htim->Instance == htim_us->Instance) {
 | 
			
		||||
    shorttimer_callback();
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE END Callback 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -805,6 +847,13 @@ void Error_Handler(void) {
 | 
			
		||||
  __disable_irq();
 | 
			
		||||
  while (1) {
 | 
			
		||||
  }
 | 
			
		||||
  // Ugly hack to ensure HAL_TIM_PeriodElapsedCallback() is called
 | 
			
		||||
}
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
void _damnyoucubemx() {
 | 
			
		||||
  ;
 | 
			
		||||
  /* USER CODE END Error_Handler_Debug */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										29
									
								
								Core/Src/shorttimer.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								Core/Src/shorttimer.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
			
		||||
#include "shorttimer.h"
 | 
			
		||||
 | 
			
		||||
#include "stm32h7xx_hal.h"
 | 
			
		||||
#include "stm32h7xx_hal_tim.h"
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
static TIM_HandleTypeDef *htim;
 | 
			
		||||
static uint32_t ticks;
 | 
			
		||||
 | 
			
		||||
void shorttimer_init(TIM_HandleTypeDef *handle) {
 | 
			
		||||
  htim = handle;
 | 
			
		||||
  ticks = 0;
 | 
			
		||||
  HAL_TIM_Base_Start_IT(htim);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t shorttimer_gettick(void) { return ticks; }
 | 
			
		||||
 | 
			
		||||
void shorttimer_sleep(uint32_t microseconds) {
 | 
			
		||||
  volatile uint32_t start = shorttimer_gettick();
 | 
			
		||||
  // Add another tick to guarantee a minimum wait
 | 
			
		||||
  if (microseconds < UINT32_MAX) {
 | 
			
		||||
    microseconds++;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  while (shorttimer_gettick() - start < microseconds) {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void shorttimer_callback() { ticks++; }
 | 
			
		||||
@ -714,6 +714,20 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM2_MspInit 1 */
 | 
			
		||||
  }
 | 
			
		||||
  else if(htim_base->Instance==TIM17)
 | 
			
		||||
  {
 | 
			
		||||
  /* USER CODE BEGIN TIM17_MspInit 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM17_MspInit 0 */
 | 
			
		||||
    /* Peripheral clock enable */
 | 
			
		||||
    __HAL_RCC_TIM17_CLK_ENABLE();
 | 
			
		||||
    /* TIM17 interrupt Init */
 | 
			
		||||
    HAL_NVIC_SetPriority(TIM17_IRQn, 0, 0);
 | 
			
		||||
    HAL_NVIC_EnableIRQ(TIM17_IRQn);
 | 
			
		||||
  /* USER CODE BEGIN TIM17_MspInit 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM17_MspInit 1 */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -839,6 +853,20 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM2_MspDeInit 1 */
 | 
			
		||||
  }
 | 
			
		||||
  else if(htim_base->Instance==TIM17)
 | 
			
		||||
  {
 | 
			
		||||
  /* USER CODE BEGIN TIM17_MspDeInit 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM17_MspDeInit 0 */
 | 
			
		||||
    /* Peripheral clock disable */
 | 
			
		||||
    __HAL_RCC_TIM17_CLK_DISABLE();
 | 
			
		||||
 | 
			
		||||
    /* TIM17 interrupt DeInit */
 | 
			
		||||
    HAL_NVIC_DisableIRQ(TIM17_IRQn);
 | 
			
		||||
  /* USER CODE BEGIN TIM17_MspDeInit 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM17_MspDeInit 1 */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -57,6 +57,7 @@
 | 
			
		||||
/* External variables --------------------------------------------------------*/
 | 
			
		||||
extern FDCAN_HandleTypeDef hfdcan1;
 | 
			
		||||
extern LTDC_HandleTypeDef hltdc;
 | 
			
		||||
extern TIM_HandleTypeDef htim17;
 | 
			
		||||
extern TIM_HandleTypeDef htim6;
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN EV */
 | 
			
		||||
@ -260,6 +261,20 @@ void LTDC_IRQHandler(void)
 | 
			
		||||
  /* USER CODE END LTDC_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles TIM17 global interrupt.
 | 
			
		||||
  */
 | 
			
		||||
void TIM17_IRQHandler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* USER CODE BEGIN TIM17_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM17_IRQn 0 */
 | 
			
		||||
  HAL_TIM_IRQHandler(&htim17);
 | 
			
		||||
  /* USER CODE BEGIN TIM17_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END TIM17_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 1 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 1 */
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user