简单理解和使用STM32中的DSP库

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,结果合理,大功告成!!!!!!

    物联沃分享整理
    物联沃-IOTWORD物联网 » 简单理解和使用STM32中的DSP库

    发表评论