野火stm32h743xih6 touchgfx显示屏点亮(一)

STM32 CubeMX 无法将 STM32H7 的最大 CPU 频率设置为 480 MHz
使用STM32CUBMX5.6移植touchGFX4.13
【SDRAM】STM32外扩SDRAM学习总结 + CubeMX配置教程
STM32CubeMX | 41 - 使用LTDC驱动TFT-LCD屏幕(RGB屏)
手把手教你制作TouchGFX的工程模板

其他问题
Cannot Load Flash Programming Algorithm !
stm32修改堆栈大小(堆栈空间不足导致死机)

1. 选择调试下载方式

用STM32CubeMX工具选择好芯片后,在Trace and Debug里面选择下载调试方式。

2. 选择晶振和时基

System Core里面配置晶振和时基

3.打开CRC检验

Computing中打开CRC,勾选Activated即可。ST使用TouchGFX必须使能CRC。

4.使能DMA2D

Multimedia中打开DMA2D,勾选Activated,并配置和使能DMA2D中断


5.配置SDRAM

Connectivity中找到FCM,相关配置如图:

下面的相关配置参考《野火29-电容触摸屏-触摸画板》的bsp_sdram.c文件中的 SDRAM_Init(void)函数内容进行配置。也可根据数据手册配置。额~~~我还不会看数据手册。

切记:需要对 SDRAM的片选信号和时钟使能信号进行重新配置,否则屏幕只能点亮,而不能正常显示touchgfx。 PH6引脚更改为FMC_SDNE1PH7引脚更改为FMC_SDCKE1

7.配置LTDC

Multimedia中选择LTDC,并使能LTDC中断。

下面的相关配置参考《野火29-电容触摸屏-触摸画板》的bsp_lcd.c文件中的 LCD_PARAM_TypeDef lcd_param[LCD_TYPE_NUM]数组内容进行配置。



需要对LTDC的相关引脚重新手动配置,和原理图一一对应,这里使用RGB565,相关配置引脚如下

这里可参考手把手教你制作TouchGFX的工程模板 里面介绍了触摸中断的引脚设置方式。本文未用到此方法,因为触摸中断已经在野火stm32h743xih6 touchgfx 添加触摸代码(二)bsp_i2c_touch.h文件中定义。

显示屏背光设置

8.检查相关中断是否开启

9.配置FREERTOS

Middleware中选择CMSIS_V1


10配置touchgfx

Software packs中配置 touchgfx

11.配置时钟

野火七寸屏最大时钟33Mhz,FMC最大支持240Mhz

12.生成工程

13.先使用touchgfx designer工具配置GUI

步骤12完成后直接打开mdk工程会报错

在STM32cubemx生成的文件夹下的TouchGFX中打开ApplicationTemplate.touchgfx.part配置GUI界面。

14.添加SDRAM相关代码

main.c中添加SDRAM的相关代码

c 复制代码
/**
  * @brief  FMC SDRAM 模式配置的寄存器相关定义
  */
#define SDRAM_SIZE 0x4000000  //64M字节,两片W9825G6KH-6,32MB@16bit组成64M@32bit

/*SDRAM 的bank选择*/  
#define FMC_BANK_SDRAM            FMC_Bank2_SDRAM  
#define FMC_COMMAND_TARGET_BANK   FMC_SDRAM_CMD_TARGET_BANK2

#define SDRAM_MODEREG_BURST_LENGTH_1             ((uint16_t)0x0000)
#define SDRAM_MODEREG_BURST_LENGTH_2             ((uint16_t)0x0001)
#define SDRAM_MODEREG_BURST_LENGTH_4             ((uint16_t)0x0002)
#define SDRAM_MODEREG_BURST_LENGTH_8             ((uint16_t)0x0004)
#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL      ((uint16_t)0x0000)
#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED     ((uint16_t)0x0008)
#define SDRAM_MODEREG_CAS_LATENCY_2              ((uint16_t)0x0020)
#define SDRAM_MODEREG_CAS_LATENCY_3              ((uint16_t)0x0030)
#define SDRAM_MODEREG_OPERATING_MODE_STANDARD    ((uint16_t)0x0000)
#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000) 
#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE     ((uint16_t)0x0200)   

#define SDRAM_TIMEOUT                            ((uint32_t)0xFFFF)

static FMC_SDRAM_CommandTypeDef Command;

static void MX_SDRAM_InitEx(void);    //函数声明
c 复制代码
static void SDRAM_delay(__IO uint32_t nCount)
{
  __IO uint32_t index = 0; 
  for(index = (100000 * nCount); index != 0; index--)
  {
  }
}
static void MX_SDRAM_InitEx(void)
{
	uint32_t tmpr = 0;

	/* Step 1 ----------------------------------------------------------------*/
	/* 配置命令:开启提供给SDRAM的时钟 */
	Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
	Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
	Command.AutoRefreshNumber = 1;
	Command.ModeRegisterDefinition = 0;
	/* 发送配置命令 */
	HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);

	/* Step 2: 延时100us */ 
	SDRAM_delay(1);

	/* Step 3 ----------------------------------------------------------------*/
	/* 配置命令:对所有的bank预充电 */ 
	Command.CommandMode = FMC_SDRAM_CMD_PALL;
	Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
	Command.AutoRefreshNumber = 1;
	Command.ModeRegisterDefinition = 0;
	/* 发送配置命令 */
	HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);   

	/* Step 4 ----------------------------------------------------------------*/
	/* 配置命令:自动刷新 */   
	Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
	Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
	Command.AutoRefreshNumber = 8;
	Command.ModeRegisterDefinition = 0;
	/* 发送配置命令 */
	HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);

	/* Step 5 ----------------------------------------------------------------*/
	/* 设置sdram寄存器配置 */
	tmpr = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1          |
				   SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |
				   SDRAM_MODEREG_CAS_LATENCY_3           |
				   SDRAM_MODEREG_OPERATING_MODE_STANDARD |
				   SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;

	/* 配置命令:设置SDRAM寄存器 */
	Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
	Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
	Command.AutoRefreshNumber = 1;
	Command.ModeRegisterDefinition = tmpr;
	/* 发送配置命令 */
	HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);

	/* Step 6 ----------------------------------------------------------------*/

	/* 设置刷新计数器 */
	/* 刷新周期=64ms/8192行=7.8125us */
	/* COUNT=(7.8125us x Freq) - 20 */
	/* 设置自刷新速率 */
	HAL_SDRAM_ProgramRefreshRate(&hsdram1, 824); 
}

main.cstatic void MX_FMC_Init(void)函数中调用MX_SDRAM_InitEx()函数

main.cvoid StartDefaultTask(void const * argument)函数中调用MX_TouchGFX_Process()函数,

到这里,屏幕可以正常显示touchgfx的内容。

关于Software Packs选项找不到的解决办法:


相关推荐
Wave8456 小时前
基于 STM32 + ESP8266 + W25Q64 的双核 OTA 底层架构总结
stm32·嵌入式硬件·架构
xiangw@GZ7 小时前
WiFi 全世代(WiFi1~WiFi7)技术规范与核心参数总结
嵌入式硬件
振南的单片机世界8 小时前
CPU时钟:频率越高跑越快,但物理极限在“拖后腿”
stm32·单片机·嵌入式硬件
普中科技9 小时前
【普中 51-Ai8051 开发攻略】-- 第 20 章 输入捕获实验
单片机·嵌入式硬件·输入捕获·pca·普中科技·ai8051u·aicube
d111111111d9 小时前
直流电机位置式 PID 控制 和 舵机的区别
笔记·stm32·单片机·嵌入式硬件·学习
d111111111d11 小时前
了解Modbus
网络·笔记·stm32·单片机·嵌入式硬件·学习
三佛科技-1341638421212 小时前
主控FT32F031便携式吸尘器方案,迷你手持吸尘器MCU控制方案开发
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
踏着七彩祥云的小丑13 小时前
嵌入式——认识电子元器件——微动开关系列
单片机·嵌入式硬件
调光IC-小雅14 小时前
解析FP62××系列限流保护机制:为何它是DC/DC芯片的安全底线
单片机·嵌入式硬件
天天爱吃肉821814 小时前
场地整车在环仿真测试系统及总线注入研究|新能源智驾研发硬核干货
大数据·人工智能·功能测试·嵌入式硬件·汽车