欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32F429使用STM32CUBMX5.6移植touchGFX4.13

程序员文章站 2022-04-01 16:48:55
...

目录:

新版:
0.STM32F429使用STM32CUBMX5.6移植touchGFX4.13
旧版:
1.STM32F429移植touchGFX(一)——通过STM32CubeMX移植TouchGFX
2.STM32F429移植touchGFX(二)—— 使用MVP架构来实现GUI和硬件的双向交互
3.STM32F429移植touchGFX(三)—— 实现DIY数字仪表

实验平台:

硬件: 野火挑战者STM32F429 V1开发版
软件: 最新版本的STM32CubeF4固件库,TouchGFXDesigner v4.13和 STM32CubeMX v5.6.0,开发环境MDK v5.29

实验前准备工作:

1.准备一套 野火挑战者STM32F429开发版,和下载工具
2.下载 TouchGFXDesigner v4.13
压缩包下载完后,解压如下:
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
Projects目录下有STM32H7B3I-DK的工程,可以用来参考。touchGFX Designer的PC端安装包在Utilities目录下,找到后安装。
3.下载 STM32CubeMX v5.6.0
安装完STM32CubeMX v5.6.0版本后,还需要安装X_CUBE_TOUCHGFX软件包,安装路径如下:
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
4.下载 MDK v5.27以上版本

下载:

代码持续更新中:github代码下载地址https://gitee.com/Aladdin-Wang/hellotouchGFX.git

联系作者:

欢迎加我微信,一起学习交流
STM32F429使用STM32CUBMX5.6移植touchGFX4.13

通过STM32CubeMX从零驱动STM32F429,并创建一个TouchGFX工程:

步骤

STM32F429使用STM32CUBMX5.6移植touchGFX4.13

组件

STM32F429使用STM32CUBMX5.6移植touchGFX4.13
1.使能CRC校验,ST使用TouchGFX必须使能CRC
2.配置RCC时钟
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
3.配置FMC(SDRAM)
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
4.配置DMA2D,打开DMA2D中断
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
5.配置LTDC,打开LTDC中断
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
更改LTDC的复用IO口,使符合野火的开发板
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
6.配置其余GPIO口
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
7.配置freeRTOS
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
8.配置touchgfx
打开touchgfx软件包:
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
配置touchgfx:
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
9.生成工程
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
10.执行TouchGFX Designer
生成工程后,打卡src文件夹,打开ApplicationTemplate.touchgfx.part,即可开始配置:
官方说明如下:
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
我做的DEMO如下:
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
点击Generate Code生成代码后,再打开src文件夹,会多出”xxxx.touchgfx“的文件,以后可以直接打开这个文件配置。
STM32F429使用STM32CUBMX5.6移植touchGFX4.13

更改代码,添加添加SDRAM的配置代码

SDRAM的初始化程序需要移植以前的工程代码,到main.c里。手动添加的代码需要放在/* USER CODE BEGIN 0 /和/ USER CODE END 0 */之间,防止重新生成工程被覆盖。
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
把MX_SDRAM_InitEx();初始化函数放在static void MX_FMC_Init(void)里:
STM32F429使用STM32CUBMX5.6移植touchGFX4.13

更改代码,添加触摸驱动

新建Drivers\Touch_Driver文件夹,从旧工程里复制touch触摸驱动文件到这个文件夹下:
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
工程添加代码:
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
在STM32TouchController.cpp里添加触摸代码:
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
STM32F429使用STM32CUBMX5.6移植touchGFX4.13

编译运行:

一些经验:

0. touchGFX4.13版本介绍

1. 使用Visual Stdudio开发界面
touchgfx的代码与系统的耦合度不是很高,MDK或者IAR的编译和代码提示也过于不人性化,建议使用touchGFX Designer配合Visual Stdudio来开发界面,与硬件解耦。界面调试完,再打开MDK,烧到板子上验证,加速开发,工具用的6,可以事半功倍。前提是使用Visual Stdudio不能调用HAL库的代码,要不然VS会报错。代码中可以使用宏来规避,或者通过中间件来解耦合,可以参考这个博客https://blog.csdn.net/baidu_33429980/article/details/104248352

#ifdef SIMULATOR
/*使用VS仿真的代码*/
#else
/*使用HAL库的代码*/
#endif

STM32F429使用STM32CUBMX5.6移植touchGFX4.132. C语言和C++如何互相调用:
c方式编译和c++方式编译,其差异就在于符号表标识符。同一个函数名,在c方式编译的其函数名跟编译前的函数一致,c++方式编译的则是以函数名结合参数作为编译后的函数名。cpp编译器是兼容c语言的编译方式的,所以在编译cpp文件的时候,调用到.c文件的函数的地方时,需要用extern “C”指定用c语言的方式去编译它,extern “C”是c++方式编译才认识的关键字,在c++编译的方式会定义__cplusplus宏,c语言编译器没有__cplusplus宏和extern “C”关键字。
C++语言调用C:
在编译cpp文件的时候,调用到.c文件的函数的地方时,需要用extern “C”指定用c语言的方式去编译它

extern "C"
{
	uint32_t LCD_GetXSize();
	uint32_t LCD_GetYSize();
}

C的头文件要使用宏定义包含函数接口。

#ifdef __cplusplus
 extern "C" {
#endif
.
.
.
#ifdef __cplusplus
}
#endif

C语言调用C++文件中的函数:
对于C++文件中的普通函数,可以直接用extern “C” 对函数进行修饰,对于c++的重载函数或成员函数,需要进行二次封装后,再使用extern "C"对函数修饰,函数内部的代码依然是使用c++的编译器编译。
例如在xx.cpp中对函数进行声明,在xx.c中进行调用:
xx.cpp

extern "C" void touchgfx_init();
extern "C" void touchgfx_taskEntry();
void touchgfx_init()
{

}
void touchgfx_taskEntry()
{

}

xx.c

void touchgfx_init(void);
void touchgfx_taskEntry(void);

void MX_TouchGFX_Init(void)
{

  touchgfx_init();
}

void MX_TouchGFX_Process(void)
{
  touchgfx_taskEntry();
}

3. 学习touchgfx,官方网站是最权威的方式。
touchgfx官网为https://touchgfx.zendesk.com/hc/en-us,好多入门教程和疑难杂症官网都有。
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
4. 关注AI电堂公众号,ST的技术支持会经常发一些学习教程。
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
5. 可以多关注STM32的官方论坛,里边会经常发一下最新使用笔记。论坛地址:http://www.stmcu.org.cn/module/forum/forum.php?mod=forumdisplay&fid=1315&page=
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
6. 解决问题不止有百度和求人,一些常见的问题尽量自己找答案。
百度搜索的搜索范围太广,一些好的文章,百度搜索引擎不一定能搜索到,比如公众号的文章,可以用微信发现里的搜一搜,看一看,还有一些论坛,或CSDN博客都有搜索入口,有条件的还可以自备*,等等
STM32F429使用STM32CUBMX5.6移植touchGFX4.13
7. 多读源码,多实战,这个不用说