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

打印 上一主题 下一主题

主题 624|帖子 624|积分 1872

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_SDNE1,PH7引脚更改为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的相关代码
  1. /**
  2.   * @brief  FMC SDRAM 模式配置的寄存器相关定义
  3.   */
  4. #define SDRAM_SIZE 0x4000000  //64M字节,两片W9825G6KH-6,32MB@16bit组成64M@32bit
  5. /*SDRAM 的bank选择*/  
  6. #define FMC_BANK_SDRAM            FMC_Bank2_SDRAM  
  7. #define FMC_COMMAND_TARGET_BANK   FMC_SDRAM_CMD_TARGET_BANK2
  8. #define SDRAM_MODEREG_BURST_LENGTH_1             ((uint16_t)0x0000)
  9. #define SDRAM_MODEREG_BURST_LENGTH_2             ((uint16_t)0x0001)
  10. #define SDRAM_MODEREG_BURST_LENGTH_4             ((uint16_t)0x0002)
  11. #define SDRAM_MODEREG_BURST_LENGTH_8             ((uint16_t)0x0004)
  12. #define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL      ((uint16_t)0x0000)
  13. #define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED     ((uint16_t)0x0008)
  14. #define SDRAM_MODEREG_CAS_LATENCY_2              ((uint16_t)0x0020)
  15. #define SDRAM_MODEREG_CAS_LATENCY_3              ((uint16_t)0x0030)
  16. #define SDRAM_MODEREG_OPERATING_MODE_STANDARD    ((uint16_t)0x0000)
  17. #define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000)
  18. #define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE     ((uint16_t)0x0200)   
  19. #define SDRAM_TIMEOUT                            ((uint32_t)0xFFFF)
  20. static FMC_SDRAM_CommandTypeDef Command;
  21. static void MX_SDRAM_InitEx(void);    //函数声明
复制代码
  1. static void SDRAM_delay(__IO uint32_t nCount)
  2. {
  3.   __IO uint32_t index = 0;
  4.   for(index = (100000 * nCount); index != 0; index--)
  5.   {
  6.   }
  7. }
  8. static void MX_SDRAM_InitEx(void)
  9. {
  10.         uint32_t tmpr = 0;
  11.         /* Step 1 ----------------------------------------------------------------*/
  12.         /* 配置命令:开启提供给SDRAM的时钟 */
  13.         Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
  14.         Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
  15.         Command.AutoRefreshNumber = 1;
  16.         Command.ModeRegisterDefinition = 0;
  17.         /* 发送配置命令 */
  18.         HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
  19.         /* Step 2: 延时100us */
  20.         SDRAM_delay(1);
  21.         /* Step 3 ----------------------------------------------------------------*/
  22.         /* 配置命令:对所有的bank预充电 */
  23.         Command.CommandMode = FMC_SDRAM_CMD_PALL;
  24.         Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
  25.         Command.AutoRefreshNumber = 1;
  26.         Command.ModeRegisterDefinition = 0;
  27.         /* 发送配置命令 */
  28.         HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);   
  29.         /* Step 4 ----------------------------------------------------------------*/
  30.         /* 配置命令:自动刷新 */   
  31.         Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
  32.         Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
  33.         Command.AutoRefreshNumber = 8;
  34.         Command.ModeRegisterDefinition = 0;
  35.         /* 发送配置命令 */
  36.         HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
  37.         /* Step 5 ----------------------------------------------------------------*/
  38.         /* 设置sdram寄存器配置 */
  39.         tmpr = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1          |
  40.                                    SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |
  41.                                    SDRAM_MODEREG_CAS_LATENCY_3           |
  42.                                    SDRAM_MODEREG_OPERATING_MODE_STANDARD |
  43.                                    SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
  44.         /* 配置命令:设置SDRAM寄存器 */
  45.         Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
  46.         Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
  47.         Command.AutoRefreshNumber = 1;
  48.         Command.ModeRegisterDefinition = tmpr;
  49.         /* 发送配置命令 */
  50.         HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
  51.         /* Step 6 ----------------------------------------------------------------*/
  52.         /* 设置刷新计数器 */
  53.         /* 刷新周期=64ms/8192行=7.8125us */
  54.         /* COUNT=(7.8125us x Freq) - 20 */
  55.         /* 设置自刷新速率 */
  56.         HAL_SDRAM_ProgramRefreshRate(&hsdram1, 824);
  57. }
复制代码
在main.c的static void MX_FMC_Init(void)函数中调用MX_SDRAM_InitEx()函数

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

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

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



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表