博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32CubeMX下STM32单片机声音传感器DMA方式采集多通道数据(ADC-DMA)
阅读量:3933 次
发布时间:2019-05-23

本文共 1771 字,大约阅读时间需要 5 分钟。

前言:之前一篇博客介绍了环境光传感器通过ADC的方式采集单通道的数据,现在介绍一下DMA方式采集多通道的数据。不过使用的是声音传感器,基本原理一样。

1.首先打开ADC1的两个通道IN11,IN12。使能两个通道。
在这里插入图片描述
2.ADC1配置:使能扫描转换模式(Scan Conversion Mode),使能连续转换模式(Continuous Conversion Mode),使能DMA连续请求。ADC规则组选择转换通道数为2(Number Of Conversion)。其他为默认设置。
在这里插入图片描述
3.打开中断。
在这里插入图片描述
4.添加DMA设置,设置为连续传输模式,数据长度为字。
在这里插入图片描述
5.端口通道配置完成在这里插入图片描述
6.时钟配置。在这里插入图片描述
7.项目管理。在这里插入图片描述
在这里插入图片描述
8.生成报告以及代码,编译程序。在adc.c文件中可以看到ADC初始化函数。在main函数前面添加变量。其中ADC_volume作为转换数据缓存数组,ad1,ad2存储PA6,PA7的电压值。

/* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV */uint32_t ADC_volume[100];uint8_t i;uint32_t ad1,ad2;/* USER CODE END PV */

9.在while(1)前面以DMA方式开启ADC转换。HAL_ADC_Start_DMA()函数第二个参数为数据存储的起始地址,第三个参数为DMA传输数据的长度。

/* USER CODE BEGIN 2 */HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_volume,100);  /* USER CODE END 2 */

由于DMA采用了连续传输的模式,ADC采集到的数据会不断传到到存储器中(此处即为数组ADC_volume)。ADC采集的数据从ADC_volume[0]一直存储到ADC_volume[99],然后采集到的数据又重新存储到ADC_volume[0],一直到ADC_volume[99]。所以ADC_volume数组里面的数据会不断被刷新。这个过程中是通过DMA控制的,不需要CPU参与。我们只需读取ADC_volume里面的数据即可得到ADC采集到的数据。

其中ADC_volume[0]为通道6(PA6)采集的数据,ADC_volume[1]为通道7(PA7)采集的数据,ADC_volume[2]为通道6采集的数据,如此类推。数组偶数下标的数据为通道6采集数据,数组奇数下标的数据为通道7采集数据。

10.在while(1)循环中添加应用程序,将采集的数据装换为电压值并输出。

/* USER CODE BEGIN WHILE */  while (1)  {    /* USER CODE END WHILE */    /* USER CODE BEGIN 3 */		    HAL_Delay(500);        for(i = 0,ad1 =0,ad2=0; i < 100;)        {            ad1 += ADC_volume[i++];            ad2 += ADC_volume[i++];        }        ad1 /= 50;        ad2 /= 50;         printf("\r\n******** ADC DMA Example ********\r\n\r\n");        printf(" AD1 volume = %1.3fV \r\n", ad1*3.3f/4096);        printf(" AD2 volume = %1.3fV \r\n", ad2*3.3f/4096);				HAL_Delay(1000);  }      /* USER CODE END 3 */

程序中将数组偶数下标数据加起来求平均值,实现均值滤波的功能,再将数据转换为电压值。

11.编译程序并下载到开发板。打开串口调试助手。设置波特率为115200.串口助手上会显示声音对应的电压值。现象如下:
在这里插入图片描述

转载地址:http://xyhgn.baihongyu.com/

你可能感兴趣的文章
java IO/NIO 下载上传的笔记
查看>>
对行为的描述---一般系统论读书笔记
查看>>
贪心算法
查看>>
分支限界法
查看>>
随机化算法
查看>>
项目整体管理(一)
查看>>
项目整体管理(二)
查看>>
推荐阅读书籍
查看>>
外包管理
查看>>
项目管理师职业道德规范
查看>>
战略管理概述
查看>>
业务流程管理和重组
查看>>
知识管理
查看>>
项目整体绩效评估
查看>>
信息安全系统和安全体系
查看>>
信息系统安全风险识别与评估
查看>>
信息安全系统的组织管理
查看>>
项目时间管理脉络
查看>>
项目成本管理脉络
查看>>
项目质量管理脉络
查看>>