STM32中DSP庫簡(jiǎn)單理解和使用
主要參考arm_math.h中的內(nèi)容編寫,以STM32F091為例
一、什么是DSP
數(shù)字信號(hào)處理(DigitalSignal Processing,簡(jiǎn)稱 DSP ) 是一門涉及許多學(xué)科而又廣泛應(yīng)用于許多領(lǐng) 域的新興學(xué)科,通過利用計(jì)算機(jī)或?qū)S锰幚碓O(shè)備,以數(shù)字形式對(duì)信號(hào)進(jìn)行采集、變換、濾波、估值、增強(qiáng)、 壓縮、識(shí)別等處理,以得到符合人們需要的信號(hào)形式。
STM32中添加DSP庫主要用于數(shù)據(jù)的計(jì)算和處理,如復(fù)數(shù),矩陣,三角函數(shù),插值、求最大值求最小值、fir濾波器和 FFT等。
以下為arm_math.h對(duì)于DSP的簡(jiǎn)介
本用戶手冊(cè)描述了CMSIS DSP軟件庫,
*一套通用信號(hào)處理函數(shù),可用于基于Cortex-M處理器的設(shè)備。
*庫被劃分為許多函數(shù),每個(gè)函數(shù)覆蓋一個(gè)特定的類別:
-基本的數(shù)學(xué)函數(shù)
-快速的數(shù)學(xué)函數(shù)
-復(fù)雜的數(shù)學(xué)函數(shù)
-過濾器
-矩陣函數(shù)
-變形
-電機(jī)控制功能
-統(tǒng)計(jì)函數(shù)
-支持函數(shù)
-插值函數(shù)
*該庫有獨(dú)立的函數(shù)用于操作8位整數(shù)、16位整數(shù)、32位整數(shù)和32位浮點(diǎn)值。
二、大概使用步驟
選擇合適lib
首先要搞清楚所使用單片機(jī)的端緒是小端還是大端,可以查手冊(cè)得知是大端還是小端。如STMF091是小端(Little Endian)模式。
以下為DSP庫類型。名稱中帶l的為小端模式(Little Endian)庫,帶d的為大端模式(Big Endian)庫,帶f的為浮點(diǎn)單元,sp代表單精度,dp代表雙精度。
以STM32F091為例,則選擇在CMSIS中加入arm_cortexM0l_math.lib
*庫安裝程序在
Lib
文件夾中包含庫的預(yù)構(gòu)建版本。
- arm_cortexM7lfdp_math.lib(Cortex-M7,小端序,雙精度浮點(diǎn)單元)
- arm_cortexM7bfdp_math.lib(Cortex-M7,大端序,雙精度浮點(diǎn)單元)
- arm_cortexM7lfsp_math.lib (Cortex-M7,小端序,單精度浮點(diǎn)單元)
- arm_cortexM7bfsp_math.lib(Cortex-M7,大端序和單精度浮點(diǎn))
- arm_cortexM7l_math.lib (Cortex-M7,小端序)
- arm_cortexM7b_math.lib (Cortex-M7,大端序)
- arm_cortexM4lf_math.lib (Cortex-M4,小端序,浮點(diǎn)單元)
- arm_cortexM4bf_math.lib(Cortex-M4,大端序,浮點(diǎn)單元)
- 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主線,小端序,單精度浮點(diǎn)單元)
- arm_ARMv8MMLld_math.lib (Armv8-M主線,小端序,DSP指令)
- arm_ARMv8MMLldfsp_math.lib Armv8-M主線,小端序,DSP指令,單精度浮點(diǎn)單元
引用庫
*庫函數(shù)聲明在公共文件
arm_math.h
中,該文件位于Include
文件夾中。*只需包含此文件并在應(yīng)用程序中鏈接適當(dāng)?shù)膸欤缓箝_始調(diào)用庫函數(shù)。該庫支持single
*對(duì)于具有小端序和大端序的Cortex-M內(nèi)核,公共頭文件
arm_math.h
。浮點(diǎn)單元(FPU)變體將使用相同的頭文件。
添加預(yù)置宏
不同的芯片要添加的預(yù)置宏不盡相同,其與處理器型號(hào)有關(guān),同樣以STM32F091為例,查手冊(cè)可知,其為Cortex-M0類型
或者,可以通過下表確認(rèn)處理器型號(hào)
*定義適當(dāng)?shù)念A(yù)處理器宏ARM_MATH_CM7或ARM_MATH_CM4或ARM_MATH_CM3或ARM_MATH_CM0或ARM_MATH_CM0plus取決于應(yīng)用程序中的目標(biāo)處理器。
*對(duì)于Armv8-M內(nèi)核,定義預(yù)處理器宏ARM_MATH_ARMV8MBL或 ARM_MATH_ARMV8MML。
*如果Armv8-M主線內(nèi)核支持DSP指令,則設(shè)置預(yù)處理器宏__DSP_PRESENT。
二、具體使用步驟(基于cubmx)
1.使用STM32CubeMX生成Keil5工程
特別注意:點(diǎn)擊Project Manager打開工程設(shè)置窗口,點(diǎn)擊Code Generator選項(xiàng)卡,在STM32Cube Firmware Library Package中選擇Copy all used libraries into the project folder。(這樣才會(huì)在生成的文件中添加DSP庫)
2.選擇合適lib和添加
打開keil,雙擊Drivers/CMSIS,選第三個(gè),添加已經(jīng)存在的文件
打開工程下這個(gè)路徑
選擇合適lib加入
如下即為添加成功
2.添加宏定義
點(diǎn)擊魔法棒,C/C++選項(xiàng),添加宏定義,因?yàn)閒091為Cortex-M0類型,所以添加ARM_MATH_CM0宏定義(注意:宏定義間的符號(hào)為英文逗號(hào))
在C/C++選項(xiàng)卡中,的Include Paths中添加DSP庫的路徑:\Drivers\CMSIS\DSP\Include
點(diǎn) OK --> 點(diǎn)OK
3.在相應(yīng)c文件中引用 arm_math.h就可以使用了
官方有關(guān)于HAL庫的DSP庫例程,大概在此路徑下D:\stm3232\STM32Cube_FW_F0_V1.11.4\Drivers\CMSIS\DSP\Examples,同時(shí)在工程文件下.Drivers\CMSIS\DSP\Examples也可以看到例程
如果找不到的話,再次推薦一個(gè)超超超超超超超超級(jí)好用的搜文件軟件 everything(點(diǎn)擊即可跳轉(zhuǎn)至官方網(wǎng)站,可以挑選適合自己設(shè)備的版本下載)文章來源:http://www.zghlxwxcb.cn/news/detail-553481.html
測(cè)試
/* 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 */
理論結(jié)果為0.5,結(jié)果合理,大功告成?。。。。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-553481.html
到了這里,關(guān)于STM32中DSP庫簡(jiǎn)單理解和使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!