STM32标准库使用CMSIS-DSP库

引言

因为我在做项目的时候,需要使用算法,自己写的话麻烦,并且无法保证空间的利用以及运算速度会 更快,所以这里我引用CMSIS-DSP库,使用里面的函数来实现,但是我搜索发现有使用说明的都是用的STM32Cube生成使用的,而我用的是标准库,所以特此写下本篇文章。

一、什么是CMSIS-DSP库?

CMSIS DSP 软件库(CMSIS-DSP库官网链接),这是一套用于基于 Cortex-M 和 Cortex-A 处理器的设备的常见信号处理函数。
该库分为多个函数,每个函数涵盖一个特定类别:

  • 基本数学函数
  • 快速数学函数
  • 复杂的数学函数
  • 过滤功能
  • 矩阵函数
  • 变换函数
  • 电机控制功能
  • 统计功能
  • 支持功能
  • 插值函数
  • 支持向量机函数 (SVM)
  • 贝叶斯分类器函数
  • 距离函数
  • 四元数函数

该库通常具有用于操作 8 位整数、16 位整数、32 位整数和 32 位浮点值的单独函数。

二、引入CMSIS-DSP库过程

1、创建STM32基础工程

这里我使用的是野火的串口1通信基础例程。链接: 野火的串口1通信基础例程

2、获取CMSIS-DSP库

  1. 方法1:我把DSP库的文件链接放在旁边。链接: CMSIS-DSP库

  2. 方法2:我们可以直接访问DSP库的Github地址,然后通过git或者直接Download下载。
    链接:DSP库Github链接在这里插入图片描述

  3. 方法3:我们可以去链接: STM32CubeF1下载,只不过STM32官网下载文件,需要登录,略微麻烦,推荐方法1。
    下载后可以通过根据下图找到DSP库的位置
    在这里插入图片描述

三、STM32标准库添加DSP库

  1. 首先解压并打开CMSIS-DSP的压缩包,我们所需要的内容主要有三个文件夹
    在这里插入图片描述
  2. 同时由于CMSIS-DSP库是由ARM公司提供的一个信号处理算法库,所以也需要CMSIS的内核文件以及一个lib库文件,我们可以进入STM32CubeMax去下载最新的封装库,其中lib库文件的命名以内核名称开始,后面的或b代表小端格式或大端格式,因为我所使用的单片机是STM32F103ZET6型号,是M3内核,小端格式,支持单精度浮点运算单元,所以我们选择arm_cortexM3l_math.lib,解压打开文件后按照图片所示路径找到框出的文件夹以及文件,如果觉得麻烦我也放了封装库的源文件链接:STM32CubeMax封装库
    如果与我所使用的板子不同,可以根据自己型号做出选择
    在这里插入图片描述在这里插入图片描述
  3. 当我们找到所有文件以后,把这四个文件夹添加到我们的工程目录下,这里我把从软件包里找到的三个文件创了个DSP的文件夹,集中放在里面。在这里插入图片描述
  4. 然后我们用Keil打开工程项目,添加DSP具体文件(这里添加的具体文件我们可以根据需求来添加,也可以全部添加)和头文件路径
    在这里插入图片描述
  5. 添加完文件后,我们在箭头所指的地方添加宏定义
,ARM_MATH_CM4,__CC_ARM,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING,

在这里插入图片描述

至于为什么添加这几个宏定义,在arm_math.h文件里有写为全英文,这里我把他中文注释放在这里

ARM_MATH_BIG_ENDIAN:
定义宏ARM_MATH_BIG_ENDIAN,为大端目标构建库。默认情况下,库会为小端目标构建。

ARM_MATH_MATRIX_CHECK:
定义用于检查矩阵的输入和输出大小的宏ARM_MATH_MATRIX_CHECK

ARM_MATH_ROUNDING:
定义用于舍入支持函数的宏ARM_MATH_ROUNDING

ARM_MATH_LOOPUNROLL:
定义宏ARM_MATH_LOOPUNROLL,以便在 DSP 函数中启用手动循环展开

ARM_MATH_NEON:
定义宏ARM_MATH_NEON以启用 DSP 功能的 Neon 版本。默认情况下,当 Neon 可用时,它不会启用,因为性能取决于编译器和目标体系结构。

ARM_MATH_NEON_EXPERIMENTAL:
定义宏ARM_MATH_NEON_EXPERIMENTAL以启用某些 DSP 函数的实验性 Neon 版本。实验性 Neon 版本目前没有比标量版本更好的性能。

ARM_MATH_HELIUM:
它意味着标志 ARM_MATH_MVEF 和 ARM_MATH_MVEI 和 ARM_MATH_MVE_FLOAT16。

ARM_MATH_HELIUM_EXPERIMENTAL:
仅在定义ARM_MATH_MVEF、ARM_MATH_MVEI或ARM_MATH_MVE_FLOAT16时才考虑在内。启用一些矢量版本,这些版本的性能可能比标量差,具体取决于内核/编译器配置。

ARM_MATH_MVEF:
选择 f32 算法的 Helium 版本。它意味着ARM_MATH_FLOAT16和ARM_MATH_MVEI。

ARM_MATH_MVEI:
选择 int 和 fixed point 算法的 Helium 版本。

ARM_MATH_MVE_FLOAT16:
某些算法的 MVE Float16 实现(需要 MVE 扩展)。

DISABLEFLOAT16:
当特定编译器/内核配置不支持 __fp16 时禁用 float16 算法。这仅对标量有效。当矢量体系结构支持 f16 时,无法禁用它。

ARM_MATH_AUTOVECTORIZE:
使用 Helium 或 Neon,禁用带有 C 内部函数的矢量化代码,改用纯 C。然后由编译器完成矢量化。
  1. 最后,我们在arm_math.h 文件里添加上#include “stm32f10x.h” 然后就可以使用了

感谢各位的观看,如有错误,还请指正。

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
STM32F4标准库是一套用于STM32F4系列微控制器的软件,它提供了方便易用的接口和函数来访问和控制片上外设。在使用STM32F4标准库之前,你需要下载并解压固件文件,并将其包含在你的项目中。固件的文件夹包括CMSIS文件夹和STM32F4xx_StdPeriph_Driver文件夹。其中,CMSIS文件夹包含符合CMSIS规范的文件,包括核内外设访问层代码和DSP软件STM32F4xx_StdPeriph_Driver文件夹包含了STM32F4标准外设固件的源码文件和头文件。这些头文件和源文件对应着每个外设。 在使用固件之前,你需要包含一些关键的头文件,如core_m4.h、system_stm32f4xx.h和stm32f4xx.h。core_m4.h是CMSIS提供的核心文件,适用于所有CM4内核的芯片;system_stm32f4xx.h是片上外设接入层系统头文件,主要用于设置系统和总线时钟相关的函数;stm32f4xx.h是STM32F4片上外设访问层头文件,包含了系统寄存器定义和内存操作的包装。 除了这些头文件,还有一些其他的文件也是常用的,如stm32f4xx_it.c、stm32f4xx_it.h和stm32f4xx_conf.h。stm32f4xx_it.c和stm32f4xx_it.h用于编写中断服务函数,而stm32f4xx_conf.h是外设驱动的配置文件。 固件使用还包括初始化NVIC的一些常用格式。可以使用NVIC_InitTypeDef结构体来初始化NVIC,并设置中断名、抢占优先级、响应优先级和IRQ通道使能。例如,使用下面的代码来初始化NVIC: NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = xxx_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); 这些是使用STM32F4标准库的基本步骤和注意事项。希望这些信息对你有帮助。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

应景丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值