STM32中DSP库简单理解和使用
主要参考arm_math.h中的内容编写,以STM32F091为例
一、什么是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(点击即可跳转至官方网站,可以挑选适合自己设备的版本下载)文章来源:https://www.toymoban.com/news/detail-553481.html
测试
/* 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,结果合理,大功告成!!!!!!
文章来源地址https://www.toymoban.com/news/detail-553481.html
到了这里,关于STM32中DSP库简单理解和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!