1.使用RT-Thread Studio实现DIY数字仪表(一)——STM32CUBMX5.6移植touchGFX4.13
2.使用RT-Thread Studio实现DIY数字仪表(二)——把TouchGFX移植到RTThread系统
3.使用RT-Thread Studio实现DIY数字仪表(三)——RTThread系统实现物联网平台
4.使用RT-Thread Studio实现DIY数字仪表(四)——完善TouchGFX仪表界面
5.使用RT-Thread Studio实现DIY数字仪表(五)——开发微信小程序
硬件: 野火挑战者STM32F767 V1开发版
软件: TouchGFXDesigner v4.13和 STM32CubeMX v5.6.0,开发环境MDK v5.29
1.准备一套 野火挑战者STM32F767 开发版或其他核心板
2.下载 TouchGFXDesigner v4.13
压缩包下载完后,解压如下:
Projects目录下有STM32H7B3I-DK的工程,可以用来参考。touchGFX Designer的PC端安装包在Utilities目录下,找到后安装。
3.下载 STM32CubeMX v5.6.0
安装完STM32CubeMX v5.6.0版本后,还需要安装X_CUBE_TOUCHGFX软件包,安装路径如下:
4.下载 MDK v5.27以上版本
代码持续更新中:github代码下载地址https://gitee.com/Aladdin-Wang/hellotouchGFX.git(hellotouchGFX / example3 / demo1)
联系作者:欢迎加我微信,一起学习交流
1.使能CRC校验,ST使用TouchGFX必须使能CRC
2.配置RCC时钟
像素时钟大小:866 * 525 * 60/1024/1024=26M,像素时钟最大值为26M,防止花屏,设置为25M。
3.配置FMC(SDRAM)
4.配置DMA2D,打开DMA2D中断
5.配置LTDC,打开LTDC中断
更改LTDC的复用IO口,使符合野火的开发板
6.配置其余GPIO口
7.配置freeRTOS
8.配置QSPI
9.配置touchgfx
打开touchgfx软件包:
配置touchgfx:
10.配置串口,用于调试
10.生成工程
11.执行TouchGFX Designer
生成工程后,打卡src文件夹,打开ApplicationTemplate.touchgfx.part,即可开始配置:
官方说明如下:
我做的DEMO如下:
1.添加屏幕1
2.添加屏幕2
3.添加屏幕1按键,
在工程目录的…\Src\assets\images下添加两张按键图片,矢量图可以到阿里巴巴矢量图标库自行下载,下载地址https://www.iconfont.cn
4.添加屏幕2按键
同样方法添加屏幕2的按键,使按下按键切换到屏幕1
5.点击Generate Code生成代码
生成代码后,再打开src文件夹,会多出”xxxx.touchgfx“的文件,以后可以直接打开这个文件配置。
SDRAM的初始化程序需要移植以前的工程代码,到main.c里。手动添加的代码需要放在/* USER CODE BEGIN 0 /和/ USER CODE END 0 */之间,防止重新生成工程被覆盖。
把MX_SDRAM_InitEx();初始化函数放在static void MX_FMC_Init(void)里:
新建Drivers\Touch_Driver文件夹,从野火源代码《21-电容触摸屏—触摸画板》里复制touch触摸驱动文件到这个文件夹下:
添加到工程里:
更改代码:
使用软件I2C
在gt9xx.c里添加freertos头文件:
添加中断处理函数:
屏蔽部分代码:
更改部分代码:
在STM32TouchController.cpp里添加触摸代码
1.添加QSPI下载算法文件
下载算法的模版在keil安装目录\ARM\Flash下的_Template文件夹,把此文件夹复制出来,进行修改。也可以自行修改此工程名。
打开此工程,选择自己的芯片类型:
添加W25QXX的驱动代码:
去正点原子的论坛下载STM32F767的寄存器工程《实验28 QSPI实验》拷贝出HARDWARE文件夹下的QSPI和W25QXX驱动,和SYSTEM文件夹。
对工程进行相应的修改:
我根据网上的例程,修改后的工程链接如下,可以看代码自行理解。https://download.csdn.net/download/sinat_31039061/12249290
注意:W25Q256需要开启4字节地址,W25Q256以下容量的是3字节地址,我在工程里已经做了适配,对于不同的容量只需要更改FlashDev.c里边的大小配置即可。
编译后将STM32F767_W25QXX.FLM拷贝到keil安装目录\ARM\Flash下
2.工程添加STM32F767_W25QXX.FLM,关闭Verify,增加RAM的大小
3.更改分散加载文件
通过下面Edit按钮打开KEIL自己生成的sct文件,将该文件复制下来,并重命名为flash.sct,然后添加以下代码,并保存
编译生成的map文件:
还是拷贝正点原子的qspi HAL库驱动,只是要将QSPI 配置为memory-mapped mode,这样我们才可以像访问内存一样访问QSPI FLASH空间。
void W25QXX_MemoryMappedMode(void)
{
QSPI_CommandTypeDef s_command;
QSPI_MemoryMappedTypeDef s_mem_mapped_cfg;
/* Configure the command for the read instruction */
s_command.InstructionMode = QSPI_INSTRUCTION_4_LINES;
s_command.Instruction = W25X_FastReadData;
s_command.AddressMode = QSPI_ADDRESS_4_LINES;
s_command.AddressSize = QSPI_ADDRESS_24_BITS;
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
s_command.DataMode = QSPI_DATA_4_LINES;
s_command.DummyCycles = 8;
s_command.DdrMode = QSPI_DDR_MODE_DISABLE;
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;
/* Configure the memory mapped mode */
s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
s_mem_mapped_cfg.TimeOutPeriod = 0; //1;
if (HAL_QSPI_MemoryMapped(&hqspi, &s_command, &s_mem_mapped_cfg) != HAL_OK)
{
Error_Handler();
}
}
编译运行: