找回密码
 注册
关于网站域名变更的通知
查看: 344|回复: 1
打印 上一主题 下一主题

如何使用STM32F4的DSP库

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-11-12 13:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
我们平常所使用的CPU为定点CPU,意思是进行整点数值运算的CPU。当遇到形如1.1+1.1的浮点数运算时,定点CPU就遇到大难题了。对于32位单片机,利用Q化处理能发挥他本身的性能,但是精度和速度仍然不会提高很多。
2 b  P; L3 S2 P9 k" y7 j# o! x9 `3 S) Y
    现在设计出了一个新的CPU,叫做FPU,这个芯片专门处理浮点数的运算,这样处理器就将整点数和浮点数分开来处理,整点数交由定点CPU处理而浮点数交由FPU处理。我们见到过TI的DSP,还有STM32F4系列的带有DSP功能的微控制器。前者笔者没有用过,不作评论,而后者如果需要用到FPU的浮点运算功能,必须要进行一些必要的设置。
/ V9 [" N+ x3 A9 T+ d
5 q$ z3 a4 k- Y, f, h    首先,由于浮点运算在FPU中进行,所以首先应该使能FPU运行。在system_init()中,定义__FPU_PRESENT和__FPU_USED
) O: A" @; U7 |( P3 @- }9 {1 r3 j  z; c, D& U
/* FPU settings------------------------------------------------------------*/
& J0 e! `$ X$ T9 `7 X7 c9 \* w8 z# d$ X+ l* f) }  m/ o2 ]. ?
  #if (__FPU_PRESENT == 1)&& (__FPU_USED == 1)4 l% K9 ^# x7 X
. K8 U0 c& [. M* w( _
    SCB->CPACR |= ((3UL<< 10*2)|(3UL << 11*2));  /*set CP10 and CP11 Full Access */
8 X4 z, z* E6 E( j: W. o3 e2 T) D
5 o/ Y! _* N3 E1 k: k4 {  #endif. y( J8 }1 o9 K" @0 o- E0 m4 g

. B! E1 G8 y" v+ ~9 a% \) l9 S" h这样就使能了FPU。! {* G; [3 e- `: g6 E. \

& s( U- u( ?4 R7 A% ]; T. a    对于上述改变,当程序中出现这种简单的加减乘除运算FPU就起作用了。但是对于复杂的如三角运算、开方运算等,我们就需要加入math.h头文件。但是如果单纯的加入他,那么Keil会自动调用内部的math.h,该头文件是针对ARM处理器的,专门用于定点CPU和标准算法(IEEE-754)。对于使用了FPU的STM32F4是没有任何作用的。所以,需要将math.h换成ST的库,即arm_math.h。在该头文件中,涉及到另一个文件core_cmx.h(x=0、3、4),当然了,如同STM32F1系列一样,在工程中加入core_cm4.h即可。8 f2 ^3 J6 c; a2 E9 `) a# C" ~
1 L8 \; D* Y% t  {
    到这里,算是全部设置完毕,之差最后一步,调用!但是别小看了这一步,因为如果调用的不正确,全面的设置就白费了。在使用三角函数如sin()、cos()时不要直接写如上形式,因为他们函数的名字来自于math.h,所以你调用的仍旧是Keil库中的标准math.h。要使用arm_math.h中的arm_sin_f32()函数(见Line.5780,原函数见DSP_Lib\Source\FastMathFunctions),可以看到他利用的是三次样条插值法快速求值(见Line.263 /* Cubic interpolation process */)。" o* j$ u/ L; l. p6 h8 }% e% ~

; w# e" g6 B$ i9 p; d    注意一下例外函数,sqrt(),在arm_math.h中为arm_sqrt_f32()。使用他的时候需要同时开启#if(__FPU_USED == 1) && defined ( __CC_ARM   )才行,切记!还可以发现开方函数还有q15和q31之分,我想他们的区别就是精度的问题,但是他们没有应用FPU来计算,说白了就是利用0x5f3759df这个数进行快速开方

$ r0 f$ r6 X# s% j" G  [$ o

该用户从未签到

2#
发表于 2021-11-12 15:13 | 只看该作者
我们平常所使用的CPU为定点CPU,意思是进行整点数值运算的CPU, o( M8 A6 b7 b* w8 w3 r0 j
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 23:20 , Processed in 0.140625 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表