topmax501 2019-01-01 15:18 采纳率: 50%
浏览 4510
已采纳

在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,问题就没了,连编译器都没换……
目前进度是可以将图片加载了,但是触控还需要调整。

  • 写回答

1条回答 默认 最新

  • topmax501 2019-01-03 06:17
    关注

    对触控的配置也总算是完成了,题主就把如何用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的同道有帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?