使用STM32F4浮点运算(FPU)功能开启+使用DSP库

涉及到的参数:这里以stm32F4  MDK5.2为例

(1)配置开启FPU功能标志

#define   __FPU_PRESENT       1U   //在stm32f4xx.h 系统已经配置

#define   __FPU_USED          1U  //这个在core_cm4.h中,需要配置

由图知,要先判断__CC_ARM 是否定义 ,再判断__TARGET_FPU_VFP是否定义,最后判断__FPU_PRESENT是否已经配置为1,前面3个条件都为真的情况下,才配置__FPU_USED=1;其实可以简单化,直接在用户程序中配置__FPU_USED=1即可;

__CC_ARM:  #define   __CC_ARM     //1 有的系统会自己配置

__TARGET_FPU_VFP:定义设备有FPU功能,所以加入下句:

  #define   __TARGET_FPU_VFP    //1

当然__CC_ARM、__TARGET_FPU_VFP也可以在MDK->Option->C/C++->…中定义,如下图

(2)浮点配置函数在void SystemInit(void)即在system_stm32f4xx.c中

void SystemInit(void)

{

  /* 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_PRESENT  __FPU_PRESENT,直接把条件编译给删了,这句程序就有效了;如果有的库不带这几句配置,那么用户自己添加

…………………..

}

(3)加入头文件

#include “arm_math.h”  使用STM32自带的数学处理函数,同时添加arm_math.h头文件路径,这时编译会报错,提示:#error "Define according the used Cortex core ARM_MATH_CM7, ARM_MATH_CM4, ARM_MATH_CM3, ARM_MATH_CM0PLUS or ARM_MATH_CM0",是说没有定义内核数学类型,解决,2个方法:

方法1:在MDK软件中配置,我是用的是M4,选择ARM_MATH_CM4

方法2:用户单独定义一下ARM_MATH_CM4即可

2个方法看用户喜欢哪个

4MDK配置如下图,在浮点运算选项中选择:Use Single Precision

如果选择了Not Used 编译时会报错

以上配置已经可以使用STM32的浮点运算FPU功能了,测试结果,用2个小数相乘,在线仿真,看反汇编中出现xxx.F32语句,即说明开启了FPU功能

还有的会在MDK配置C++ define中加上ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING这两个配置

ARM_MATH_ROUNDING是四舍五入功能,可以不加;

ARM_MATH_MATRIX_CHECK是矩阵参数检查功能,可以不加

5)如果使用STM32自带的dsp运算函数还要添加对应的库函数

以上只是开启STM32内部的硬件FPU浮点运算功能,这里还没有涉及到DSP

要想使用DSP还得做一些处理

  1. 加入dsp数学库(加到哪个文件夹下可随意)

 

arm_cortexM4lf_math.lib是什么功能呢?

这个是下面具体dsp函数的汇编或由之编译的库,下面的具体功能函数是c编写的,如果直接这样使员工的话,会导致效率变低,所以使用对应的汇编函数实现,可以不关注这个lib文件,如果想了解具体的功能函数,可以参照下面说明,查看具体的.C文件查找对应的函数

arm_cortexM4lf_math.lib已经包含了所有dsp具体功能函数,其实只加入这个就可以了,这个.lib文件是打不开的;  不是必须加入下面对应的.C文件,这里提供.C文件只是让设计者去了解如何调用函数,及内部程序实现步骤

但是反过来不行,如果之加入对应的c文件,而不加入lib文件会编译报错

2.官方带的具体功能dsp函数库(这个不必须添加,只是设计者了解,知道函数名)

3.使用方法

比如使用正弦sin要加入arm_sin_f32.c(不必须)

余弦cos要加入  arm_cos_f32.c调用(不必须)

这里没有对应的头文件,要加入其它头文件,可以看具体c文件

打开对应的库.c文件,里面有函数名,实际使用得时候就按这个来,不能按以前math.h中对应的函数名了

CosVal=arm_cos_f32(radians);//计算余弦函数

可以只加入arm_cortexM4lf_math.lib文件,然后把对应函数功能的c文件移除工程,继续调用对应的dsp函数,一样的运行

异常处理:

有时配置FPU不正确,会出现HardFault_Handler,原因是:编译器产生了浮点运算指令,但是硬件没有开启浮点运算功能,这样一运算就错误,要检查一遍配置是否正确

使用STM32F4浮点运算(FPU)功能开启+使用DSP库_arm_cos_f32_你的青春我的梦的博客-CSDN博客

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值