专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
DSP
STM32F4xx FPU和DSP库的使用
2019-07-13 09:40
发布
生成海报
站内文章
/
DSP
9474
0
1355
STM32F4xx
属于
Cortex M4F
架构,带有
32
位的单精度硬件
FPU(Float Point Unit)
,支持浮点指令集,相对比
M0
和
M3
架构,浮点运算性能高出数十倍甚至上百倍。
CortexTMM4 FPU
是
ARMTMFPv4-SP
单精度
FPU
一种实现形式。
1
、硬件FPU
的开启
(1
)通过修改代码实现
默认情况下,
STM32F4xx
的
FPU
是禁用的,可以通过设置协处理器控制寄存器(
CPACR
)来开启硬件
FPU
。在
keil
编程环境下,可以通过定义全局宏定义标识符
_FPU_PRESENT
和
_FPU_USED
都为
1
来开启硬件
FPU
。其中宏定义标识符
_FPU_PRESENT
用来确认处理是否带有
FPU
功能,标识符
_FPU_USED
用来确定是否开启
FPU
功能。实际上,因为
STM32F4
是带有
FPU
功能的,所以在
stm32f4xx.h
头文件中,默认定义
_FPU_PRESENT
为
1
。可以在文件
stm32f4xx.h
中找到如下定义。
若要开启
FPU
还需要在头文件
stm32f4xx.h
中定义标示符
_FPU_USED
的值为
1
。即在刚才的宏定义下边添加一个宏定义。
(2
)通过软件设置实现
如果使用的
keil
是
5.0
以上的版本,也可以直接在
keil
里设置开启
FPU
。点击图标
(
Options forTarget…
),在
”Target”
选项卡里的
“Code Generation”
下的
“Floating Point Hardware”
下拉菜单中选择
”Use FPU”
。点击
”OK“
完成设置。经过设置之后,在程序编译时编译器会自动加入宏定义标识符
_FPU_USED
为
1
。
至此则完成硬件
FPU
的使能。在程序中如果遇到浮点运算就会使用硬件
FPU
相关指令,执行浮点运算,大大提升系统浮点运算速度。
2、DSP库的使用
STM32F4
的
Cortex-M4
内核不仅内置硬件
FPU
单元,还支持
DSP
多种指令集,比如支持单周期乘加指令(
MAC
)、优化的单指令多数据指令(
SIMD
)等。因此
Cortex-M4
执行所有的
DSP
指令集都可以在单周期内完成,而
Cortex-M3
和
M0
需要多个指令和多个周期才能完成同样的功能。比如开方运算,
M3
和
M0
只能通过迭代法(标准数学函数库)计算,而
M4F
直接调用
VSQRT
指令完成。
(1
)获取DSP库
ST
官方提供了一整套的
DSP
库方便我们开发使用。在
ST
提供的标准库:
stm32f4_dsp_stdperiph_lib.zip
里面就有(该文件可以从
ST
官网上下载:
http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/PF257901
下载,文件名:
STSW-STM32065
)。下载解压缩之后,在目录
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0→Libraries→CMSIS
→
DSP_Lib
下可以找到
DSP
库文件和测试实例。
Sourse
中是所有
DSP
库文件源代码,
Examples
文件夹下是一些测试实例。
(2
)DSP库简介
DSP
库主要包含以下几个分库:
BasicMathFunctions
基本数学函数:提供浮点数的各种基本运算函数,如向量加减乘除等运算。
CommonTables
arm_common_tables.c
文件提供位翻转或相关参数表。
ComplexMathFunctions
复杂数学功能,如向量处理,求模运算的。
ControllerFunctions
控制功能函数。包括正弦余弦,PID
电机控制,矢量Clarke变换,矢量Clarke逆变换等。
FastMathFunctions
快速数学功能函数。提供了一种快速的近似正弦,余弦和平方根等相比CMSIS
计算库要快的数学函数。
FilteringFunctions
滤波函数功能,主要为FIR
和LMS(最小均方根)等滤波函数。
MatrixFunctions
矩阵处理函数。包括矩阵加法、矩阵初始化、矩阵反、矩阵乘法、矩阵规模、矩阵减法、矩阵转置等函数。
StatisticsFunctions
统计功能函数。如求平均值、最大值、最小值、计算均方根RMS
、计算方差/标准差等。
SupportFunctions
支持功能函数,如数据拷贝,
Q
格式和浮点格式相互转换,
Q
任意格式相互转换。
TransformFunctions
变换功能。包括复数
FFT
(
CFFT
)
/
复数
FFT
逆运算(
CIFFT
)、实数
FFT
(
RFFT
)
/
实数
FFT
逆运算(
RIFFT
)、和
DCT
(离散余弦变换)和配套的初始化函数。
ST
提供了
.lib
格式的文件,方便使用这些库。这些
.lib
文件就是由
Source
文件夹下的源码编译生成的,如果想看某个函数的源码,可以在
Source
文件夹下面查找。
.lib
格式文件路径:
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0→Libraries
→
CMSIS→Lib
→
ARM
,总共有
8
个
.lib
文件,和
M4F
相关的有两个:
arm_cortexM4bf_math.lib
(
浮点
Cortex-M4
大端模式
)
arm_cortexM4lf_math.lib
(
浮点
Cortex-M4
小端模式
)
STM32F4
的内核
CortexM4F
采用小端模式,所以选择:
arm_cortexM4lf_math.lib(
浮点
Cortex-M4
小端模式
)
。
(3
)DSP库编程环境搭建
在设置使用
DSP
库之前首先要先开启硬件
FPU
,然后按照如下步骤搭建
DSP
库运行环境。
首先添加库文件。在工程目录下新建
DSP_LIB
文件夹用于存放库文件。然后把
arm_cortexM4lf_math.lib和相关头文件(路径STM32F4xx_DSP_StdPeriph_Lib_V1.4.0à LibrariesàCMSISà Include 里的文件)拷贝到
DSP_LIB
文件夹中。
然后打开工程,新建
DSP_LIB
分组,并将
arm_cortexM4lf_math.lib
添加到工程里面。
添加好文件之后,需要添加头文件包含路径,将第一步拷贝的
Include
文件夹和
DSP_LIB
文件夹,加入头文件包含路径。打开工程属性设置面板,然后点击
”C/C++“
选项卡,点击对号处,弹出
include path
设置面板。添加
”..DSP_LIB“
和
“..DSP_LIBInclude“
两个路径。
最后,为了能够使用
DSP
库的所有功能,还需要添加以下几个全局宏定义:
1
、
__FPU_USED
2
、
__FPU_PRESENT
3
、
ARM_MATH_CM4
4
、
__CC_ARM
5
、
ARM_MATH_MATRIX_CHECK
6
、
ARM_MATH_ROUNDING
添加方法是打开工程属性设置面板,然后点击
”C/C++“
选项卡,在“
Preprocessor Symbols“
下的
”Define
:
”
文本框中进行添加。两个宏之间用“,
”
隔开。如果已经开启了硬件
FPU
,则无需添加
__FPU_USED
和
__FPU_PRESENT
这两个宏。
至此,
STM32F4
的
DSP
库运行环境已经搭建好了。可以使用
DSP
库的相关函数了。
参考:正点原子——ALIENTEK探索者STM32F407开发板相关资料
Ta的文章
更多
>>
STM32F4xx FPU和DSP库的使用
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮