STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D
Github
功能简述
从DRAM中读取数据刷新使用LTDC接口的RGB屏幕 并使用DMA2D更新DRAM中的数据 注:部分驱动函数来自原子H7,LTDCRGB屏幕实验
STM32CubeMX配置
STM32CubeMX版本:4.27.0 配置流程: Pinout界面选择并开启LTDC与DRAM Clock Configuration配置时钟树 Configuration界面配置System 生成工程
Pinout配置
配置LTDC的引脚与屏幕显示方式以及DRAM
Clock Configuration配置
配置DRAM与LTDC与系统的时钟
Configuration
左侧主要系统功能的开启,或中间软件层功能的开启(如:RTOS、JPEG解码器,文件系统等) 右侧是系统及外设模块的具体配置
GPIO
屏幕背光控制
FMC
LTDC
配置屏幕相关参数 配置图层相关参数 配置IO速度等级
DMA2D
NVIC
代码部分
代码过多仅展示部分,其余在github
main.c
void callback(struct __DMA2D_HandleTypeDef * hdma2d) { j = 40000000/2-1; while(j--); i++; if(i == 6) i=1; HAL_DMA2D_Start_IT(hdma2d,Bank5_SDRAM_ADDR + 0x0012c000*i,Bank5_SDRAM_ADDR,1024,600); } /* USER CODE BEGIN 2 */ HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,1); SDRAM_Initialization_Sequence(); hdma2d.XferCpltCallback = callback; //Layer0 => RGB565 i = (1024*600); while(i--) *(unsigned short*)(Bank5_SDRAM_ADDR + 0x0012c000*1 + 2*i) = 0xf800; i = (1024*600); while(i--) *(unsigned short*)(Bank5_SDRAM_ADDR + 0x0012c000*2 + 2*i) = 0x07e0; i = (1024*600); while(i--) *(unsigned short*)(Bank5_SDRAM_ADDR + 0x0012c000*3 + 2*i) = 0x001f; i = (1024*600); while(i--) *(unsigned short*)(Bank5_SDRAM_ADDR + 0x0012c000*4 + 2*i) = 0xf81f; i = (1024*600); while(i--) *(unsigned short*)(Bank5_SDRAM_ADDR + 0x0012c000*5 + 2*i) = 0x07ff; //Layer1 => ARGB i = (512*300); while(i--) { *(unsigned short*)(Bank5_SDRAM_ADDR + 0x01000000 + 4*i) = 0xffff; //GB *(unsigned short*)(Bank5_SDRAM_ADDR + 0x01000000 + 4*i + 2) = 0xa0ff; //AR } i=0; HAL_DMA2D_Start_IT(&hdma2d,Bank5_SDRAM_ADDR + 0x0012c000*1,Bank5_SDRAM_ADDR,1024,600); /* USER CODE END 2 */