【TouchGFX】使用CubeMX創建touchgfx項目 -- 初始篇


1、系統構成,黑色塊表示組件非必須

2、環境准備

CubeMX:6.0.1

touchgfx:4.15.0

rt-thread:2020-8-14 commit

Keil:5.30

board:stm32f29igt6 + SDRAM-256Mb(16M x 16)+  SPI-FLASH-16MB + LCD-1024*600

3、打開CubeMX開始創建項目

3.1、安裝軟件包touchgfx最新版本4.15.0

3.2、系統時鍾源RCC配置

3.3、系統調試口及時基SYS配置

3.4、配置SDRAM--W9825G6KH,電氣參數及管腳配置

參考博文【鏈接一】【鏈接二

 3.5、配置SPI-FLASH--W25Q128JVSQ

3.6、配置圖形加速器 ChromART

3.7、顯示LTDC接口配置

3.8、觸摸芯片I2C接口配置

  3.9、組件CRC激活,TouchGFX需要

3.10、加入freertos操作系統,目的是生成touchgfx與操作系統接口文件,方便移植rt-thread,參數配置保持默認即可

 3.11、在附加軟件管理器中選擇TouchGFX用以生成其代碼,並做相關配置

3.12、IO口配置,LCD復位、背光,FLASH片選,LED等

3.13、時鍾樹配置

3.14、生成工程

3.15、直接打開生成的Keil工程編譯會報錯,這是因為這些文件都是TouchGFX Designer生成,所以需要使用TouchGFX Designer 先生成代碼

3.16、打開CubeMX生成的TouchGFX Designer模板工程,加入TEXT、BOX和BUTTON控件后生成touchgfx代碼

3.17、再次編譯Keil工程

4、補全工程,使之能運行起來

4.1、加入SDRAM配置代碼

 1 #define REFRESH_COUNT                               636//1000//1755//636
 2 #define SDRAM_TIMEOUT                               ((uint32_t)0xFFFF)
 3 #define SDRAM_MODEREG_BURST_LENGTH_1                ((uint32_t)0x0000)
 4 #define SDRAM_MODEREG_BURST_LENGTH_2                ((uint32_t)0x0001)
 5 #define SDRAM_MODEREG_BURST_LENGTH_4                ((uint32_t)0x0002)
 6 #define SDRAM_MODEREG_BURST_LENGTH_8                ((uint32_t)0x0004)
 7 #define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL         ((uint32_t)0x0000)
 8 #define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED        ((uint32_t)0x0008)
 9 #define SDRAM_MODEREG_CAS_LATENCY_2                 ((uint32_t)0x0020)
10 #define SDRAM_MODEREG_CAS_LATENCY_3                 ((uint32_t)0x0030)
11 #define SDRAM_MODEREG_OPERATING_MODE_STANDARD       ((uint32_t)0x0000)
12 #define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED    ((uint32_t)0x0000)
13 #define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE        ((uint32_t)0x0200)
14 
15 /**
16   * @brief  Programs the SDRAM device.
17   * @retval None
18   */
19 void MX_SDRAM_InitEx(void)
20 {
21     __IO uint32_t tmpmrd = 0;
22     FMC_SDRAM_CommandTypeDef Command;
23 
24     /* Step 1: Configure a clock configuration enable command */
25     Command.CommandMode            = FMC_SDRAM_CMD_CLK_ENABLE;
26     Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
27     Command.AutoRefreshNumber      = 1;
28     Command.ModeRegisterDefinition = 0;
29 
30     /* Send the command */
31     HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
32 
33     /* Step 2: Insert 100 us minimum delay */
34     /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */
35     HAL_Delay(1);
36 
37     /* Step 3: Configure a PALL (precharge all) command */
38     Command.CommandMode            = FMC_SDRAM_CMD_PALL;
39     Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
40     Command.AutoRefreshNumber      = 1;
41     Command.ModeRegisterDefinition = 0;
42 
43     /* Send the command */
44     HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
45 
46     /* Step 4: Configure an Auto Refresh command */
47     Command.CommandMode            = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
48     Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
49     Command.AutoRefreshNumber      = 8;
50     Command.ModeRegisterDefinition = 0;
51 
52     /* Send the command */
53     HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
54 
55     /* Step 5: Program the external memory mode register */
56     tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1          | \
57              SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   | \
58              SDRAM_MODEREG_CAS_LATENCY_3           | \
59              SDRAM_MODEREG_OPERATING_MODE_STANDARD | \
60              SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
61 
62     Command.CommandMode            = FMC_SDRAM_CMD_LOAD_MODE;
63     Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
64     Command.AutoRefreshNumber      = 1;
65     Command.ModeRegisterDefinition = tmpmrd;
66 
67     /* Send the command */
68     HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
69 
70     /* Step 6: Set the refresh rate counter */
71     /* Set the device refresh rate */
72     HAL_SDRAM_ProgramRefreshRate(&hsdram1, REFRESH_COUNT);
73 }

4.2、加入SPI-FLASH驅動

 

4.3、加入觸摸驅動

 

5、FAQ

5.1、LTDC刷新頻率過高導致的屏幕閃爍錯位情況,相同硬件第一次設置25M工作正常,第二次25M就出現下面現象,修改為23M后工作正常,感覺會變很奇怪

                 

 5.2 、framebuffer過小導致的顯示斷屏錯位,大小應該是分辨率×色深 (800×480×3) Byte

5.3、FT5436觸摸IC獲取第一點觸摸Y坐標概率性負值,即MSB是1,須轉為正值 ,可 & 0x7FFF,否則造成觸摸間歇性失效,如 drag 效果達不到

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM