如何使用STM32F4的DSP库

    我们平常所使用的CPU为定点CPU,意思是进行整点数值运算的CPU。当遇到形如1.1+1.1的浮点数运算时,定点CPU就遇到大难题了。对于32位单片机,利用Q化处理能发挥他本身的性能,但是精度和速度仍然不会提高很多。

    现在设计出了一个新的CPU,叫做FPU,这个芯片专门处理浮点数的运算,这样处理器就将整点数和浮点数分开来处理,整点数交由定点CPU处理而浮点数交由FPU处理。我们见到过TI的DSP,还有STM32F4系列的带有DSP功能的微控制器。前者笔者没有用过,不作评论,而后者如果需要用到FPU的浮点运算功能,必须要进行一些必要的设置。

    首先,由于浮点运算在FPU中进行,所以首先应该使能FPU运行。在system_init()中,定义__FPU_PRESENT和__FPU_USED

/* FPU settings------------------------------------------------------------*/

  #if (__FPU_PRESENT == 1)&& (__FPU_USED == 1)

    SCB->CPACR |= ((3UL<< 10*2)|(3UL << 11*2));  /*set CP10 and CP11 Full Access */

  #endif

这样就使能了FPU。

    对于上述改变,当程序中出现这种简单的加减乘除运算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即可。

    到这里,算是全部设置完毕,之差最后一步,调用!但是别小看了这一步,因为如果调用的不正确,前面的设置就白费了。在使用三角函数如sin()、cos()时不要直接写如上形式,因为他们函数的名字来自于math.h,所以你调用的仍旧是Keil库中的标准math.h。要使用arm_math.h中的arm_sin_f32()函数(见Line.5780,原函数见DSP_Lib\Source\FastMathFunctions),可以看到他利用的是三次样条插值法快速求值(见Line.263 /* Cubic interpolation process */)。

 

    注意一下例外函数,sqrt(),在arm_math.h中为arm_sqrt_f32()。使用他的时候需要同时开启#if(__FPU_USED == 1) && defined ( __CC_ARM   )才行,切记!还可以发现开方函数还有q15和q31之分,我想他们的区别就是精度的问题,但是他们没有应用FPU来计算,说白了就是利用0x5f3759df这个数进行快速开方,大家如果对这个数很陌生,查阅http://en.wikipedia.org/wiki/Fast_inverse_square_root。不过他的处理可能有些不同。

    另外还有很多DSP的函数都在DSP_Lib\Source中,有兴趣的自己研究吧。

STM32F4 DSP是一种用于在STM32F4系列微控制器上进行数字信号处理的。它提供了一系列的函数和算法,用于实现基本的数学运算、滤波、FFT、向量操作等。\[1\] 要在STM32F4使用DSP,需要进行一些环境配置。首先,在CUBEMX中生成工程时,需要勾选生成工程时添加所有。然后,在Keil中进行宏定义,包括__FPU_PRESENT=1、__TARGET_FPU_VFP、ARM_MATH_CM4和__CC_ARM。接下来,在Keil中添加DSP的位置,即../Drivers/CMSIS/DSP/Include。然后,将lib文件的lf后缀添加到工程的core文件夹下。最后,在使用函数时,需要包含头文件arm_math.h,并编译工程。\[2\] 通过以上配置和使用,您可以在STM32F4使用DSP来实现各种数字信号处理的功能。 #### 引用[.reference_title] - *1* [stm32F407-------DSP学习](https://blog.csdn.net/qq_53889131/article/details/125983021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32F4DSP](https://blog.csdn.net/weixin_44229819/article/details/124160520)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值