Kinetis(K系列)屬于Cortex-M4F構架,自帶ARM CMSIS中的DSP函數庫, 一部分K系列中帶有硬件浮點運算單元(型號中帶有"F"的),支持浮點指令集,因此在處理數學運算時能比M0/M3高出數十倍甚至上百倍的性能,但是要充分發揮FPU的數學性能,除了#include “arm_math.h”(而非用編譯器自帶的math.h)以外,(arm_math.h位于\Libraries\CMSIS\Include文件夾)還需要進行設置。
1、在工程中添加庫
根據使用的器件和運算模式,添加arm_cortexMxx_math.lib到工程文件中,位于\Libraries\CMSIS\Lib\ARM中。
* The library installer contains prebuilt versions of the libraries in the <code>Lib</code> folder.
* - arm_cortexM4lf_math.lib (Little endian and Floating Point Unit on Cortex-M4)
* - arm_cortexM4bf_math.lib (Big endian and Floating Point Unit on Cortex-M4)
* - arm_cortexM4l_math.lib (Little endian on Cortex-M4)
* - arm_cortexM4b_math.lib (Big endian on Cortex-M4)
* - arm_cortexM3l_math.lib (Little endian on Cortex-M3)
* - arm_cortexM3b_math.lib (Big endian on Cortex-M3)
* - arm_cortexM0l_math.lib (Little endian on Cortex-M0)
* - arm_cortexM0b_math.lib (Big endian on Cortex-M3)

我的 IDE是 Keil5.11. 使用的是 MK60DN512ZVL10 無FPU, 選用超核固件庫,小端模式,所以選arm_cortexM4l_math.lib
2、ARM DSP庫工程結構
下圖所示為DSP_Lib的文件結構 3、函數庫基本功能
BasicMathFunctions
提供浮點數的各種基本運算函數,如加減乘除等運算。對于M0/M3只能用Q運算,即文件夾下以_q7、_q15和_q31結尾的文件;而M4F能直接硬件浮點計算,屬于文件夾下以_f32結尾的文件。
CommonTables
arm_common_tables.c文件提供位翻轉或相關參數表。
ComplexMathFunctions
復述數學功能,如向量處理,求模運算的。
ControllerFunctions
控制功能,主要為PID控制函數。arm_sin_cos_f32/-q31.c函數提供360點正余弦函數表和任意角度的正余弦函數值計算功能。
FastMathFunctions
快速數學功能函數,提供256點正余弦函數表和任意任意角度的正余弦函數值計算功能,和Q值開平方運算:
Arm_cos_f32/_q15/_q31.c:提供256點余弦函數表和任意角度余弦值計算功能。
Arm_sin_f32/_q15/_q31.c:提供256點正弦函數表和任意角度正弦值計算功能。
Arm_sqrt_q15/q31.c:提供迭代法計算平方根的函數。對于M4F的平方根運算,通過執行VSQRT指令完成。
FilteringFunctions
濾波函數功能,主要為FIR和LMS(最小均方根)濾波函數。
MatrixFunctions
矩陣處理函數。
StatisticsFunctions
統計功能函數,如求平均值、計算RMS、計算方差/標準差等。
SupportFunctions
支持功能函數,如數據拷貝,Q格式和浮點格式相互轉換,Q任意格式相互轉換。
TransformFunctions
變換功能。包括復數FFT(CFFT)/復數FFT逆運算(CIFFT)、實數FFT(RFFT)/實數FFT逆運算(RIFFT)、和DCT(離散余弦變換)和配套的初始化函數。
4、牛刀小試
如下圖,添加好DSP庫后,立馬試驗了一個開根號的小函數,用串口終端輸出,精度還不錯 哈哈。這些在高校搞科研的同學們有的玩啦.~~ 論文里可以大把大把的特書大書啦 哈哈

|