ARM核单片机安装CMSIS DSP
ARM核单片机安装CMSIS DSP
CMSIS 库介绍
CMSIS:(Cortex Microcontroller Software Interface Standard)翻译成中文就是ARM Cortex 微控制器/处理器软件接口标准。
CMSIS-RTOS是一种API,它支持使用中间件和库组件实现一致的软件层
CMSIS-DSP库是Arm为各种Cortex-M处理器内核优化的DSP功能的丰富集合
CMSIS-Driver接口可用于许多微控制器家族
CMSIS-Pack定义了包含软件组件的软件包的结构
CMSIS-SVD文件使设备外设的详细视图与当前注册状态
CMSIS-DAP是一个到Cortex调试访问端口(DAP)的标准化接口。
CMSIS-NN是一组高效的神经网络核的集合
数字信号处理(Digital Signal Processing,简称DSP);
在进行一些数据处理和计算时,常常会使用到一些数学函数,通常使用的是math.h文件中的函数,但有时会涉及到大量数据的计算,这时可以考虑使用ARM官方提供的DSP库,其中包含了许多基础数学函数和其它扩展功能,支持多种ARM内核,计算速度也比math.h中快不少。
官网连接在这里Common Microcontroller Software Interface Standard (CMSIS) – Arm Developer
库包含的功能如下
Basic math functions
基本数学函数
Fast math functions
快速的数学函数
Complex math functions
复杂的数学函数
Filtering functions
过滤功能
Matrix functions
矩阵函数
Transform functions
转换函数
Motor control functions
运动控制功能
Statistical functions
统计功能
Support functions
支持功能
Interpolation functions
插值函数
Support Vector Machine functions (SVM)
支持向量机函数
Bayes classifier functions
贝叶斯分类器函数
Distance functions
距离函数
Quaternion functions
四元数的功能
一般常用的单片机如STM32F1、GD32F1都是ARM Cortex M3内核,没有FPU单元,在STM32F4、GD32F3系类中使用的是ARM Cortex M4内核,其在ARM Cortex M3的基础上强化了运算能力,新加了浮点、DSP、并行计算等。为了更好的发挥ARM的计算能力。
源码连接在这GitHub - ARM-software/CMSIS_5: CMSIS Version 5 Development Repository
注: CMSIS 5.8以上在Git的源码文件里去除了Lib文件,需要自己编译,CMSIS 5.7还有Lib文件,这里下载的是5.7的文件
DSP库安装
将下载的库文件解压,在 CMSIS/DSP/Lib/ARM 中可以看到有许多Lib静态库,其中库文件的命名以内核名称开始,后面的l或b代表小端格式或大端格式,f代表支持浮点运算单元,M4内核只支持单精度浮点单元,而M7内核的支持单精度(Single Precision)或双精度(Double Precision)浮点运算单元,所以还有fsp和fdp之分。
之后找到Include文件夹,这里是使用库文件需要包含的头文件,其中arm_math.h是主要的头文件。
将与芯片对应Lib静态库文件和头文件复制到工程目录下,添加到工程中并为头文件添加路径。这里不添加这些头文件也可以,只要配置好路径就行。
之后添加在工程中添加宏定义ARM_MATH_CM3
之后再主函数中添加头文件,编写FFT测试程序:
1 | #include "gd32f10x.h" |
VOFA+显示如下
可以看到原始的时域信号和频域下的频谱,且幅值和频率关系和生成原始信号时的数据相同,程序工作正常。
其它问题
在使用GD32F1官方固件库进行程序开发时,会遇到找不到cmsis_compiler.h这个头文件,在DSP库中的Core内核文件文件夹,将缺少的文件复制到工程目录下GD32库文件Libraries/CMSIS目录下,但复制后会报很多重定义的错误,都是在core_cm3.h中,估计可能是GD32官方库中的core_cm3.h对一些功能进行了配置,但在DSP中也有相同的配置,发生了重定义.
这里用DSP中的core_cm3.h把GD库中的文件替换掉,再编译就没有错误了。下载烧录功能没什么问题,暂时也不知道这样做有没有别的影响。其它找不到的文件自己复制过去就行。