STM32 ADC+定时器+DMA+FFT
本次实现的功能为单片机DAC输出一个正弦波,然后ADC定时采样用DMA输出,最后对DAC输出的波形进行FFT。
单片机STM32F103ZET6
内部时钟
一、配置ADC
ADC端口为PA1,采用DMA输出,定时器3触发
![](https://img-blog.csdnimg.cn/img_convert/5c99ef052741b4ddf258614fe2353d0d.png)
![](https://img-blog.csdnimg.cn/img_convert/d232b36bb837f43ee94ed5c4e9006710.png)
![](https://img-blog.csdnimg.cn/img_convert/0b6fde1ff0d93376fc5a50be37f0279f.png)
![](https://img-blog.csdnimg.cn/img_convert/fe149871d9f202ade8a36925eb67868f.png)
定时器时钟64M,分频后为102.4KHz
ADC采样时间为102.4KHz/100=1.024KHz
二、配置DAC
DAC端口PA4
![](https://img-blog.csdnimg.cn/img_convert/628f49e5d6bf71aa075e9ab3afd79b40.png)
DMA传输
![](https://img-blog.csdnimg.cn/img_convert/5acab2877fd8d4726a94d7e019078bad.png)
定时器6
定时器时钟64M,分频后为1MHz
![](https://img-blog.csdnimg.cn/img_convert/c256fe6dc1b361a87ac5a640c4506040.png)
三、配置DSP
![](https://img-blog.csdnimg.cn/img_convert/b638e6ed20d1ed0f3227b6bf9faabbb1.png)
![](https://img-blog.csdnimg.cn/img_convert/f95be87f6896dadca3e7c9dcb2056633.png)
四、配置时钟
![](https://img-blog.csdnimg.cn/img_convert/074ab9cc0a89cf4dfd802bea4a4c66b5.png)
四、代码
注意生成的代码里初始化中DMA要在ADC之前
FFT需要#include "arm_math.h"头文件
需添加include
![](https://img-blog.csdnimg.cn/img_convert/58d62e1bde43986a33de05376cafcdaf.png)
![](https://img-blog.csdnimg.cn/img_convert/b0737772df5fb14e9236e79b86807a8d.png)
![](https://img-blog.csdnimg.cn/img_convert/5487dbea47de82d57174b8f3a7e8fde0.png)
在define后面补全USE_HAL_DRIVER,STM32F103xE,ARM_MATH_CM4,__CC_ARM,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING,__FPU_PRESENT=1
![](https://img-blog.csdnimg.cn/img_convert/11daa4dcc8a818134c3d6af4885eb552.png)
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个波形
![](https://img-blog.csdnimg.cn/img_convert/7c44ca67b660e8522223b6fdd54c9c05.png)
FFT分析后得波形
![](https://img-blog.csdnimg.cn/img_convert/62a9815b534c86509ac3029657c19028.png)
![](https://img-blog.csdnimg.cn/img_convert/d09b30dda49838b5e09488a48d320c60.png)
可以看到频率为50左右,还是比较精准的
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/d09b30dda49838b5e09488a48d320c60.png)
STM32 ADC+定时器+DMA+FFT
本次实现的功能为单片机DAC输出一个正弦波,然后ADC定时采样用DMA输出,最后对DAC输出的波形进行FFT。单片机STM32F103ZET6内部时钟一、配置ADCADC端口为PA1,采用DMA输出,定时器3触发定时器时钟64M,分频后为102.4KHzADC采…...
![](https://www.ngui.cc/images/no-images.jpg)
用Node.js实现一个HTTP服务器程序(文件服务器)
http Node.js开发的目的就是为了用JavaScript编写Web服务器程序。因为JavaScript实际上已经统治了浏览器端的脚本,其优势就是有世界上数量最多的前端开发人员。如果已经掌握了JavaScript前端开发,再学习一下如何将JavaScript应用在后端开发,就是名副其实的全栈了。 HTTP协…...
![](https://img-blog.csdnimg.cn/227820fabcfc48f98a3f9192febec938.gif)
Python实现人脸识别检测, 对美女主播照片进行评分排名
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 素材、视频、代码、插件安装教程我都准备好了,直接在文末名片自取就可点击此处跳转 开发环境: Python 3.8 Pycharm 2021.2 模块使用: requests >>> pip install requests tqdm >…...
![](https://img-blog.csdnimg.cn/5261bf2a11124b798cf2e02aeb0bb25e.png)
【数据结构与算法】什么是双向链表?并用代码手动实现一个双向链表
文章目录一、什么是双向链表二、双向链表的简单实现一、什么是双向链表 我们来看一下这个例子: 在一个教室里,所有的课桌排成一列,如图 相信在你们的读书生涯中,老师肯定有要求你们记住自己的前后桌是谁。所以该例子中&#x…...
![](https://img-blog.csdnimg.cn/3a8e83662fea495baa36475c12c3922c.png)
23种设计模式
参考链接: 【狂神说Java】通俗易懂的23种设计模式教学(停更)_哔哩哔哩_bilibili 23种设计模式【狂神说】_狂神说设计模式_miss_you1213的博客-CSDN博客 1. 单例模式 参考链接: 【狂神说Java】单例模式-23种设计模式系列_哔哩哔哩…...
![](https://www.ngui.cc/images/no-images.jpg)
20美刀一个月的ChatGPT架构师,性价比逆天了
文章目录20美刀一个月的ChatGPT架构师,性价比逆天了1.角色设定2.基本描述3.解决方案4.物理网络蓝图5.系统集成接口5.1 系统集成接口设计5.1.1 前端服务器与后端服务器接口:5.1.2 后端服务器与去背景处理服务接口:5.2 系统集成接口展示6.部署环…...
![](https://www.ngui.cc/images/no-images.jpg)
海门区教育科学规划课题2020年度成果鉴定书
海门区教育科学规划课题2020年度成果鉴定书 课题编号:HMGZ2020007 课题名称 中学历史核心素养校本化实施的培育研究 主持人 徐彬 工作单位 南通市海门证大中学 核心组成员 (包括主持人) 姓名 研究任务完成情况 (获得的主要成果、…...
![](https://www.ngui.cc/images/no-images.jpg)
大数据专业应该怎么学习
大数据学习不能停留在理论的层面上,大数据方向切入应是全方位的,基础语言的学习只是很小的一个方面,编程落实到最后到编程思想。学习前一定要对大数据有一个整体的认识。 大数据是数据量多吗?其实并不是,通过Hadoop其…...
![](https://img-blog.csdnimg.cn/img_convert/2bb8cbc9344106d137781f8b514ef478.jpeg)
学习黑客十余年,如何成为一名高级的安全工程师?
1. 前言 说实话,一直到现在,我都认为绝大多数看我这篇文章的读者最后终究会放弃,原因很简单,自学终究是一种适合于极少数人的学习方法,而且非常非常慢,在这个过程中的变数过大,稍有不慎&#…...
![](https://img-blog.csdnimg.cn/a7d74ccc26644779aefa1e9785b71b86.png)
【算法】手把手学会二分查找
目录 简介 基本步骤 第一种二分 第二种二分 例题 搜索插入位置 数的范围 总结 简介 🥥二分查找,又叫折半查找,通过找到数据二段性每次都能将原来的数据筛选掉一半,通过这个算法我们能够将一个一个查找的 O(n) 的时间复杂…...
![](https://www.ngui.cc/images/no-images.jpg)
SVO、vinsmono、 OKVIS系统比较
几个经典视觉slam系统的比较 SVO 高翔链接:https://www.zhihu.com/question/39904950/answer/138644975处理的各个线程: tracking部分-frame to frame 、frame to map 金字塔的处理。这一步估计是从金字塔的顶层开始,把上一层的结果作为下一层估计的初…...
![](https://www.ngui.cc/images/no-images.jpg)
前端开发规范
一、开发工具 开发工具统一使用 VSCode代码格式化插件使用 Prettier代码格式校验使用 ESLintVSCode 需安装的插件有:ESLint、Prettier、Vetur 二、命名规范 项目命名使用小写字母,以连字符分隔 正确:fe-project 错误:FE PROJECT…...
![](https://img-blog.csdnimg.cn/img_convert/7795cb1f35442887b891cf7b3665a2de.png)
不用科学上网,免费的GPT-4 IDE工具Cursor保姆级使用教程
大家好,我是可乐。 过去的一周,真是疯狂的一周。 GPT-4 震撼发布,拥有了多模态能力,不仅能和GPT3一样进行文字对话,还能读懂图片; 然后斯坦福大学发布 Alpaca 7 B,性能匹敌 GPT-3.5ÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
【艾特淘】抖音小店物流体验分提升的6个维度,新手做店必看
抖音小店体验分,考核的内容包括商品、物流以及服务。大部分人会把重心放在商品评价和服务上,忽略了物流体验。但其实,抖音小店物流体验占比有20%,比服务分的占比还高一点。如果你的订单物流出了问题,很有可能会导致用户…...
![](https://img-blog.csdnimg.cn/9c152e18a85b46f78bb7ca2919c1a56f.png)
数据结构——二叉树与堆
作者:几冬雪来 时间: 内容:二叉树与堆内容讲解 目录 前言: 1.完全二叉树的存储: 2.堆的实现: 1.创建文件: 2.定义结构体: 3.初始化结构体: 4.扩容空间与扩容…...
![](https://img-blog.csdnimg.cn/4076c3bedf0e4d40aff5ac08352a9850.png)
Three.js——learn02
Three.js——learn02Three.js——learn02通过轨道控制器查看物体OrbitControls核心代码index2.htmlindex.cssindex2.jsresult添加辅助器1.坐标轴辅助器AxesHelper核心代码完整代码2.箭头辅助器ArrowHelper核心代码完整代码3.相机视锥体辅助器CameraHelper核心代码完整代码Three…...
![](https://img-blog.csdnimg.cn/img_convert/e992045027882e8f94d70ab26ed681cc.png)
零基础小白如何入门网络安全?
我经常会看到这一类的问题: 学习XXX知识没效果; 学习XXX技能没方向; 学习XXX没办法入门; 给大家一个忠告,如果你完全没有基础的话,前期最好不要盲目去找资料学习,因为大部分人把资料收集好之…...
![](https://img-blog.csdnimg.cn/b0dd2b2f8dca48ccb12d594f0d6e3060.png)
【前缀和】
前缀和前缀和子矩阵的和结语前缀和 输入一个长度为 n的整数序列。 接下来再输入 m 个询问,每个询问输入一对 l,r 对于每个询问,输出原序列中从第 l 个数到第 r个数的和。 输入格式第一行包含两个整数 n和 m 第二行包含 n个整数,表示整数…...
ChatGPT可以做WebRTC音视频质量性能优化,惊艳到我了
摘要 随着GPT-4的发布,AI的风越吹越旺。GPT-4可以回答问题,可以写作,甚至可以基于一张草图生成html代码搭建一个网站。即构社区的一位开发者倪同学就基于目前在研究的WebRTC QOS技术点对GPT-3.5跟GPT-4进行一场实验,ChatGPT会取代…...
![](https://img-blog.csdnimg.cn/ca51a72e133949efb54779c6a0735f4c.jpeg#pic_center)
MySQL数据库实现主从同步
安装MySQL数据库8.0.32 前言 今天来学习数据库主从同步的原理及过程,数据库主要是用来存储WEB数据,在企业当中是极为重要的,下面一起来看下。 1.1 数据库做主从的目的 MySQL主从复制在中小企业,大型企业中广泛使用,…...
![](https://img-blog.csdnimg.cn/d88742a601d54b8e845664bd8138fd5e.png)
go语言gin框架学习
让框架去做http解包封包等,让我们的精力用在应用层开发 MVC模式 M: model,操作数据库gorm view 视图 处理模板页面 contoller 控制器 路由 逻辑函数 解决gin相关代码飘红的问题 记得启用gomodule go env -w GO111MODULEon然后到相应目录下执行 go mod i…...
![](https://img-blog.csdnimg.cn/d47377d470cf4ef68ac620a95dd3ea84.png)
Java奠基】Java经典案例讲解
目录 卖飞机票 找质数 开发验证码 数组元素的复制 评委打分 数字加密 数字解密 抢红包 模拟双色球 二维数组 卖飞机票 需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。按照如下规则计算机票价格: 旺季&…...
![](https://img-blog.csdnimg.cn/4aaf81b863b24cad972cba464d8f7b2f.png)
新闻文本分类任务:使用Transformer实现
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...
![](https://img-blog.csdnimg.cn/img_convert/9fbbde33dc2f49b59759306c634c5a25.webp?x-oss-process=image/format,png)
如何在 Vue 中使用 防抖 和 节流
大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库 https://mp.weixin.qq.com/s?__bizMzU5NzA0NzQyNg&mid2247485824&idx3&sn70cd26a7c0c683de64802f6cb9835003&scene21#wech…...
![](https://www.ngui.cc/images/no-images.jpg)
美国Linux服务器系统增强安全的配置
美国Linux服务器系统可能出现的安全漏洞中,更多是由于不当的系统配置所造成的,用户们可以通过一些适当的安全配置来防止问题的发生。美国Linux服务器系统上运行的服务越多,不当配置的概率也就越高,那么系统出现安全问题的可能性也…...
![](https://www.ngui.cc/images/no-images.jpg)
【史上最全面esp32教程】oled显示篇
文章目录前言介绍及库下载基础使用引脚的连接使用函数总结前言 本节课主要讲的是OLED的基础使用。使用的oled为0.96寸,128*64。 大家的其他型号也是可以用的。 提示:以下是本篇文章正文内容,下面案例可供参考 介绍及库下载 oled的简介&…...
![](https://img-blog.csdnimg.cn/4403490b58b4429ea6458e8632d42ab3.png)
第十四届蓝桥杯三月真题刷题训练——第 21 天
目录 第 1 题:灭鼠先锋 问题描述 运行限制 代码: 思路: 第 2 题:小蓝与钥匙 问题描述 答案提交 运行限制 代码: 思路 : 第 3 题:李白打酒加强版 第 4 题:机房 第 1 题࿱…...
![](https://img-blog.csdnimg.cn/77d0d8a2b231490c92692e753e4c3dc0.png)
css绘制一个Pinia小菠萝
效果如下: pinia小菠萝分为头部和身体,头部三片叶子,菠萝为身体 头部 先绘制头部的盒子,将三片叶子至于头部盒子中 先绘制中间的叶子,利用border-radius实现叶子的效果,可以借助工具来快速实现圆角的预想…...
![](https://img-blog.csdnimg.cn/51987e549aff48dbb49b497dd99d8423.png)
OpenCV入门(二十)快速学会OpenCV 19 对象测量
OpenCV入门(二十)快速学会OpenCV 19 对象测量1.对象测量2.多边形拟合3.计算对象中心作者:Xiou 1.对象测量 opencv 中对象测量包括: 如面积,周长,质心,边界框等。 弧长与面积测量; …...
![](https://img-blog.csdnimg.cn/58435e5072d9434dae3d8f878462908e.png)
TCP和UDP协议的区别?
是否面向连接: TCP 是面向连接的传输,UDP 是面向无连接的传输。 是否是可靠传输:TCP是可靠的传输服务,在传递数据之前,会有三次握手来建立连接;在数据传递时,有确认、窗口、重传、拥塞控制机制…...
![](http://images0.cnblogs.com/blog2015/592102/201506/271621005953098.png)
中山企业集团网站建设/营销方案设计思路
2019独角兽企业重金招聘Python工程师标准>>> VMWare 11 版本给虚拟机默认分配20G磁盘,扩展至30G。下面是扩展方法: 虚拟机磁盘扩容虚拟机保持关闭状态,设置 -> 磁盘 -> 拓展 -> 最大磁盘大小 设成 30G 系统中使用拓展的…...
![](/images/no-images.jpg)
东台专业做网站/株洲网站设计外包首选
5.1 Laravel中的文件上传 文件系统 Laravel 的文件系统是基于 Frank de Jonge 的 Flysystem 扩展包 提供了简单的接口,可以操作本地端空间、Amazong S3、Rackspace Clound Storage 可以非常简单的切换不同的保存方式,但仍使用相同的api操作 配置文件…...
![](https://img-blog.csdnimg.cn/849d9c9899b24e8daa52c0ca83a9db47.jpeg#pic_center)
可以做兼职的动漫网站/关键词查网址
数据定义语言DDLData Definition Language-数据定义语言:create / drop / alter 创建数据库 create database school default charset utf8mb4;create database:固定写法school:库名default charset:设置默认的字符集utf8mb4:库中数据的格式,最大4字节的…...
![](/images/no-images.jpg)
网站支付页面怎么做的/站长工具域名查询ip
在接收文件方面请仔细查看,IrDAClient().GetStream 返回Stream对象,他和TcpLister、TcpClient 的返回不一样,要特别注意。.NET Compact Framework 为设备之间的红外线通信提供类。此示例演示了如何使用红外线通信在设备之间发送和接收文件。您…...
![](/images/no-images.jpg)
广州品牌网站开发/站长之家域名
/*Name: NYOJ--24--素数距离问题Author: shen_渊 Date: 17/04/17 16:42Description: 原来代码看不下去了o(╯□╰)o */ #include<iostream> using namespace std; int isPrime(int); int main(){ios::sync_with_stdio(false);int T;cin>>T;while(T--){int n;cin&…...
![](/images/no-images.jpg)
关键词和网站的关系/seo主要做什么
使用rpm命令查询软件包: 1、查询系统中安装的所有RPM包 $ rpm -qa 查询当前linux系统中已经安装的软件包。 例:$ rpm -qa | grep -i x11 | head -3 察看系统中包含x11字符串的前3行软件包。 2、查询软件包是否安装 $ rpm –q rpm包名称 察看系统中指定软…...