本帖最后由 sky.sun.zz 于 2017-3-11 17:41 编辑
[STM32F7] NUCLEO-F722ZE评测(5)如何在IAR中成功移植Coremark
这几天被这个STM32F722ZE在IAR环境中移植Coremark搞得焦头烂额,相信许多网友都有同感。为什么别人能够移植成功,而我却屡屡失败呢?本菜鸟遇到没有进展的项目总是不肯放弃。经过几天不断摸索,总结出在IAR7.80.4环境下成功移植Coremark的方法,不敢独享,在此与各位分享。
1、 首先,这片STM32F722ZE有点古怪,当你在把C/C++Compiler中Optiimizations的优化级别选择最高时(注:本次移植我们的Optiimizations就选择这个选项,不再重复)后,(见下图),你下载目标代码就会出错。
C/C++Compiler中Optiimization
在STM32 ST-LINK Utility 4.0中你被告知FLASH的扇区2被保护无法删除。见下图:虽然我们并未对该扇区施行写保护设置,这片芯片为何如此抗拒不得而知。
解决方法:在IAR的Dubgger-Download中选择Suppress download.
2、堆栈应该设置大点,我的设置如下:
3、在STM32CubeMX配置中,我们理所当然要使能I CACHE和D CACHE,当Optiimizations优化选项未达到最高等级时,代码能够运行,但达不到最高分。当Optiimizations优化选项选择最高时,串口助手一点反应都没有。经过单步调试发现,在初始化过程中,对串口的初始化竟然跳过,认为系统未配置USART口。实在百思不得其解。经过反复跟踪调试,最后发现是STM32CubeMX为你埋雷:在初始化函数中对ICACHE和D CACHE的初始化必须放在初始化串口代码的后面。这个难缠的STM32F722ZE Core mark最后终于搞定。
下面代码的顺序可能曾经消耗了你几个不眠之夜。
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART3_UART_Init();
SCB_EnableICache(); //挪个顺序
SCB_EnableDCache();
我跑了1092分,你呢?
4、在IAR 7.80.4中STM32F722ZE其实还未登堂,请用STM32F722ZC替代。FIASH长度短1半,凑合着用了。
读完本贴,你必定也已经搞定STM32F722ZE Core mark了。祝你成功!
波特率9600 |