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

107,272次阅读
没有评论

共计 3514 个字符,预计需要花费 9 分钟才能阅读完成。

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 里面选择下载调试方式。
野火 stm32h743xih6 touchgfx 显示屏点亮(一)

2. 选择晶振和时基

System Core 里面配置晶振和时基
野火 stm32h743xih6 touchgfx 显示屏点亮(一)

3. 打开 CRC 检验

Computing 中打开 CRC, 勾选Activated 即可。ST 使用 TouchGFX 必须使能 CRC。
野火 stm32h743xih6 touchgfx 显示屏点亮(一)

4. 使能 DMA2D

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

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

5. 配置 SDRAM

Connectivity中找到FCM, 相关配置如图:
野火 stm32h743xih6 touchgfx 显示屏点亮(一)
下面的相关配置参考《野火 29- 电容触摸屏 - 触摸画板》的 bsp_sdram.c 文件中的 SDRAM_Init(void)函数内容进行配置。也可根据数据手册配置。额~~~ 我还不会看数据手册。
野火 stm32h743xih6 touchgfx 显示屏点亮(一)
切记:需要对 SDRAM 的片选信号和时钟使能信号进行重新配置,否则屏幕只能点亮,而不能正常显示 touchgfx。PH6引脚更改为 FMC_SDNE1PH7 引脚更改为FMC_SDCKE1
野火 stm32h743xih6 touchgfx 显示屏点亮(一)
野火 stm32h743xih6 touchgfx 显示屏点亮(一)

7. 配置 LTDC

Multimedia 中选择 LTDC,并使能LTDC 中断。
野火 stm32h743xih6 touchgfx 显示屏点亮(一)
下面的相关配置参考《野火 29- 电容触摸屏 - 触摸画板》的 bsp_lcd.c 文件中的 LCD_PARAM_TypeDef lcd_param[LCD_TYPE_NUM]数组内容进行配置。

野火 stm32h743xih6 touchgfx 显示屏点亮(一)
 野火 stm32h743xih6 touchgfx 显示屏点亮(一)
需要对 LTDC 的相关引脚重新手动配置,和原理图一一对应 ,这里使用RGB565, 相关配置引脚如下
 野火 stm32h743xih6 touchgfx 显示屏点亮(一)
 野火 stm32h743xih6 touchgfx 显示屏点亮(一) 这里可参考手把手教你制作 TouchGFX 的工程模板 里面介绍了触摸中断的引脚设置方式。本文未用到此方法,因为触摸中断已经在野火 stm32h743xih6 touchgfx 添加触摸代码 (二) 的bsp_i2c_touch.h文件中定义。
 野火 stm32h743xih6 touchgfx 显示屏点亮(一)
显示屏背光设置
 野火 stm32h743xih6 touchgfx 显示屏点亮(一)

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

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

9. 配置FREERTOS

Middleware 中选择CMSIS_V1
野火 stm32h743xih6 touchgfx 显示屏点亮(一)野火 stm32h743xih6 touchgfx 显示屏点亮(一)

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

10 配置 touchgfx

Software packs 中配置 touchgfx
野火 stm32h743xih6 touchgfx 显示屏点亮(一)

11. 配置时钟

野火 stm32h743xih6 touchgfx 显示屏点亮(一)
野火七寸屏最大时钟 33Mhz,FMC 最大支持 240Mhz
野火 stm32h743xih6 touchgfx 显示屏点亮(一)
野火 stm32h743xih6 touchgfx 显示屏点亮(一)

12. 生成工程

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

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

步骤 12 完成后直接打开 mdk 工程会报错
在 STM32cubemx 生成的文件夹下的 TouchGFX 中打开 ApplicationTemplate.touchgfx.part 配置 GUI 界面。
野火 stm32h743xih6 touchgfx 显示屏点亮(一)

14. 添加 SDRAM 相关代码

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


#define SDRAM_SIZE 0x4000000  

  
#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);    

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;

	
	
	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);

	 
	SDRAM_delay(1);

	
	 
	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);   

	
	   
	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);

	
	
	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;

	
	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);

	

	
	
	
	
	HAL_SDRAM_ProgramRefreshRate(&hsdram1, 824); 
}

main.cstatic void MX_FMC_Init(void)函数中调用 MX_SDRAM_InitEx() 函数
野火 stm32h743xih6 touchgfx 显示屏点亮(一)
main.cvoid StartDefaultTask(void const * argument)函数中调用 MX_TouchGFX_Process() 函数,
野火 stm32h743xih6 touchgfx 显示屏点亮(一)
到这里,屏幕可以正常显示 touchgfx 的内容。

野火 stm32h743xih6 touchgfx 显示屏点亮(一)
关于 Software Packs 选项找不到的解决办法:

野火 stm32h743xih6 touchgfx 显示屏点亮(一)
在这里插入图片描述

原文地址: 野火 stm32h743xih6 touchgfx 显示屏点亮(一)

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-28发表,共计3514字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)