世纪电源网社区logo
社区
Datasheet
标题
返回顶部
原创

STM32 cubeIDE创建touchGFX工程

[复制链接]
查看: 3886 |回复: 6
1
newcenturydesign
  • 积分:4251
  • |
  • 主题:31
  • |
  • 帖子:821
积分:4251
LV8
副总工程师
  • 2021-2-1 15:11:17
   最近公司弄了一个用NXP单片机跑touchGFX的项目,被它的界面显示效果给征服了。于是就买了块STM32F429的开发板来跑下touchgfx,百度下基本都是用cube MX上配置touchgfx,但遗憾的是最新版的cubeMX不再有GUI的配置选项,且ST自己弄的一个cubeIDE集成了cubeMX,看cubeIDE的界面是基于Eclipse,和我手头上用的TI CCS,NXP MCUXpressoIDE非常相似。于是我坚信cubeIDE一定有办法配置touchGFX,终于在我的坚持下找到了相关视频,https://www.bilibili.com/video/av840456711/ ,照着它做就能创建出来。   下面把我遇到的问题及解决方法记录下来以便以后查找。
1>触摸屏反应慢
2>如何横屏
3>如何配置按键长按

给个运行截图,再慢慢讲!
mainScreen.PNG
newcenturydesign
  • 积分:4251
  • |
  • 主题:31
  • |
  • 帖子:821
积分:4251
LV8
副总工程师
  • 2021-2-1 15:56:32
  • 倒数6
 
要弄清楚第一个问题需要知道touchGFX结构(C++语言)。STM32TouchController.cpp 中的sampleTouch()方法(可以理解成sampleTouch()函数,对象化编程中叫方法)实现了触摸的状态和坐标采集。细心的朋友可能已发现这个函数是每个tick调用一次,是不是tick的问题造成的采集延时?问了touchGFX的专家级人物,给出的方法把触摸状态和坐标采集放到另一个任务中不要放到GUI的任务中,因为这里有两种可能性,第一是触摸采集慢了,第二是刷图慢了,且新建的采集任务的优先级要调为最高。我在触摸采集的任务中放了个闪灯程序让屏每触摸一下灯就闪一下,结果是每次点下屏幕灯都正常闪了下。但还是会看下明显的延时。这下问题定位到了sampleTouch的执行周期上,果断在这个方法里加个闪灯程序,结果发现并不是1/60s执行一次而是1s执行一次。再在Model里有个tick()方法里放一个闪灯程序也是1s执行一次,当时想到的是我这帧率也太低了怎么才一秒一帧?于是各种查LTDC,DMA2D及屏幕的接口,最终确定了系统是开启了LTDC,DMA2D驱动屏不可能一秒一帧这么慢,难道有什么任务阻塞了?各种注释代码发现我在Model::tick()里的一个消息队列的接收函数出的问题。。。我把它的timeout设成了一秒,难怪tick()会一秒执行一次。果断改成0,问题解决了。记住在Model::tick()接收消息队列消息一定要把timeout设成0.
sampleTouch.PNG
newcenturydesign
  • 积分:4251
  • |
  • 主题:31
  • |
  • 帖子:821
积分:4251
LV8
副总工程师
  • 2021-2-3 17:03:05
  • 倒数4
 
关于横坚屏的问题查了屏幕驱动芯片的资料说是配置一些寄存器的值没有成功,不过在Designer找到了设置项。
displayDirection.PNG
newcenturydesign
  • 积分:4251
  • |
  • 主题:31
  • |
  • 帖子:821
积分:4251
LV8
副总工程师
  • 2021-2-3 17:08:04
  • 倒数3
 
Button的Callback只提供了点击事件。最终用RepeatButton替代Button实现,记得设置它的Delay和Interval。 后续使用遇到问题再分享解决方法。

Button.PNG
ButtonSetting.PNG
newcenturydesign
  • 积分:4251
  • |
  • 主题:31
  • |
  • 帖子:821
积分:4251
LV8
副总工程师
  • 2021-2-24 09:51:19
  • 倒数2
 
最近弄好了HAL库SPI从机。功能是STM32touchGFX界面按键触发SPI总线上的WIFI发送数据。STM32touchGFX是从机,WIFI是主机。
一开始遇到的问题是WIFI能收到STM32touchGFX的数据,但STM32touchGFX收不到主机WIFI的数据,后面STM32touchGFX就直接进Hardfault死机!仔细看了下HAL库,发现函数接口接收的发送buffer写的uint8_t但函数主体又把uint8_t转成了uint16_t,于是果断把接收的发送buffer改成了uint16_t,问题依然存在,一通百度有人提到了buffer 4 byte对齐的问题,然后把buffer的长度改成了4的倍数,问题解决。这个应该是HAL库的一个缺陷,对寄存器操作不当造成的。看了官方的例子是把spi接收和发送buffer写成了uint32_t,这样就没有4byte对齐的问题。
newcenturydesign
  • 积分:4251
  • |
  • 主题:31
  • |
  • 帖子:821
积分:4251
LV8
副总工程师
最新回复
  • 2021-4-14 10:32:59
  • 倒数1
 
因为cubuide集成了cubeMX有不少配置文件,如果两个项目内容上很接近可能直接复制工程改个工程名就好。最近就遇到更改工程名的问题,单纯的右击工程名Rename会报cannot find -l:libtouchgfx-float-abi-hard.a的错误。解决方法是右击工程名到时Properties同时更改LIB的路径。
lib.PNG
kaokaohe
  • 积分:454
  • |
  • 主题:3
  • |
  • 帖子:48
积分:454
LV6
高级工程师
  • 2021-2-3 09:59:22
  • 倒数5
 
感谢楼主的分享!!!
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)82437996 /(138 2356 2357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2024 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号