【STM32H743IIT6 系列】通過 LTDC接口驅動的 TFTLCD(RGB屏)顯示
引言
SDRAM 配置
在開始此篇文章之前,首先要把 SDRAM 配置好,可以看我的上一篇文章:
沒有將 SDRAM 作為內部 RAM 使用的朋友可以選擇性看上面這篇文章。
屏幕
這里我使用的是正點原子的 800 * 480的 4.3寸 RGBLCD 屏幕,如下圖所示:

CubeMX配置
時鐘配置
可見最大時鐘可以給到 50MHz,我們這里就給到 50MHz。


引腳配置
首先要注意的就是 MCU 引腳對應屏幕接口的 LTDC 引腳是否正確,我使用的是反客的 H743,下面是引腳對應圖:
(還有 LTDC_BL 背光引腳需要我們自己定義,設置為高電平開漏輸出上拉模式即可)

LTDC 配置
為了節省資源,我們使用的是 RGB565 模式:

Parameter Settings

Layer Settings

NVIC Settings

測試代碼
點擊查看代碼
/* USER CODE BEGIN 0 */
uint16_t* fb_addr = (uint16_t*)((uint32_t)0xC0000000);
void LTDC_LCD_Fill(uint16_t* fb, uint16_t color, uint32_t length)
{
uint16_t* tmp_fb = fb;
for (uint32_t i = 0; i < length; i++) {
*(tmp_fb + i) = color;
}
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MPU Configuration--------------------------------------------------------*/
MPU_Config();
/* Enable the CPU Cache */
/* Enable I-Cache---------------------------------------------------------*/
SCB_EnableICache();
/* Enable D-Cache---------------------------------------------------------*/
SCB_EnableDCache();
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_FMC_Init();
MX_LTDC_Init();
/* USER CODE BEGIN 2 */
Set_Current_USART(USART1_IDX);
printf("SDRAM 初始化通過!\r\n");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
SCB_CleanInvalidateDCache();
while (!(LTDC->CDSR & LTDC_CDSR_VSYNCS));
LTDC_LCD_Fill(fb_addr, (uint16_t)0xF800, (uint32_t)480 * 800 * 2);
HAL_Delay(100);
SCB_CleanInvalidateDCache();
while (!(LTDC->CDSR & LTDC_CDSR_VSYNCS));
LTDC_LCD_Fill(fb_addr, (uint16_t)0x07E0, (uint32_t)480 * 800 * 2);
HAL_Delay(100);
SCB_CleanInvalidateDCache();
while (!(LTDC->CDSR & LTDC_CDSR_VSYNCS));
LTDC_LCD_Fill(fb_addr, (uint16_t)0x001F, (uint32_t)480 * 800 * 2);
HAL_Delay(100);
SCB_CleanInvalidateDCache();
while (!(LTDC->CDSR & LTDC_CDSR_VSYNCS));
LTDC_LCD_Fill(fb_addr, (uint16_t)0xFFFF, (uint32_t)480 * 800 * 2);
HAL_Delay(100);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
效果


博客導航
本文來自博客園,作者:膝蓋中箭衛兵,轉載請注明原文鏈接:http://www.rzrgm.cn/Skyrim-sssuuu/p/19160270

浙公網安備 33010602011771號
https://orcid.org/0000-0001-5102-772X