STM32中DSP库简单理解和使用

您所在的位置:网站首页 数学中最大值和最小值用什么符号表示 STM32中DSP库简单理解和使用

STM32中DSP库简单理解和使用

2023-06-14 13:02| 来源: 网络整理| 查看: 265

STM32中DSP库简单理解和使用

主要参考arm_math.h中的内容编写,以STM32F091为例

文章目录 STM32中DSP库简单理解和使用一、什么是DSP二、大概使用步骤选择合适lib引用库添加预置宏 二、具体使用步骤(基于cubmx)1.使用STM32CubeMX生成Keil5工程2.选择合适lib和添加2.添加宏定义3.在相应c文件中引用 arm_math.h就可以使用了测试

一、什么是DSP

数字信号处理(DigitalSignal Processing,简称 DSP ) 是一门涉及许多学科而又广泛应用于许多领 域的新兴学科,通过利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、 压缩、识别等处理,以得到符合人们需要的信号形式。

STM32中添加DSP库主要用于数据的计算和处理,如复数,矩阵,三角函数,插值、求最大值求最小值、fir滤波器和 FFT等。

以下为arm_math.h对于DSP的简介

本用户手册描述了CMSIS DSP软件库,

*一套通用信号处理函数,可用于基于Cortex-M处理器的设备。

*库被划分为许多函数,每个函数覆盖一个特定的类别:

-基本的数学函数

-快速的数学函数

-复杂的数学函数

-过滤器

-矩阵函数

-变形

-电机控制功能

-统计函数

-支持函数

-插值函数

*该库有独立的函数用于操作8位整数、16位整数、32位整数和32位浮点值。

二、大概使用步骤 选择合适lib

首先要搞清楚所使用单片机的端绪是小端还是大端,可以查手册得知是大端还是小端。如STMF091是小端(Little Endian)模式。 在这里插入图片描述 以下为DSP库类型。名称中带l的为小端模式(Little Endian)库,带d的为大端模式(Big Endian)库,带f的为浮点单元,sp代表单精度,dp代表双精度。 以STM32F091为例,则选择在CMSIS中加入arm_cortexM0l_math.lib

*库安装程序在Lib文件夹中包含库的预构建版本。

arm_cortexM7lfdp_math.lib(Cortex-M7,小端序,双精度浮点单元) arm_cortexM7bfdp_math.lib(Cortex-M7,大端序,双精度浮点单元) arm_cortexM7lfsp_math.lib (Cortex-M7,小端序,单精度浮点单元) arm_cortexM7bfsp_math.lib(Cortex-M7,大端序和单精度浮点) arm_cortexM7l_math.lib (Cortex-M7,小端序) arm_cortexM7b_math.lib (Cortex-M7,大端序) arm_cortexM4lf_math.lib (Cortex-M4,小端序,浮点单元) arm_cortexM4bf_math.lib(Cortex-M4,大端序,浮点单元) arm_cortexM4l_math.lib (Cortex-M4,小端序) arm_cortexM4b_math.lib (Cortex-M4,大端序) arm_cortexM3l_math.lib (Cortex-M3,小端序) arm_cortexM3b_math.lib (Cortex-M3,大端序) arm_cortexM0l_math.lib (Cortex-M0 / Cortex-M0+,小端序) arm_cortexM0b_math.lib (Cortex-M0 / Cortex-M0+,大端序) arm_ARMv8MBLl_math.lib (Armv8-M基线,小端序) arm_ARMv8MMLl_math.lib (Armv8-M主线,小端序) arm_ARMv8MMLlfsp_math.lib(Armv8-M主线,小端序,单精度浮点单元) arm_ARMv8MMLld_math.lib (Armv8-M主线,小端序,DSP指令) arm_ARMv8MMLldfsp_math.lib Armv8-M主线,小端序,DSP指令,单精度浮点单元 引用库

*库函数声明在公共文件arm_math.h中,该文件位于Include文件夹中。

*只需包含此文件并在应用程序中链接适当的库,然后开始调用库函数。该库支持single

*对于具有小端序和大端序的Cortex-M内核,公共头文件 arm_math.h。浮点单元(FPU)变体将使用相同的头文件。

添加预置宏

不同的芯片要添加的预置宏不尽相同,其与处理器型号有关,同样以STM32F091为例,查手册可知,其为Cortex-M0类型 在这里插入图片描述 或者,可以通过下表确认处理器型号 在这里插入图片描述

*定义适当的预处理器宏ARM_MATH_CM7或ARM_MATH_CM4或ARM_MATH_CM3或ARM_MATH_CM0或ARM_MATH_CM0plus取决于应用程序中的目标处理器。

*对于Armv8-M内核,定义预处理器宏ARM_MATH_ARMV8MBL或 ARM_MATH_ARMV8MML。

*如果Armv8-M主线内核支持DSP指令,则设置预处理器宏__DSP_PRESENT。

二、具体使用步骤(基于cubmx) 1.使用STM32CubeMX生成Keil5工程

特别注意:点击Project Manager打开工程设置窗口,点击Code Generator选项卡,在STM32Cube Firmware Library Package中选择Copy all used libraries into the project folder。(这样才会在生成的文件中添加DSP库) 在这里插入图片描述

2.选择合适lib和添加

打开keil,双击Drivers/CMSIS,选第三个,添加已经存在的文件 在这里插入图片描述 打开工程下这个路径 在这里插入图片描述 选择合适lib加入 在这里插入图片描述 如下即为添加成功 在这里插入图片描述

2.添加宏定义

点击魔法棒,C/C++选项,添加宏定义,因为f091为Cortex-M0类型,所以添加ARM_MATH_CM0宏定义(注意:宏定义间的符号为英文逗号) 在这里插入图片描述 在C/C++选项卡中,的Include Paths中添加DSP库的路径:\Drivers\CMSIS\DSP\Include 在这里插入图片描述 在这里插入图片描述 点 OK --> 点OK

3.在相应c文件中引用 arm_math.h就可以使用了

官方有关于HAL库的DSP库例程,大概在此路径下D:\stm3232\STM32Cube_FW_F0_V1.11.4\Drivers\CMSIS\DSP\Examples,同时在工程文件下.Drivers\CMSIS\DSP\Examples也可以看到例程 如果找不到的话,再次推荐一个超超超超超超超超级好用的搜文件软件 everything(点击即可跳转至官方网站,可以挑选适合自己设备的版本下载)

测试 /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "arm_math.h" /* USER CODE END Includes */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ float data; /* USER CODE END PD */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { data = arm_cos_f32(PI/3) ; /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */

理论结果为0.5,结果合理,大功告成!!!!!! 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3