嵌入式開發:傅里葉變換(4):在 STM32上面實現FFT(基于STM32L071KZT6 HAL庫+DSP庫)

目錄

步驟 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.pswp.cn/diannao/72126.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72126.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72126.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MySQL篇】數據類型

目錄 前言: 1,數據類型的分類 ?編輯 2 ,數值類型 2.1 tinyint類型 2.2 bit類型 2.3 小數類型 2.3.1 float類型 2.3.2 decimal類型 3,字符串類型 3.1 char 3.2 varchar 3.3 char與varchar的比較 3.4日期和時間類型 3.5 …

nuxt常用組件庫html-validator應用解析

html-validator 主要用于自動驗證nuxt服務器呈現的HTML(SSR和SSG),以檢測可能導致水合錯誤的HTML常見問題,有助于減少水合錯誤,檢測常見的可訪問性錯誤。 安裝 npx nuxilatest module add html-validator配置 若自動更新nuxt.config.ts配置文…

智能圖像處理平臺:圖片管理

接著我們講圖片管理,先實現圖片基礎的增刪改查,再去考慮圖像處理。 主要是,我們需要完成查詢時,查詢的圖片的上傳者的角色等級小于等于我們當前登陸賬號。 后端controller: package com.llpp.controller;import cn.…

大模型知識蒸餾技術(8)——知識蒸餾應用場景

版權聲明 本文原創作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 知識蒸餾概述 知識蒸餾是一種將大型復雜模型(教師模型)的知識遷移到小型簡單模型(學生模型)的技術。其核心原理是通過教師模型的輸出(通常是softmax后的概率分布)來指導學生模型的訓練,…

LeetCode:131. 分割回文串(DP Java)

目錄 131. 分割回文串 題目描述: 實現代碼與解析: 動態規劃 原理思路: 131. 分割回文串 題目描述: 給你一個字符串 s,請你將 s 分割成一些子串,使每個子串都是 回文串 。返回 s 所有可能的分割方案。…

INT202 Complexity of Algroithms 算法的復雜度

文章目錄 1. 前言1.1 算法(Algorithms)和數據結構(Data Structure)1.2 什么是好的算法?1.3 算法分析1.3.1 實驗分析(Experimental Analysis)1.3.2 理論分析1.3.2.1 偽代碼(Pseudo-co…

BDF報告翻譯簡介后:關于A φ方法criterion引理1如何由范數導出內積

關于A φ方法criterion 引理1 如何由范數導出內積 在數學中,特別是在泛函分析中,給定一個范數,可以定義一個與之相關的內積。這個過程不是總是可能的,但當一個賦范向量空間是完備的且滿足平行四邊形恒等式時,可以導出…

初識uniApp

詳細思考一下uniApp這個跨平臺開發框架。首先,我對uniApp還不是很了解,所以需要從基本概念開始,逐步深入。 什么是uniApp? 我記得uniApp是基于Vue.js的,可能是一個用來開發多個平臺的應用的框架。用戶可能想了解它是什…

olmOCR:使用VLM解析PDF

在PDF解析中,目前主流的開源工具包括Minuer、GOT OCR等。主要都是通過飛槳等OCR套件組裝的一套pipeline,或者直接通過VLM解析圖像。 #一、 olmOCR是使用VLM進行的端到端的PDF文檔解析 二、document-anchoring 與上述的不同在于,olmOCR使用…

Nginx 代理配置導致瀏覽器應用網頁頁面加載失敗的分析與解決

Nginx 代理配置導致應用頁面加載失敗的分析與解決 前期部署信息: 部署DM數據庫DEM時,配置了nginx代理,conf配置內容如下: charset utf-8;client_max_body_size 128M;listen 4567;server_name 192.168.1.156;root /opt/h5/;index…

Windows 11【1001問】查看Windows 11 版本的18種方法

隨著技術的飛速發展,操作系統作為連接硬件與軟件的核心橋梁,其版本管理和更新變得尤為重要。對于用戶而言,了解自己設備上運行的具體Windows 11版本不僅有助于優化系統性能,還能確保安全性和兼容性。然而,不同場景和需…

企業jsapi_ticket,java舉例

在企業微信開發中,使用 Java 獲取 jsapi_ticket 并生成簽名的步驟如下。以下是完整的 Java 示例代碼。 1. 獲取 jsapi_ticket 的流程 獲取 access_token。 使用 access_token 獲取 jsapi_ticket。 使用 jsapi_ticket 生成簽名(signature)。…

【Godot4.3】自定義簡易菜單欄節點ETDMenuBar

概述 Godot中的菜單創建是一個復雜的災難性工作,往往無從下手,我也是不止一次嘗試簡化菜單的創建。 從自己去年的發明“簡易樹形數據”用于簡化Tree控件獲得靈感,于是嘗試編寫了用于表示菜單數據的EasyMenuData類,以及對應的純文…

大數據與金融科技:革新金融行業的動力引擎

大數據與金融科技:革新金融行業的動力引擎 在今天的金融行業,大數據與金融科技的結合正在以驚人的速度推動著金融服務的創新與變革。通過精準的數據分析與智能化決策,金融機構能夠更高效地進行風險管理、客戶服務、資產管理等一系列關鍵操作…

二、IDE集成DeepSeek保姆級教學(使用篇)

各位看官老爺好,如果還沒有安裝DeepSeek請查閱前一篇 一、IDE集成DeepSeek保姆級教學(安裝篇) 一、DeepSeek在CodeGPT中使用教學 1.1、Edit Code 編輯代碼 選中代碼片段 —> 右鍵 —> CodeGPT —> Edit Code, 輸入自然語言可編輯代碼,點擊S…

Rohm發布TOLL封裝650V GaN HEMT,引領汽車用GaN器件大規模生產新浪潮

Rohm震撼發布TOLL封裝650V GaN HEMT,引領汽車用GaN器件大規模生產新浪潮。在創新的TOLL(TO LeadLess)封裝技術的懷抱中,Rohm精心孕育出650V GaN HEMT這一瑰寶,此技術正如一股強勁東風,日益吹拂于高功率處理…

Spring Boot 3.x 基于 Redis 實現郵箱驗證碼認證

文章目錄 依賴配置開啟 QQ 郵箱 SMTP 服務配置文件代碼實現驗證碼服務郵件服務接口實現執行流程 依賴配置 <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr…

PHP的學習

PHP的基礎前提【HTML、CSS】 第一步先進行VS cood的下載&#xff1a;Visual Studio Code - Code Editing. Redefined 【選擇適合自己的電腦的版本eg:我就是64位的win】

XML 編輯器:全面指南與最佳實踐

XML 編輯器:全面指南與最佳實踐 引言 XML(可擴展標記語言)編輯器是處理XML文件的關鍵工具,對于開發人員、系統管理員以及任何需要處理XML數據的人來說至關重要。本文將全面介紹XML編輯器的概念、功能、選擇標準以及最佳實踐,旨在幫助讀者了解如何選擇和使用合適的XML編輯…

《Effective Objective-C》閱讀筆記(下)

目錄 內存管理 理解引用計數 引用計數工作原理 自動釋放池 保留環 以ARC簡化引用計數 使用ARC時必須遵循的方法命名規則 變量的內存管理語義 ARC如何清理實例變量 在dealloc方法中只釋放引用并解除監聽 編寫“異常安全代碼”時留意內存管理問題 以弱引用避免保留環 …