当前位置: 首页 > news >正文

STM32 ADC+定时器+DMA+FFT

本次实现的功能为单片机DAC输出一个正弦波,然后ADC定时采样用DMA输出,最后对DAC输出的波形进行FFT。

单片机STM32F103ZET6

内部时钟

一、配置ADC

ADC端口为PA1,采用DMA输出,定时器3触发

定时器时钟64M,分频后为102.4KHz

ADC采样时间为102.4KHz/100=1.024KHz

二、配置DAC

DAC端口PA4

DMA传输

定时器6

定时器时钟64M,分频后为1MHz

三、配置DSP

四、配置时钟

四、代码

注意生成的代码里初始化中DMA要在ADC之前

FFT需要#include "arm_math.h"头文件

需添加include

在define后面补全USE_HAL_DRIVER,STM32F103xE,ARM_MATH_CM4,__CC_ARM,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING,__FPU_PRESENT=1

main中加入ADC、DAC与FFT代码

uint16_t ad_value;          
uint16_t adc_buffer[1] = {0};HAL_TIM_Base_Start(&htim3);
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&adc_buffer,1);HAL_TIM_Base_Start(&htim6);
SineWave_Data(n,DualSine12bit,1.6);
HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,(uint32_t *)DualSine12bit,n,DAC_ALIGN_12B_R);arm_cfft_radix4_instance_f32 scfft;        //FFT对应结构体变量
arm_cfft_radix4_init_f32(&scfft,fft_adc_n,0,1); //初始化scfft结构体,设置FFT相关参数

SineWave_Data是产生正弦波的点(子函数)

#include "math.h"
#define n 100
uint16_t DualSine12bit[n];
//num:要在一个正弦波中采集多少点
//*D:创建的一个数组用来存放正弦波各个点的数值的
//U:输出电压的峰值(0~1.5V)
//Pi:3.1415926 自己定义
void SineWave_Data( uint16_t num,uint16_t *D,float U)
{uint16_t i;for( i=0;i<num;i++){D[i]=(uint16_t)((U*sin(( 1.0*i/(num-1))*2*3.14159265358979)+U)*4095/3.3);}
}

FFT定义

#define fft_adc_n 1024    // 采1024个点
uint16_t i;
float adc_data[fft_adc_n*2]={0};        // 存ADC值
float fft_in_adc_data[fft_adc_n*2]={0}; // FFT输入,实部是ADC值,虚部补0
float fft_out_adc_data[fft_adc_n]={0};  // FFT输出/*********************************************************************Name          : FFT_deal0(short int *data, float *fft_in,int data_length)Funcation :对波形数据进行补零操作Parameter :    short int *data        波形信号float *fft_in            输入信号(信号长度应是输出信号的2倍)int data_length        输出信号长度(与波形信号长度保持一致)Return    无
********************************************************************/
void FFT_deal0(float *data, float *fft_in,int data_length)
{for(int i = 0;i < data_length;i++){fft_in[2*i] = data[i];fft_in[2*i+1]=0;}
}

在ADC回调函数中加入标志位

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{ad_flag=1;
}

主函数

        while(i<fft_adc_n)  //等待1024个点{if(ad_flag==1){i++;ad_flag=0;ad_value=HAL_ADC_GetValue(&hadc1);adc_data[i]=ad_value;}}for(i=0;i<fft_adc_n;i++)   //打印采集到得ADC值{printf("%.2f\r\n",adc_data[i]);}//FFTFFT_deal0(adc_data,fft_in_adc_data,fft_adc_n);                                //对采集后的数据进行补0,补足虚部arm_cfft_radix4_f32(&scfft,fft_in_adc_data);                                            //FFT计算(基4)arm_cmplx_mag_f32(fft_in_adc_data,fft_out_adc_data,fft_adc_n);            //把计算结果复数求模得幅值 printf("ffffffffffffffffffff\r\n");//打印FFT输出for(i=0;i<fft_adc_n;i++){fft_out_adc_data[i]=fft_out_adc_data[i]*0.0008056640625;printf("%.2f\r\n",fft_out_adc_data[i]);}while(1);

将采集到得ADC放入Excel打印出来

波形频率50Hz

1.024KHz采样频率采集1024个点,刚好50个波形

FFT分析后得波形

可以看到频率为50左右,还是比较精准的

相关文章:

STM32 ADC+定时器+DMA+FFT

本次实现的功能为单片机DAC输出一个正弦波&#xff0c;然后ADC定时采样用DMA输出&#xff0c;最后对DAC输出的波形进行FFT。单片机STM32F103ZET6内部时钟一、配置ADCADC端口为PA1&#xff0c;采用DMA输出&#xff0c;定时器3触发定时器时钟64M&#xff0c;分频后为102.4KHzADC采…...

用Node.js实现一个HTTP服务器程序(文件服务器)

http Node.js开发的目的就是为了用JavaScript编写Web服务器程序。因为JavaScript实际上已经统治了浏览器端的脚本,其优势就是有世界上数量最多的前端开发人员。如果已经掌握了JavaScript前端开发,再学习一下如何将JavaScript应用在后端开发,就是名副其实的全栈了。 HTTP协…...

Python实现人脸识别检测, 对美女主播照片进行评分排名

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 素材、视频、代码、插件安装教程我都准备好了&#xff0c;直接在文末名片自取就可点击此处跳转 开发环境: Python 3.8 Pycharm 2021.2 模块使用&#xff1a; requests >>> pip install requests tqdm >…...

【数据结构与算法】什么是双向链表?并用代码手动实现一个双向链表

文章目录一、什么是双向链表二、双向链表的简单实现一、什么是双向链表 我们来看一下这个例子&#xff1a; 在一个教室里&#xff0c;所有的课桌排成一列&#xff0c;如图 相信在你们的读书生涯中&#xff0c;老师肯定有要求你们记住自己的前后桌是谁。所以该例子中&#x…...

23种设计模式

参考链接&#xff1a; 【狂神说Java】通俗易懂的23种设计模式教学&#xff08;停更&#xff09;_哔哩哔哩_bilibili 23种设计模式【狂神说】_狂神说设计模式_miss_you1213的博客-CSDN博客 1. 单例模式 参考链接&#xff1a; 【狂神说Java】单例模式-23种设计模式系列_哔哩哔哩…...

20美刀一个月的ChatGPT架构师,性价比逆天了

文章目录20美刀一个月的ChatGPT架构师&#xff0c;性价比逆天了1.角色设定2.基本描述3.解决方案4.物理网络蓝图5.系统集成接口5.1 系统集成接口设计5.1.1 前端服务器与后端服务器接口&#xff1a;5.1.2 后端服务器与去背景处理服务接口&#xff1a;5.2 系统集成接口展示6.部署环…...

海门区教育科学规划课题2020年度成果鉴定书

海门区教育科学规划课题2020年度成果鉴定书 课题编号&#xff1a;HMGZ2020007 课题名称 中学历史核心素养校本化实施的培育研究 主持人 徐彬 工作单位 南通市海门证大中学 核心组成员 &#xff08;包括主持人&#xff09; 姓名 研究任务完成情况 &#xff08;获得的主要成果、…...

大数据专业应该怎么学习

大数据学习不能停留在理论的层面上&#xff0c;大数据方向切入应是全方位的&#xff0c;基础语言的学习只是很小的一个方面&#xff0c;编程落实到最后到编程思想。学习前一定要对大数据有一个整体的认识。 大数据是数据量多吗&#xff1f;其实并不是&#xff0c;通过Hadoop其…...

学习黑客十余年,如何成为一名高级的安全工程师?

1. 前言 说实话&#xff0c;一直到现在&#xff0c;我都认为绝大多数看我这篇文章的读者最后终究会放弃&#xff0c;原因很简单&#xff0c;自学终究是一种适合于极少数人的学习方法&#xff0c;而且非常非常慢&#xff0c;在这个过程中的变数过大&#xff0c;稍有不慎&#…...

【算法】手把手学会二分查找

目录 简介 基本步骤 第一种二分 第二种二分 例题 搜索插入位置 数的范围 总结 简介 &#x1f965;二分查找&#xff0c;又叫折半查找&#xff0c;通过找到数据二段性每次都能将原来的数据筛选掉一半&#xff0c;通过这个算法我们能够将一个一个查找的 O(n) 的时间复杂…...

SVO、vinsmono、 OKVIS系统比较

几个经典视觉slam系统的比较 SVO 高翔链接&#xff1a;https://www.zhihu.com/question/39904950/answer/138644975处理的各个线程: tracking部分-frame to frame 、frame to map 金字塔的处理。这一步估计是从金字塔的顶层开始&#xff0c;把上一层的结果作为下一层估计的初…...

前端开发规范

一、开发工具 开发工具统一使用 VSCode代码格式化插件使用 Prettier代码格式校验使用 ESLintVSCode 需安装的插件有&#xff1a;ESLint、Prettier、Vetur 二、命名规范 项目命名使用小写字母&#xff0c;以连字符分隔 正确&#xff1a;fe-project 错误&#xff1a;FE PROJECT…...

不用科学上网,免费的GPT-4 IDE工具Cursor保姆级使用教程

大家好&#xff0c;我是可乐。 过去的一周&#xff0c;真是疯狂的一周。 GPT-4 震撼发布&#xff0c;拥有了多模态能力&#xff0c;不仅能和GPT3一样进行文字对话&#xff0c;还能读懂图片&#xff1b; 然后斯坦福大学发布 Alpaca 7 B&#xff0c;性能匹敌 GPT-3.5&#xff…...

【艾特淘】抖音小店物流体验分提升的6个维度,新手做店必看

抖音小店体验分&#xff0c;考核的内容包括商品、物流以及服务。大部分人会把重心放在商品评价和服务上&#xff0c;忽略了物流体验。但其实&#xff0c;抖音小店物流体验占比有20%&#xff0c;比服务分的占比还高一点。如果你的订单物流出了问题&#xff0c;很有可能会导致用户…...

数据结构——二叉树与堆

作者&#xff1a;几冬雪来 时间&#xff1a; 内容&#xff1a;二叉树与堆内容讲解 目录 前言&#xff1a; 1.完全二叉树的存储&#xff1a; 2.堆的实现&#xff1a; 1.创建文件&#xff1a; 2.定义结构体&#xff1a; 3.初始化结构体&#xff1a; 4.扩容空间与扩容…...

Three.js——learn02

Three.js——learn02Three.js——learn02通过轨道控制器查看物体OrbitControls核心代码index2.htmlindex.cssindex2.jsresult添加辅助器1.坐标轴辅助器AxesHelper核心代码完整代码2.箭头辅助器ArrowHelper核心代码完整代码3.相机视锥体辅助器CameraHelper核心代码完整代码Three…...

零基础小白如何入门网络安全?

我经常会看到这一类的问题&#xff1a; 学习XXX知识没效果&#xff1b; 学习XXX技能没方向&#xff1b; 学习XXX没办法入门&#xff1b; 给大家一个忠告&#xff0c;如果你完全没有基础的话&#xff0c;前期最好不要盲目去找资料学习&#xff0c;因为大部分人把资料收集好之…...

【前缀和】

前缀和前缀和子矩阵的和结语前缀和 输入一个长度为 n的整数序列。 接下来再输入 m 个询问&#xff0c;每个询问输入一对 l,r 对于每个询问&#xff0c;输出原序列中从第 l 个数到第 r个数的和。 输入格式第一行包含两个整数 n和 m 第二行包含 n个整数&#xff0c;表示整数…...

ChatGPT可以做WebRTC音视频质量性能优化,惊艳到我了

摘要 随着GPT-4的发布&#xff0c;AI的风越吹越旺。GPT-4可以回答问题&#xff0c;可以写作&#xff0c;甚至可以基于一张草图生成html代码搭建一个网站。即构社区的一位开发者倪同学就基于目前在研究的WebRTC QOS技术点对GPT-3.5跟GPT-4进行一场实验&#xff0c;ChatGPT会取代…...

MySQL数据库实现主从同步

安装MySQL数据库8.0.32 前言 今天来学习数据库主从同步的原理及过程&#xff0c;数据库主要是用来存储WEB数据&#xff0c;在企业当中是极为重要的&#xff0c;下面一起来看下。 1.1 数据库做主从的目的 MySQL主从复制在中小企业&#xff0c;大型企业中广泛使用&#xff0c…...

树莓派Zero 2W + 0.96寸OLED屏保姆级接线与配置教程(附I2C开启与Python库安装)

树莓派Zero 2W与0.96寸OLED屏从接线到显示的完整实战指南 第一次拿到树莓派Zero 2W和0.96寸OLED屏时&#xff0c;那种既兴奋又忐忑的心情我至今记得——这么小的板子真能驱动屏幕吗&#xff1f;接线会不会烧毁设备&#xff1f;经过多次实践和踩坑&#xff0c;我整理出这份真正适…...

三年级下册语文第四单元作文:中华传统节日

三年级下册语文《中华传统节日》作文&#xff0c;一般会写&#xff1a;春节元宵节端午节中秋节重点不是介绍很多知识&#xff0c;而是&#xff1a; ✅ 节日习俗 ✅ 自己的经历 ✅ 节日气氛 ✅ 感受我用夸克网盘分享了「三年级下册语文作文1-8单元」&#xff0c;链接&#xff1a…...

出海技术团队的沟通挑战:不是语言问题,是文化差异

当软件测试从业者成为“出海先锋”&#xff0c;我们最先打包进行李箱的是什么&#xff1f;是精通JIRA操作&#xff0c;是熟练Python脚本&#xff0c;是深谙CI/CD流水线。我们自信满满&#xff0c;以为能用一口流利的英语、一套标准的ISTQB术语&#xff0c;在全球化的技术团队中…...

鸿蒙同城兴趣圈页面构建:附近社群与兴趣标签模块详解

鸿蒙同城兴趣圈页面构建&#xff1a;附近社群与兴趣标签模块详解 前言 在 HarmonyOS 6.0 应用开发中&#xff0c;社交类页面的核心挑战在于如何高效展示附近社群、兴趣标签和活动信息。本文将以“同城兴趣圈”应用的主页面为例&#xff0c;深入解析如何在鸿蒙平台上构建社交发现…...

千问 LeetCode 2569. 更新数组后处理求和查询 TypeScript实现

这道题的核心是高效维护 nums1 的区间反转操作&#xff0c;因为数据规模达到 10^5&#xff0c;暴力反转会超时。下面给出 TypeScript 实现&#xff0c;采用线段树 懒标记的方案。function handleQuery(nums1: number[], nums2: number[], queries: number[][]): number[] {con…...

AI测试工具百花齐放,选型之前先搞懂这4个核心问题

在软件测试领域&#xff0c;AI 测试工具正以前所未有的速度涌现。从智能用例生成、缺陷预测到自愈型自动化测试&#xff0c;厂商们构建起一个眼花缭乱的技术矩阵。然而&#xff0c;当团队真正面临选型决策时&#xff0c;却发现“百花齐放”往往意味着“乱花渐欲迷人眼”。许多团…...

NotebookLM时间线功能深度解锁:5个被90%用户忽略的高阶技巧,今天必须掌握

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;NotebookLM时间线功能概览与核心价值 NotebookLM 的时间线&#xff08;Timeline&#xff09;功能是其区别于传统笔记工具的关键创新&#xff0c;它以可视化、可交互的方式呈现文档内容的演进脉络与语义关联。…...

Docker 部署实战:前端应用容器化指南

Docker 部署实战&#xff1a;前端应用容器化指南 什么是 Docker&#xff1f; Docker 是一个开源平台&#xff0c;用于开发、部署和运行应用程序。它使用容器化技术&#xff0c;将应用程序及其依赖打包在一个独立的容器中。 Docker 的优势 一致性&#xff1a;开发环境与生产环境…...

华硕笔记本性能优化终极指南:G-Helper轻量控制工具全面解析

华硕笔记本性能优化终极指南&#xff1a;G-Helper轻量控制工具全面解析 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenboo…...

组态王通过串口服务器采集Modbus RTU设备数据实战指南

1. 项目概述与核心价值最近在做一个工业数据采集的项目&#xff0c;客户现场有几台老设备&#xff0c;只有RS-232/485串口&#xff0c;但上位机软件用的是组态王&#xff0c;需要把串口数据实时送到组态王的变量里。这个场景在工厂里太常见了&#xff0c;老旧PLC、仪表、传感器…...