问题描述: 最近使用Cube生成工程后,在Keil中使用Manage Runtime Environment即绿色小饼干按钮添加CMSIS的DSP库后编译报错。很有意思的是,STM32论坛上有外国朋友报告的同样的错误,都是30个Errors,5个Warning。
问题分析: 参考帖子:
http://www.openedv.com/forum.php?mod=viewthread&tid=78999&page=1
认为是Cube复制了库后,Keil从原始Packs目录下引用DSP库导致和Cube的库冲突的原因。
解决方法:
有一种非常简单的解决办法就是使用V6版本的编译器,但是发现使用某些框架会编译出错,因此不建议用这个办法。
比较好的解决办法是把工程目录下的Drivers\CMSIS\DSP\Include目录包含进工程,如图所示
再次编译就不会出错了
多说一句,似乎新版的CMSIS库中需要使用__TARGET_FPU_VFP=1宏来使能FPU(实际上是启用__FPU_USED宏,同时不需要手动定义__FPU_PRESENT),同时需要添加ARM_MATH_CM4等Cortex系列定义。定义后再编译,可以在system_stm32f4xx.c中的SystemInit()函数中看到FPU使能命令: