首页 > 其他分享 >STM32F407 hal库FFT

STM32F407 hal库FFT

时间:2024-06-04 16:01:06浏览次数:26  
标签:inputbuf FFT hal fft LENGTH 设置 STM32F407 arm

简介:本文所用开发板为立创天空星,主控芯片为STM32F407VET6,F407系列应该都能使用本文的方法。也推荐大家可以买一块立创天空星玩玩,很好用。

1.设置调试模式为SWD调试

2.将低速和高速时钟设置为外部时钟源

3.时钟设置(按下图即可)

4.设置ADC,可以和中断部分一起看

注意DMA设定时要把Mode设成circular,这样才能循环采样。

5.中断设置

中断的采样频率为主频(即clock configuration里的设置)/(PSC* counter period)因为FFT采样点为1024个所以采样频率应为1024的整倍数。

6.串口设置

只需要将mode设置成全双工(就是第一个A开头的),并根据自己用的外设调整baud rate。

7.调用DSP库

点击上方的software packs 并选择select components

下载下图打开的DSP库

打开左侧最下方的middleware

点击下图蓝标的algobuild,并在弹出的页面中勾选DSP库,再回来重新点击就会出现如下的页面,勾选DSP库(一定要重新看看是否选择成功)

设定项目名并将IDE改为MDK V5

如下图勾选

最后一步,生成文件。

还要把这些加入c/c++的define

,ARM_MATH_CM4,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING

开始最重要的代码部分

第一步是printf的重定义

int fputc(int ch, FILE *f)

{

/* 发送一个字节数据到串口DEBUG_USART */

HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);

return (ch);

}

FFT的计算很简单

#include "stdio.h"
#include "arm_math.h"
#include "arm_const_structs.h"

#define FFT_LENGTH		1024
#define VREF 3.2941

//定义FFT采样数组
uint16_t adcBuff[FFT_LENGTH];
float fft_inputbuf[FFT_LENGTH * 2];  
float fft_outputbuf[FFT_LENGTH];
//标志位
__IO uint8_t AdcConvEnd1 = 0;

HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adcBuff, FFT_LENGTH);

for(int i=0; i < FFT_LENGTH; i++)
    {
        fft_inputbuf[2*i]=adcBuff[i] * VREF / 4096; //实部
        fft_inputbuf[2*i+1]=0;				  //虚部
    }
    arm_cfft_f32(&arm_cfft_sR_f32_len1024, fft_inputbuf, 0, 1);//FFT计算
    arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH);	//取模得幅值

标签:inputbuf,FFT,hal,fft,LENGTH,设置,STM32F407,arm
From: https://blog.csdn.net/m0_74054307/article/details/139412328

相关文章

  • STM32 - 串口通信(HAL库)
    为什么要用HAL库?使用方便,可以完全使用GUI配置、支持更多的芯片型号和开发板、良好的封装与抽象、Easy上手和开发有什么缺点?封装层次较高,造成稍微的性能损失STM32cubemx部分以使用stm32系列的NUCLEO-F03RB为例1.配置时钟选择STM32F103RCTx系列芯片,配置时钟的同时会......
  • ChallengeMobile
    解题思路获取到输入的字符串保存到s,调用Jformat方法对s进行验证,返回true则代表输入字符串正确反之错误。Jformat方法分析:首先看到使用了LoadData加载了”ming“给了a方法,a方法的返回值赋值给了arr_b。接着判断SDK_INT是否小于29:意思就是判断Android版本是否小于10,如果不是......
  • JINGWHALE ART 年度流行色,用代码创造色彩斑斓的数字世界!
    JINGWHALEART年度流行色(智能色彩生产官方平台)是由JINGWHALE每年发布的年度流行色,于每年的1月1日发布次年的流行色。JINGWHALEART年度流行色依据中国古典文化思想(如中国传统正五色、金木水火土、十二生肖等文化思想)、以及年度流行指数,确定年度流行色。基于年度流行......
  • 记一次读取halcon二维码模型文件的报错
    C#中使用的halcon的dll版本为17.12二维码模型是通过halcon软件保存的,halcon软件版本为20.05.前后使用的halcon版本不一致,导致程序中读取模型一直报错“HALCONerror#8860:Invalidheaderin2ddatacodemodelfileinoperatorread_data_code_2d_model”  ChatG......
  • 使用HC—05实现单片机HAL库双蓝牙通信
     一.蓝牙HC-05简介(主要为AT模式介绍)1.接线要点:(六个引脚中左右两侧的两个不用连接)    TX-RX     RX-TX        GND -GND    VCC -VCC(5V)2.AT模式:  进入方法:使用CH340串口工具链接HC-05及电脑USB端(提前下好CH340驱动)按......
  • CF1593D2. Half of Same
    题目链接:HalfofSame-洛谷|计算机科学教育新生态(luogu.com.cn)WA代码:#include<bits/stdc++.h>usingnamespacestd;#defineMAX44constintN=2e6+6;intarr[MAX];intcnt_1[N];//记录每个数出现的次数intcnt_2[N];//记录每个因数intmain(){intt;c......
  • 大话BLDC驱动:怎么根据HALL信号换相
    根据《大话BLDC驱动:为什么可以根据HALL信号换相?》文中内容,我们知道HALL信号实时反应了电机转子的位置,所以,针对有感BLDC,我们当然可以根据HALL信号进行换相。那么,问题来了,根据HALL信号换相的方法及其步骤是什么?有什么细节?有什么要注意?本文就来梳理一下。1.有感BLDC8线接口定义3......
  • Stm32H7系列定时中断设置HAL库
    Stm32定时中断配置,在我们的日常调试中,想要以一个固定的时钟频率对传感器定时周期采样时往往会直接在main.c函数的While(1)中进行,通过HAL_Delay()来控制采样频率,但是如果多传感器同时采样的话由于HAL_Delay()的方法时效性不是很准确往往会出现一系列的问题,而使用定时中断的话,只需......
  • HAL库使用教程——1_点亮LED灯并闪烁
    文章目录前言一、STM32CUBEMX工程配置1.新建工程2.选择单片机型号3.初始化配置--配置烧录程序端口--系统时钟配置--GPIO口配置--时钟树配置4.输出工程选项二、KEIL5代码编写1.LED闪烁总结前言HAL库是STM32系列单片机广泛应用的库函数,一般使用STM32CUBEM......
  • STM32_HAL_串口IAP
    1.IAP简介        IAP(InApplicationProgramming)即在应用编程。STM32可以通过设置MSP的方式从不同的地址启动:包括Flash地址、RAM地址等,在默认方式下,我们的嵌入式程序是以连续二进制的方式烧录到STM32的可寻址Flash区域上的。如果我们用的Flash容量大......