STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D
Github
https://github.com/HaHaHaHaHaGe/Planof2019_half/tree/master/Course_Project/STM32H7/Class05_LTDC
功能简述
从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速度等级
扫描二维码关注公众号,回复:
4466260 查看本文章
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 */