STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D

STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D

  • Github
  • 功能简述
  • STM32CubeMX配置
    • Pinout配置
    • Clock Configuration配置
    • Configuration
      • GPIO
      • FMC
      • LTDC
      • DMA2D
      • NVIC
  • 代码部分
    • main.c

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配置

STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第1张图片
配置LTDC的引脚与屏幕显示方式以及DRAM

Clock Configuration配置

STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第2张图片
配置DRAM与LTDC与系统的时钟

Configuration

STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第3张图片
左侧主要系统功能的开启,或中间软件层功能的开启(如:RTOS、JPEG解码器,文件系统等)
右侧是系统及外设模块的具体配置

GPIO

STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第4张图片
屏幕背光控制

FMC

STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第5张图片
STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第6张图片

LTDC

STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第7张图片
配置屏幕相关参数
STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第8张图片
配置图层相关参数
STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第9张图片
配置IO速度等级

DMA2D

STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第10张图片
STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第11张图片

NVIC

STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第12张图片
STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D_第13张图片

代码部分

代码过多仅展示部分,其余在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 */

你可能感兴趣的:(STM32CubeMX学习笔记——STM32H743_LTDC、DMA2D)