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)相关推荐

  1. STM32开发(14)----CubeMX配置ADC

    CubeMX配置ADC 前言 一.什么是ADC? 二.实验过程 1.单通道ADC采集 STM32CubeMX配置 代码实现 2.多通道ADC采样(非DMA) STM32CubeMX配置 代码实现 3. ...

  2. STM32 HAL库 CUBEMX配置 ADC采集

    文章目录 STM32 HAL库 CUBEMX配置 ADC采集 软硬件型号 1.单通道不定时任意时刻采集信号 CUBEMX配置 代码添加 2.单通道ADC采集+DMA传输 CUBEMX添加配置 代码添加 ...

  3. STM32 H7系列ADC DMA模式过采样设置详解 cubeMX

    最近做项目需要用H743的ADC采样,发现和M3及M4的差别还是蛮多的,MPU的配置对DMA读取数据的影响.过采样机制等,其中H7的硬件过采样是个很实用的东西,硬汉大佬也进行了测试: STM32H7的 ...

  4. STM32 HAL库ADC+DMA(非定时器)代码和遇到的问题

    目录 一.整体说明 二.部分知识点预览 三.代码部分 四.遇到的问题及现象 (1)仿真进入错误 (2)非连续模式软件触发时adcbuf里面的数据不对 (3)HAL库的ADC DMA相关中断的嵌套实现 ...

  5. c语言定时器定时1ms程序,STM32 Cubemx 配置定时器定时1mS

    最近才发现原来我把定时器里的配置参数代表的意义给搞混了,这里记录一下,防止以后自己忘记. 以建立一个定时1mS定时器为例: 1.先打开定时器 2.配置好时钟 3.配置定时器设置 重点来了,以前在这里我 ...

  6. stm32 CubeMX配置按键开关灯

    文章目录 前言 一.CubeMX配置 二.代码解析 总结 前言 本篇文章主要带大家学习如何使用按键进行开关灯的操作. 一.CubeMX配置 cubeMX配置大家可以参考下面文章,这里我只讲需要添加的地 ...

  7. STM32F030 使用CUBEMX配置ADC多通道采集 DMA传输

    STM32CubeMX的配置 以下为测试代码 //usart重定向,注意使用前需要包含头文件<stdio.h> int fputc(int ch, FILE *f) {HAL_UART_T ...

  8. STM32H743 ADC1+DMA1 ADC3+BDMA CubeMX配置使用

    文章目录 前言 STM32CubeMX配置 ADC DMA工作流程注意事项 相关代码和测试结果 内存分配 采样率计算 内部温度传感器 参考 前言 前段时间被STM32H7的以太网和printf坑的不行 ...

  9. STM32 cubeMX下配置STM32单片机使无源蜂鸣器输出PWM波并放音乐

    1.首先我们要了解定时器(timer) timer分为三种:高级定时器(tim1,tim8),基本定时器(tim6,tim7),通用定时器(tim2,tim3,tim4,tim5). 基本定时器:它有 ...

最新文章

  1. mysql isnu_mysql和nginx服务是否正常监控脚本
  2. Memory Information on Windows Mobile(续)
  3. FTP服务器的防火墙通用设置规则
  4. 破解phpstorm2017.3.1版本并解决win10下修改hosts问题
  5. ASP.NET MVC3 读书笔记三(Html辅助方法下)
  6. 第一次冲刺对各组的评价
  7. WSDM Cup 2020 引用意图识别赛道冠军解决方案(附答辩视频、PPT和代码)
  8. 如何找到设备的guid_如何禁止win10自动更新显卡驱动
  9. win10专业版虚拟机配置服务器,虚拟机专用专业版win10 账号密码
  10. Google Hangouts支持使用Firefox WebRTC
  11. xp java配置_WinXP系统Java配置环境变量的方法
  12. linux /proc/cpuinfo文件分析
  13. 跟一个大佬前辈交流了一下
  14. RTX5 | 配置文件RTX_Config.h(三)
  15. MessageBox模态对话框[转]
  16. Android studio显示红叉,提示Error:please select android sdk
  17. 【Object C】从Java 一步步走向Object C
  18. 快闪视频快影_快闪的12个步骤!
  19. PHP人才匮乏,月入万元不是梦
  20. web网页设计实例作业 ——电影泰坦尼克号(4页) HTML+CSS+JavaScript 学生HTML个人网页作业作品下载 个人网页设计制作 大学生个人网站作业模板 简单个人网页制作

热门文章

  1. 【案例】10个视觉系优秀网页设计让你打破灵感的僵局
  2. 如何同时给多个视频加水印?
  3. 秦小明 第九讲 金融行业公司类型
  4. 美术向技美入门课——庄懂的技术美术入门课(美术向)01
  5. 信用卡被风控的原因是什么?如何应对风控?
  6. flask python 上传图片或头像
  7. 如何避免扫码枪重复扫码
  8. amd linux显卡驱动,AMD Radeon系列显卡催化剂驱动14.4 正式版For Linux AMD Radeon系列显卡催化剂驱动14.4 正式版 显卡驱动 超威半导体...
  9. Matplot X轴,Y轴最大值限定(固定X轴、Y轴的范围)
  10. [Design]国粹京剧 脸谱表情 值得收藏