打印
[其他ST产品]

STM32浮点运算单元(FPU)和DSP库使用

[复制链接]
547|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wang6623|  楼主 | 2023-11-20 23:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
浮点运算单元(FPU)
针对M4往上内核的芯片都具有FPU浮点运算单元。可以加快浮点数的运算速度。

1.1 所用硬件
硬件:STM32F401CCU6系统板(淘宝十几块钱一个系统板)。
软件:CubeMX、Keil(5.38,建议使用新版本的,对于宏定义没有的部分会有灰色提示)。

1.2 配置FPU
首先打开system_stm32f4xx.c可以看到,在系统初始化函数中,需要有

__FPU_PRESENT == 1
__FPU_USED ==1
需要有这两个定义才可以配置。
————————————————

使用特权

评论回复
沙发
wang6623|  楼主 | 2023-11-20 23:52 | 只看该作者
而在这个文件中引用了头文件:stm32f4xx.h

使用特权

评论回复
板凳
wang6623|  楼主 | 2023-11-20 23:53 | 只看该作者
在stm32f4xx.h中引用了stm32f401xc.h

使用特权

评论回复
地板
wang6623|  楼主 | 2023-11-20 23:53 | 只看该作者
在stm32f401xc.h中已经对 __FPU_PRESENT == 1 定义过了。

使用特权

评论回复
5
wang6623|  楼主 | 2023-11-20 23:53 | 只看该作者
然后就差 __FPU_USED ==1 了。
打开core_cm4.h,可以看到,默认 __FPU_USED 是为0的。
显然,这里是因为没有定义 __TARGET_FPU_VFP,所以下面的没有打开。

使用特权

评论回复
6
wang6623|  楼主 | 2023-11-20 23:53 | 只看该作者

使用特权

评论回复
7
wang6623|  楼主 | 2023-11-20 23:53 | 只看该作者
因此,定义上就可以了。点击魔术棒,添加上如下定义:,__TARGET_FPU_VFP。(注意:是有个逗号和前面分开的)。然后点OK。

使用特权

评论回复
8
wang6623|  楼主 | 2023-11-20 23:53 | 只看该作者
如果有的是因为 __CC_ARM 没有定义的话, 那就也添加上去就好了。

使用特权

评论回复
9
wang6623|  楼主 | 2023-11-20 23:53 | 只看该作者
然后再次看就发现,__FPU_PRESENT == 1前面不是已经有了吗,为什么这里还是灰色的。
那是因为在这个文件中并没有包含定义__FPU_PRESENT的文件。

使用特权

评论回复
10
wang6623|  楼主 | 2023-11-20 23:54 | 只看该作者
解决方法1(修改文件的方法都不建议):在这个文件中引用 定义有__FPU_PRESENT的文件。如下图。

使用特权

评论回复
11
wang6623|  楼主 | 2023-11-20 23:54 | 只看该作者
解决方法2:把__FPU_PRESENT=1U在这里再添加一次。
注意是1U 不是1,如果写成1,就和stm32f401cx.h中定义的不一样,会报很多重定义警告。

使用特权

评论回复
12
wang6623|  楼主 | 2023-11-20 23:54 | 只看该作者
此时再看。浮点运算就配置好了。

使用特权

评论回复
13
wang6623|  楼主 | 2023-11-20 23:54 | 只看该作者
最后,勾选上使用单精度硬件浮点运算即可。

使用特权

评论回复
14
wang6623|  楼主 | 2023-11-20 23:54 | 只看该作者
CMSIS-DSP
2.1 添加DSP库
两种方法
第一种:直接下载源码,放到工程文件夹,并且添加头文件路径。
第二种:CubeMX添加。

这里用第二种(多方便)

在生成工程页面选择。

使用特权

评论回复
15
wang6623|  楼主 | 2023-11-20 23:55 | 只看该作者

使用特权

评论回复
16
wang6623|  楼主 | 2023-11-20 23:55 | 只看该作者
勾选上之后点击OK

使用特权

评论回复
17
wang6623|  楼主 | 2023-11-20 23:55 | 只看该作者
勾选上之后,生成工程。

使用特权

评论回复
18
wang6623|  楼主 | 2023-11-20 23:55 | 只看该作者
打开工程可以看到,已经添加好了。

使用特权

评论回复
19
wang6623|  楼主 | 2023-11-20 23:56 | 只看该作者
此时,在main.c文件中,添加#include “arm_math.h”,然后编译会报错。

使用特权

评论回复
20
wang6623|  楼主 | 2023-11-20 23:56 | 只看该作者
这是因为在arm_math.h中会根据内核类型引用不同的文件。因此这里需要定义内核。

使用特权

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

本版积分规则

62

主题

409

帖子

0

粉丝