嵌入式开发:傅里叶变换(4):在 STM32上面实现FFT(基于STM32L071KZT6 HAL库+DSP库)

embedded/2025/3/3 5:22:23/

目录

步骤 1:准备工作

步骤 2:创建 Keil 项目,并配置工程

步骤 3:在MDK工程上添加 CMSIS-DSP 库

步骤 5:编写代码

步骤 6:配置时钟和优化

步骤 7:调试与验证

步骤 8:优化和调整

注意事项:


在 STM32L071KZT6 上使用 MDK(Keil uVision)移植 DSP 库源码,并且基于 HAL 库进行开发,可以按照以下步骤进行操作:

步骤 1:准备工作

  1. 安装 Keil MDK:。
  2. 安装 STM32CubeMX:                                                                                                         参考博客:STM32开发,安装代码生成工具CubeMX_stm32cubemxzip-CSDN博客
  3. 下载 DSP 库源码

从 STMicroelectronics 官网或者 ARM 官方下载 CMSIS-DSP 库源码。这个库包括了许多数学运算、滤波器、FFT等功能,并且专为 ARM Cortex-M 系列微控制器优化。                                        注意:MDK 请使用 5.26 及其以上版本,CMSIS 软件包请使用 5.6.0 及其以上版本。       

 安装了新版 MDK 后,CMSIS 软件包会存在于路径:D:\keil\Arm\Packs\ARM\CMSIS\5.9.0

打开固件库的CMSIS库,可以看看到下面的列表:

其中 DSP 文件夹是我们需要的:

关于DSP 文件夹的介绍见博客:

步骤 2:创建 Keil 项目,并配置工程

参考博客CubeMX配置STM32L071KZT6

步骤 3:在MDK工程上添加 CMSIS-DSP 库

  1. 添加DSP文件夹,用于放置DSP库:CMSIS/DSP:

  2. 导入 CMSIS-DSP 库
    • 在 Keil 项目中,右键点击 "CMSIS/DSP",选择 "Add Existing Files" 并添加 CMSIS-DSP 库中。
    • 进入以下路径(工程路径下):C:\Users\FCZ\Desktop\design\Fluxgate_code\Drivers\CMSIS\Lib\ARM,添加DSP库l 表示小端格式,b 表示大端格式,Cortex-M0+ 处理器本身是小端架构,因此应该使用小端模式,否则会报错
  3. 配置宏定义:在 Keil 项目的 "Options for Target" 设置中,确保配置了正确的宏定义。对于 ARM Cortex-M0+ 内核,可能需要配置某些优化选项,如启用硬件除法(如果有)或选择定点运算模式。

        打开 Keil MDK,选择你的项目。

        右键点击项目,选择 "Options for Target"。

        在弹出的窗口中,选择 "C/C++" 选项卡。

        在 "Preprocessor Symbols" 中添加以下宏定义:ARM_MATH_CM0PLUS

    4.添加头文件

        添加文件路径:..\Drivers\CMSIS\DSP\Include

        用到 DSP 库函数的文件得添加#include "arm_math.h"就可以调用 DSP 库的 API 了。至此就完成了 DSP 库的移植。

步骤 5:编写代码

  1. 初始化 HAL 库:在 main.c 中,初始化 HAL 库和外设。 示例:
    #include "stm32l0xx_hal.h"
    #include "arm_math.h"void HAL_Init(void);
    void SystemClock_Config(void);
    void MX_GPIO_Init(void);float32_t pSrc = -12;
    float32_t pDst;int main(void)
    {// 初始化 HAL 库HAL_Init();SystemClock_Config();MX_GPIO_Init();// 初始化 DSP 库DSP_Init();while (1){// 调用 DSP 函数arm_abs_f32(&pSrc, &pDst, 1);}
    }
    

步骤 6:配置时钟和优化

  1. 时钟配置:确保系统时钟设置符合 DSP 库的要求,特别是在处理大型数据时,时钟的速度会影响 DSP 的性能。
  2. 优化设置:可以在 Keil 的项目设置中启用优化选项,启用硬件加速指令(如果处理器支持),以及通过定点运算(如果你不需要浮点计算)来提高性能。

步骤 7:调试与验证

  1. 编译代码:在 Keil 中点击 "Build" 编译项目,确保没有错误。
  2. 下载并调试程序:将程序下载到 STM32L071KZT6 开发板,使用 Keil 的调试工具调试代码,查看 DSP 运算结果。
  3. 验证 DSP 运算结果:检查 DSP 运算的输出,确保它们符合预期。如果需要,可以在调试过程中设置断点,单步执行并查看数据。

步骤 8:优化和调整

  1. 性能优化:对于较大数据量的 DSP 运算,可以考虑启用硬件浮点单元(如果芯片支持)或使用定点计算来优化性能。
  2. 内存优化:根据需要,优化内存的使用,避免不必要的内存占用,尤其是在资源受限的情况下。

注意事项:

  • 硬件浮点支持:STM32L071KZT6 基于 Cortex-M0+ 内核,不支持硬件浮点单元,因此要么使用软件浮点运算,要么使用定点运算来优化性能。
  • 定点运算优化:如果不使用浮点计算,CMSIS-DSP 库也支持定点运算,可以在库初始化时配置定点模式。
  • 库版本兼容性:确保所使用的 CMSIS-DSP 库版本与 Keil MDK 以及 STM32L071 相兼容。


http://www.ppmy.cn/embedded/169220.html

相关文章

设计模式-单例、策略、代理、建造、工厂

文章目录 单例设计模式策略模式代理设计模式建造者模式工厂设计模式 单例设计模式 单例设计模式保证全局只有一个实例,通常用于资源的共享,比如 spring 中的 bean 默认 就是单例的,所有类注入的对象都是同一个。 在类中绑定一个静态的资源也…

【Java项目】基于Spring Boot的旅游管理系统

【Java项目】基于Spring Boot的旅游管理系统 技术简介:采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介:旅游管理系统是一个基于Web的在线平台,主要分为前台和后台两大功能模块。前台功能模块包括(1)首…

Linux运维——网络管理

Linux网络管理 一、Linux网络应用要点二、命令常见用法2.1、curl2.1.1、发送GET请求2.1.2、发送POST请求2.1.3、设置请求头2.1.4、处理cookies2.1.5、处理重定向2.1.6、调试和详细信息2.1.7、使用代理2.1.8、文件上传2.1.9、其它常用选项2.1.10、综合示例 2.2、wget2.2.1、基本…

Redis服务安装自启动(Windows版)

文章目录 前言 一、下载 Windows 版本的Redis 二、为 Redis 设置连接密码(可选) 三、启动 Redis 四、设置 Redis 开机自启 4.1 将Redis 进程 注册为服务 4.2 设置 Redis 服务开机自启 4.3 重启电脑测试是否配置成功 4.4 关闭 Redis 开机自启&am…

seacmsv9注入管理员账号密码+orderby+limit

一、seacmsv9 SQL注入漏洞 1.1 seacms漏洞介绍 海洋影视管理系统(seacms,海洋cms)是一套专为不同需求的站长而设计的视频点播系统,采 用的是 php5.Xmysql 的架构,seacmsv9漏洞文件:./comment/api/index.p…

Pytorch使用手册—使用TACOTRON2进行文本到语音转换(专题二十四)

一、概述 本教程展示了如何使用torchaudio中的预训练Tacotron2构建文本到语音的管道。 文本到语音的管道流程如下: 文本预处理 首先,输入的文本被编码为一系列符号。在本教程中,我们将使用英语字符和音标作为符号。 谱图生成 从编码后的文本中生成谱图。我们使用Tacotron2…

Cursor+pycharm接入Codeuim(免费版),Tab自动补全功能平替

如题,笔者在Cursor中使用pycharm写python程序,试用期到了Tab自动补全功能就不能用了,安装Codeuim插件可以代替这个功能。步骤如下: 1. 在应用商店中搜索扩展Codeuim,下载安装 2. 安装完成后左下角会弹出提示框&#x…

vscode中使用PlatformIO创建工程加载慢

最近使用vscodeplatformIO开发esp32s3,第一次创建工程时加载速度很慢,查询资料解决问题,特此记录。 1.新建环境变量pyhton 此电脑-属性-高级系统设置中(直接搜索高级系统设置也行),添加系统变量&#xff…