打印
[STM32F4]

touchGFX的初始化

[复制链接]
554|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lizye|  楼主 | 2021-4-12 22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开发板上移植touchGFX为429 discovery生成的代码,编译后下载到开发板上,调试运行到hal.initialize()后,出现hard fault。

使用特权

评论回复
沙发
huangchui| | 2021-4-12 22:28 | 只看该作者
LCD和SDRAM都初始化成功了?

使用特权

评论回复
板凳
lizye|  楼主 | 2021-4-12 22:30 | 只看该作者
成功了,只不过显示的花屏幕。

使用特权

评论回复
地板
jlyuan| | 2021-4-12 22:32 | 只看该作者
不知道这个hal.initialize()到底干了什么

使用特权

评论回复
5
tian111| | 2021-4-12 22:38 | 只看该作者
有没有人玩儿移植啊?

使用特权

评论回复
6
pengf| | 2021-4-12 22:41 | 只看该作者
初始化吧,看看这个函数定义的原型里有哪些操作。

使用特权

评论回复
7
lizye|  楼主 | 2021-4-12 22:42 | 只看该作者
只能看到HAL类定义,成员函数的实现是不开源的,封装在库里,所以不知道

使用特权

评论回复
8
lizye|  楼主 | 2021-4-12 22:44 | 只看该作者
开发环境用的是truestudio。
在启动文件中,以前不知道Reset_Handler段的  bl __libc_init_array干什么用,就注释掉了,以前程序也没出现问题,这次不行了。今天打开看了看,把注释去掉,编译下载,成功了。

使用特权

评论回复
9
lizye|  楼主 | 2021-4-12 22:47 | 只看该作者
然而还没搞明白__libc_init_array到底干了什么。

使用特权

评论回复
10
lizye|  楼主 | 2021-4-12 22:50 | 只看该作者
至于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(),配置中断

使用特权

评论回复
11
午夜粪车| | 2021-4-12 22:52 | 只看该作者
ST上跑STemWom的时候,片上的CRC时钟必须打开。

使用特权

评论回复
12
wyjie| | 2021-4-12 22:55 | 只看该作者
在touchGFX的资料上没有注意到哪儿说要打开CRC,在使用touchGFX创建stm32f429 discovery的应用的时候也没有看到CRC时钟的那一句代码在哪儿

使用特权

评论回复
13
jlyuan| | 2021-4-12 22:55 | 只看该作者
用strstr()可以判断出数组里有没有我需要的读取的指令,如果有可以用strlen()算出长度,然后再根据这个长度提取出来就OK了。

使用特权

评论回复
14
zwll| | 2021-4-12 22:57 | 只看该作者
但是如果CRC没有开,会导致hardfault。

使用特权

评论回复
15
lizye|  楼主 | 2021-4-12 22:59 | 只看该作者
使用STM32CubeMX创建project的时候,必须要激活CRC后才能选择touchGFX或emWin的,生成的代码中也有打开CRC的语句。调试时,发现在touchgfx_generic_init()中调用FontManager::setFontProvider(&fontProvider)或FrontendHeap& heap = FrontendHeap::getInstance()有个CRC LOCK的检查,这段汇编没仔细去看了,反正没有CRC不行。

使用特权

评论回复
16
jiahy| | 2021-4-12 23:05 | 只看该作者
用Cube MX生成代码

使用特权

评论回复
17
lizye|  楼主 | 2021-4-12 23:07 | 只看该作者
发现要打开CRC,我再在原来的工程里面开了CRC时钟后,确实能够使用touchGFX了

使用特权

评论回复
18
lizye|  楼主 | 2021-4-12 23:11 | 只看该作者
调试时看到touchgfx库调用检查crc的函数,前面我提到了,可能是发现CRC没有打开,就会调用硬件中断。

使用特权

评论回复
19
lizye|  楼主 | 2021-4-12 23:15 | 只看该作者
多谢大家讨论这么多哈

使用特权

评论回复
20
晓伍| | 2021-5-7 13:22 | 只看该作者
初始化都没有成功吗

使用特权

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

本版积分规则

852

主题

9757

帖子

2

粉丝