【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 */
}
效果


博客导航
本文来自博客园,作者:膝盖中箭卫兵,转载请注明原文链接:https://www.cnblogs.com/Skyrim-sssuuu/p/19160270

浙公网安备 33010602011771号
https://orcid.org/0000-0001-5102-772X