STM32 CubeMX配置ADC+DMA进行FFT(1)
STM32 CubeMX配置ADC+DMA,计算采样率和ADC电压
原创:睿智嵌入式
最近,因为项目需要处理音频信号,对AD采集的音频信号进行FFT运算,记录一下学习过程。
主要内容:
1.ADC和DMA各配置有什么实际意义
2.配置好的ADC如何计算采样率和电压值
cubeMX配置ADC+DMA
这里我用的是STM32F407处理器,与其他的处理器思路大体一致
ADC配置
Mode是ADC工作模式 我们设置为independent mode(独立模式)因为只需要单独ADC使用,如果是多个ADC联合使用才需要更改。
Clock Prescaler是ADC工作频率,这里PCLK2在F407上为84MHZ,再4分频为21MHZ,所以ADC工作频率为21MHZ,一秒有21M个ADC周期,一个ADC周期为1/(21M)=47.619ns。
Resolution 是选择ADC分辨率以及得到一个ADC值的时间=采样时间+转换时间,转换时间一般是固定的例如:F407为12个ADC周期、F103为12.5个ADC周期,采样时间在Rank->Sampling Time里配置,这里我采样时间选择3个ADC周期。
Data Alignment是数据对齐方式,一般配置为右对齐,如果是12位分辨率会存储在uint16_t的[11:0]位,其他位为干扰。
Scan Conversion Mode是多通道模式,顾名思义,这里不需要,为Disabled。
Continuous Conversion Mode是连续捕获模式,一般为Enabled,实际上开不开都可以正常使用,但是开了数据更新速度明显加快。
Discontinuous Conversion Mode是不连续捕获,Disabled。
DMA Continuous Requests是DMA连续请求模式,这个十分主要,例如HAL_ADC_START_DMA(&hadc1,(uint32_t *)buf,200) 这个语句,使用ADC1和DMA,数据放入buf数组内,放200个数据。如果DMA连续请求去能的话,这个语句传完200个数据后自动关闭ADC1和DMA。反之,使能后,语句执行完后会又会连续从头开始传输数据,实际为buf数组中的值一直在更新。
Number Of Conversion是规则组通道数量这里我只要一个通道,如果是多个通道前面的多通道模式要使能。
External Trigger Conversion Source规则组通道采样的触发源,这里我们软件触发,也可以配置为定时器触发。
External Trigger Conversion Edge规则组通道采样的触发源的触发方式,一般有上升沿触发,或下降沿触发,这里我们不需要。
Rank配置规则组通道的采样顺序和各通道的采样时间,这里我们只有一个通道,所以只需要配置采样时间3ADC周期
之后是注入组,实际为我们特定时候需要采样用的,感觉像在中断里面的ADC。到此ADC基本配置完毕。
DMA配置
Add->Select->ADC1配置ADC与DMA建立联系。
Priority->High优先级高。
Mode->Circular DMA工作模式,一般为循环模式,没想到什么情况只需要传一个数据还要DMA的。
increment Address为地址自增,一般外设地址是固定的,但是我们数据存储是在数组内,所以需要存储完后自动移到下一个位子再存
数据。
Use Fifo使用FIFO一个缓冲空间,一般用于匹配速度的。
Data Width数据长度Word为字有4字节32位长度、Half Word为半字有2字节16位、Byte字节8位。注意ADC分辨率我们是12位。
到此ADC和DMA配置完毕。
计算ADC采样率
由于有DMA所以单片机在ADC采样的时候不需要去代码获取,可以尽量保证ADC采样点之间间隔的ADC周期数一样。同时我们代码也要
尽量避免ADC采样时不要有其他工作,数据处理放在采完一轮之后处理。
按上面的配置ADC工作频率21MHZ,一个ADC周期47.619ns
一个AD值时间=采样时间+转换时间=3+12=15ADC周期=0.71us=1.4MHZ
所以一秒钟可以采1.4M个AD值,ADC的采样率为1.4M,对应FFT中的Fs
计算ADC电压值
由于我用的开发板,内部供电3.3V,按上面配置的ADC分辨率为12位,2^12=4096
所以ADC采集的电压值=(ADC的采集值*3.3)/(2^12) V
例如:ADC采集值为2000,则对应电压值为1.611328V
结尾
附上一张按上述配置的ADC采样的图,用excel表拟合的,信号为1Vpp正弦波1V偏置电压
PS:如果有所帮助可以点个赞✧( ु•⌄• )◞
下篇记录FFT运算,如果使用cubeMX推荐大家去看看cubeMX自带的库,一般在
C:\Users\Administrator\STM32Cube\Repository\STM32Cube_FW_F4_V1.24.2\Drivers\CMSIS\docs
然后去看对应需要的库,搜索index.html索引文件,用chrome打开非常流畅。
如果时.chm文件可以转html文件打开,参考chm转换为html超简单的方法
STM32 CubeMX配置ADC+DMA进行FFT(1)相关推荐
- STM32开发(14)----CubeMX配置ADC
CubeMX配置ADC 前言 一.什么是ADC? 二.实验过程 1.单通道ADC采集 STM32CubeMX配置 代码实现 2.多通道ADC采样(非DMA) STM32CubeMX配置 代码实现 3. ...
- STM32 HAL库 CUBEMX配置 ADC采集
文章目录 STM32 HAL库 CUBEMX配置 ADC采集 软硬件型号 1.单通道不定时任意时刻采集信号 CUBEMX配置 代码添加 2.单通道ADC采集+DMA传输 CUBEMX添加配置 代码添加 ...
- STM32 H7系列ADC DMA模式过采样设置详解 cubeMX
最近做项目需要用H743的ADC采样,发现和M3及M4的差别还是蛮多的,MPU的配置对DMA读取数据的影响.过采样机制等,其中H7的硬件过采样是个很实用的东西,硬汉大佬也进行了测试: STM32H7的 ...
- STM32 HAL库ADC+DMA(非定时器)代码和遇到的问题
目录 一.整体说明 二.部分知识点预览 三.代码部分 四.遇到的问题及现象 (1)仿真进入错误 (2)非连续模式软件触发时adcbuf里面的数据不对 (3)HAL库的ADC DMA相关中断的嵌套实现 ...
- c语言定时器定时1ms程序,STM32 Cubemx 配置定时器定时1mS
最近才发现原来我把定时器里的配置参数代表的意义给搞混了,这里记录一下,防止以后自己忘记. 以建立一个定时1mS定时器为例: 1.先打开定时器 2.配置好时钟 3.配置定时器设置 重点来了,以前在这里我 ...
- stm32 CubeMX配置按键开关灯
文章目录 前言 一.CubeMX配置 二.代码解析 总结 前言 本篇文章主要带大家学习如何使用按键进行开关灯的操作. 一.CubeMX配置 cubeMX配置大家可以参考下面文章,这里我只讲需要添加的地 ...
- STM32F030 使用CUBEMX配置ADC多通道采集 DMA传输
STM32CubeMX的配置 以下为测试代码 //usart重定向,注意使用前需要包含头文件<stdio.h> int fputc(int ch, FILE *f) {HAL_UART_T ...
- STM32H743 ADC1+DMA1 ADC3+BDMA CubeMX配置使用
文章目录 前言 STM32CubeMX配置 ADC DMA工作流程注意事项 相关代码和测试结果 内存分配 采样率计算 内部温度传感器 参考 前言 前段时间被STM32H7的以太网和printf坑的不行 ...
- STM32 cubeMX下配置STM32单片机使无源蜂鸣器输出PWM波并放音乐
1.首先我们要了解定时器(timer) timer分为三种:高级定时器(tim1,tim8),基本定时器(tim6,tim7),通用定时器(tim2,tim3,tim4,tim5). 基本定时器:它有 ...
最新文章
- mysql isnu_mysql和nginx服务是否正常监控脚本
- Memory Information on Windows Mobile(续)
- FTP服务器的防火墙通用设置规则
- 破解phpstorm2017.3.1版本并解决win10下修改hosts问题
- ASP.NET MVC3 读书笔记三(Html辅助方法下)
- 第一次冲刺对各组的评价
- WSDM Cup 2020 引用意图识别赛道冠军解决方案(附答辩视频、PPT和代码)
- 如何找到设备的guid_如何禁止win10自动更新显卡驱动
- win10专业版虚拟机配置服务器,虚拟机专用专业版win10 账号密码
- Google Hangouts支持使用Firefox WebRTC
- xp java配置_WinXP系统Java配置环境变量的方法
- linux /proc/cpuinfo文件分析
- 跟一个大佬前辈交流了一下
- RTX5 | 配置文件RTX_Config.h(三)
- MessageBox模态对话框[转]
- Android studio显示红叉,提示Error:please select android sdk
- 【Object C】从Java 一步步走向Object C
- 快闪视频快影_快闪的12个步骤!
- PHP人才匮乏,月入万元不是梦
- web网页设计实例作业 ——电影泰坦尼克号(4页) HTML+CSS+JavaScript 学生HTML个人网页作业作品下载 个人网页设计制作 大学生个人网站作业模板 简单个人网页制作
热门文章
- 【案例】10个视觉系优秀网页设计让你打破灵感的僵局
- 如何同时给多个视频加水印?
- 秦小明 第九讲 金融行业公司类型
- 美术向技美入门课——庄懂的技术美术入门课(美术向)01
- 信用卡被风控的原因是什么?如何应对风控?
- flask python 上传图片或头像
- 如何避免扫码枪重复扫码
- amd linux显卡驱动,AMD Radeon系列显卡催化剂驱动14.4 正式版For Linux AMD Radeon系列显卡催化剂驱动14.4 正式版 显卡驱动 超威半导体...
- Matplot X轴,Y轴最大值限定(固定X轴、Y轴的范围)
- [Design]国粹京剧 脸谱表情 值得收藏