打印
[STM32F4]

touchGFX的初始化

[复制链接]
2509|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LMCH|  楼主 | 2019-5-5 21:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 LMCH 于 2019-5-14 15:16 编辑

我在野火的429开发板上移植touchGFX为429 discovery生成的代码,编译后下载到开发板上,调试运行到hal.initialize()后,出现hard fault。LCD和SDRAM都初始化成功了,只不过显示的花屏幕。
不知道这个hal.initialize()到底干了什么。查不到资料。有没有人玩儿移植啊?

使用特权

评论回复
沙发
mmuuss586| | 2019-5-12 11:35 | 只看该作者
问下野火看看

使用特权

评论回复
板凳
LMCH|  楼主 | 2019-5-12 19:36 | 只看该作者

问过了

使用特权

评论回复
地板
xinpian101| | 2019-5-12 23:51 | 只看该作者
初始化吧,看看这个函数定义的原型里有哪些操作。

使用特权

评论回复
5
LMCH|  楼主 | 2019-5-13 19:38 | 只看该作者
xinpian101 发表于 2019-5-12 23:51
初始化吧,看看这个函数定义的原型里有哪些操作。

只能看到HAL类定义,成员函数的实现是不开源的,封装在库里,所以不知道

使用特权

评论回复
6
LMCH|  楼主 | 2019-5-14 15:14 | 只看该作者
本帖最后由 LMCH 于 2019-5-14 15:17 编辑

开发环境用的是truestudio。
在启动文件中,以前不知道Reset_Handler段的  bl __libc_init_array干什么用,就注释掉了,以前程序也没出现问题,这次不行了。今天打开看了看,把注释去掉,编译下载,成功了。
然而还没搞明白__libc_init_array到底干了什么。

使用特权

评论回复
7
LMCH|  楼主 | 2019-5-14 15:33 | 只看该作者
至于hal.initialize(),调试时通过反汇编窗口看到,
96               hal.initialize();
080125d2:   ldr     r0, [r7, #20]
080125d4:   bl      0x8015b74 <_ZN8touchgfx3HAL10initializeEv>

_ZN8touchgfx3HAL10initializeEv:
08015b75:   push    {r4, lr}
08015b77:   mov     r4, r0
08015b79:   bl      0x8012bdc <touchgfx::OSWrappers::initialize()>  ;调用OSWrappers::initialize(),创建同步信号量
08015b7d:   ldr     r0, [r4, #4]   ;r4=0x2000d43c,是hal实例的引用。执行后r0=0x2000d2f0,是dma实例
08015b7f:   ldr     r3, [r0, #0]
08015b81:   ldr     r3, [r3, #12]
08015b83:   blx     r3   ;调用dma.initialize(),初始化DMA2D
08015b85:   ldr     r0, [r4, #12]
08015b87:   ldr     r3, [r0, #0]
08015b89:   ldr     r3, [r3, #8]
08015b8b:   blx     r3 ;调用tc.init(),初始化触摸控制
08015b8d:   ldr     r3, [r4, #0]
08015b8f:   mov     r0, r4
08015b91:   ldr     r3, [r3, #96]   ; 0x60
08015b93:   ldmia.w sp!, {r4, lr}
08015b97:   bx      r3 ;调用hal.configureInterrupts(),配置中断

使用特权

评论回复
8
LMCH|  楼主 | 2019-5-17 10:44 | 只看该作者
ST上跑STemWom的时候,片上的CRC时钟必须打开。
在touchGFX的资料上没有注意到哪儿说要打开CRC,在使用touchGFX创建stm32f429 discovery的应用的时候也没有看到CRC时钟的那一句代码在哪儿。但是如果CRC没有开,会导致hardfault。
使用STM32CubeMX创建project的时候,必须要激活CRC后才能选择touchGFX或emWin的,生成的代码中也有打开CRC的语句。调试时,发现在touchgfx_generic_init()中调用FontManager::setFontProvider(&fontProvider)或FrontendHeap& heap = FrontendHeap::getInstance()有个CRC LOCK的检查,这段汇编没仔细去看了,反正没有CRC不行。

使用特权

评论回复
9
磨砂| | 2019-6-12 09:02 | 只看该作者
野火是怎么解答的呢

使用特权

评论回复
10
LMCH|  楼主 | 2019-6-13 09:47 | 只看该作者
本帖最后由 LMCH 于 2019-6-13 09:48 编辑
磨砂 发表于 2019-6-12 09:02
野火是怎么解答的呢

野火没有解答。我后来尝试用Cube MX生成代码,发现要打开CRC,我再在原来的工程里面开了CRC时钟后,确实能够使用touchGFX了。调试时看到touchgfx库调用检查crc的函数,前面我提到了,可能是发现CRC没有打开,就会调用硬件中断。

使用特权

评论回复
11
磨砂| | 2019-6-13 11:34 | 只看该作者
LMCH 发表于 2019-6-13 09:47
野火没有解答。我后来尝试用Cube MX生成代码,发现要打开CRC,我再在原来的工程里面开了CRC时钟后,确实能 ...

好的 非常感谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

62

帖子

2

粉丝