在STM32Cube中启动touchGFX编辑界面,编译MDK工程时遇到问题

本打算用STM32CubeMX启动touchGFX,使用的是STM32F469探索板,各项跟GFX相关的设置都设好了,就差最后在板子上验证两个软件有没有整合成功了,结果生成代码后编译完成,但是链接时出现了大量罕见错误(共计103个)如:
Error:** L6654E:** Rejected Local Symbol xx referred to from non group member xx.o(.iar.stackusage)
错误虽然数量多,但是基本都是按上述格式报错的。

由于本人水平不足,之前也从未碰到过这样的问题,实在是束手无策,就来请教论坛里各位大手子了!如果最后能成功,会把工程文件放上来,除LCD相关部分外的芯片设置和touchGFX编辑都基本接近空白,所以可以当成模板自由编辑,这样也可以免去从前繁琐的移植步骤,实现一键移植(CubeMX提供了这样的便利为什么不用呢)~

以下是部分具体的报错信息:

linking... 
469_touchGFX_interfacing_test\469_touchGFX_interfacing_test.axf: Error: L6654E: Rejected Local symbol .text7 referred to from non group member Application.o(.iar.stackusage) 
469_touchGFX_interfacing_test\469_touchGFX_interfacing_test.axf: Error: L6654E: Rejected Local symbol .text9 referred to from non group member Application.o(.iar.stackusage) 
469_touchGFX_interfacing_test\469_touchGFX_interfacing_test.axf: Error: L6654E: Rejected Local symbol .text11 referred to from non group member Application.o(.iar.stackusage) 

更新:
更换编译器并把touchgfx disable再enable,重新添加所需文件以及touchgfx-core.h 之后,报错信息数量大幅减少(现共计24件),且变成了:
Error: L6242E: Cannot Link Object xx.o as its attributes are incompatible with the image attributes.

应该会有人注意到每一段末尾的wchart-16 clashes with wchart-32,其实已经在option for target里C/C++的misc control里加上了--wchar32,否则报错成千上万……

值得注意的是,两次报错所涉及的o文件都只与touchgfx的工程中产生的对象有关,比如button,box,screennameView等,感觉只要解决这个问题,就可以离一键移植更近一步了……

更新2:
研究了一下原因是各自的枚举和宽字符宽度定义各有不同导致的这种问题……想在编译器不换成AC6的情况下在命令行输入 -fshort-enums -fshort-wchar,然而找不到命令行了……

更新3:
虽然找到了对照表,但是AC5是没有对应-fshort-enums的命令……所以要继续尝试下去的话就还需要更换成AC6,所以现在这里暂时变成了一个keil AC5换成AC6的编译器切换问题……

更新4:
成功切换为AC6之后,编译错误只剩下一个!近了,更近了!

469_touchGFX_interfacing_test\469_touchGFX_interfacing_test.axf: Error: L6683E: Merge Section TextFlashSection(texts.o) has an element size of zero

更新5:
楼主其实进行到更新4的时候无比绝望,因为最后仅剩的报错怎么看都是程序的结构性问题……然鹅,楼主发现了,生成工程之前的操作步骤可以挽救!楼主后来在STM32CubeMX生成代码后没有直接进入touchgfx,而是先点开工程并编译确保工程成功编译,再进入touchgfx控件,生成代码,debug,问题就没了,连编译器都没换……
目前进度是可以将图片加载了,但是触控还需要调整。

topmax501
topmax501 回复qq_40845081: 老哥,你的问题解决了吗?怎么报错的?
12 个月之前 回复
qq_40845081
qq_40845081 方便的话可以加一下我的QQ给我一份工程文件吗?QQ:1301633011
大约一年之前 回复
qq_40845081
qq_40845081 兄弟,我用CubeMX生成代码后直接用keil编译还是有错误,想问一下你有这个问题吗?
大约一年之前 回复

1个回答

对触控的配置也总算是完成了,题主就把如何用keil作为IDE来解决这个STM32F429I-DISC1上整合STCube与touchGFX工程的手续给整理一下作为答案po出来:

1.首先对于一个空白的STM32CubeMX工程,要使能middleware中GRAPHICS选项,必须先使能TIM,CRC,SDRAM,LTDC,DMA2D,SPI,其次对于触控功能而言,I2C也应当使能。

2.设置层面上,关键点只有三点,一是LCD时钟要设置为6MHz;二是屏幕的显示驱动芯片要使能,GRAPHICS中找到相应选项enable;三是GRAPHICS 中platform settings中所有引脚包括SPI都要设置好,这一点不能偷懒。

3.做好上述步骤后,先配置好工程选项,如命名等,点选generate code生成Keil工程,然后再keil工程中继续编辑。

4.keil工程中应当先添加新的组,将stmf429idiscovery系列库中与命名为ts的两封文件的所有有关文件(只要被include了就源文件头文件都带上)都添加进去,然后找到touchController.c, include ts头文件,并取消下面几行中被注释掉的BSP函数

5.编译工程,在错误信息提示的两个函数前添加extern “C”一个在main.c 开头,一个在boardconfig.c 末尾。

6.再次编译,成功后即可在STCube中运行touchgfx进行GUI编辑了,至此大功告成。

注意:如果是用的野生屏幕,需要自行确定正确的LCD时钟,自行配置芯片与之连接的引脚(stm32F429芯片的情况下只能使用RGB屏幕)自行配制驱动显示芯片,驱动触控芯片,步骤4不适用于此情况。

希望能对研究touchGFX的同道有帮助。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐