stm32 ADC采集音频信号 您所在的位置:网站首页 人声鼎沸声音音频 stm32 ADC采集音频信号

stm32 ADC采集音频信号

2024-07-09 23:18| 来源: 网络整理| 查看: 265

前言:最近在做一个关于采集音频信号的小项目,在这里做下记录和总结 1、实现的功能

最终我们需要的功能是:通过ADC模块对音频信号进行采集,利用DMA进行数据的搬运,TIMER定时器触发ADC采集,最终在LCD屏幕上展示出采集信号的波形。 **ADC模块**

最终效果就是这种。 在这里插入图片描述 文章中我没有用到TIMER定时器触发采集,用的是软件触发的方式,屏显我选择了VOFA+软件进行代替。

2、ADC简介

ADC是Analog to Digital Convert的简称。翻译过来也就是模数转换器,它可以将模拟信号转换为数字信号。 什么是模拟信号呢? 模拟信号是指用连续变化的物理量表示的信息,其信号的幅度,或频率,或相位随时间作连续变化,或在一段连续的时间间隔内,其代表信息的特征量可以在任意瞬间呈现为任意数值的信号。日常生活中,我们常见的模拟信号有,如电压、温度、压力、电压、电流等等。 什么是数字信号呢? 数字信号,是指自变量是离散的、因变量也是离散的信号,这种信号的自变量用整数表示,因变量用有限数字中的一个数字来表示。在计算机中,数字信号的大小常用有限位的二进制数表示。 STM32F103 系列芯片拥有 3 个 ADC(C8T6 只有 2 个),这些 ADC 可以独立使用,其中ADC1 和 ADC2 还可以组成双重模式(提高采样率)。STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 18 个通道,可测量 16 个外部和 2 个内部信号源,其中 ADC3 根据 CPU 引脚的不同其通道数也不同,一般有 8 个外部通道。ADC 中的各个通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以以左对齐或者右对齐存储在 16 位数据寄存器中。 STM32F103 的 ADC 主要特性我们可以总结为以下几条: 1、12 位分辨率; 2、转换结束、注入转换结束和发生模拟看门狗事件时产生中断 3、单次和连续转换模式 4、自校准 5、带内嵌数据一致性的数据对齐 6、采样间隔可以按通道分别编程 7、规则转换和注入转换均有外部触发选项 8、间断模式 9、双重模式(带 2 个或以上 ADC 的器件) 10、ADC 转换时间:时钟为 72MHz 为 1.17us 11、ADC 供电要求:2.4V 到 3.6V 12、ADC 输入范围:VREF–≤VIN≤VREF+ 13、规则通道转换期间有 DMA 请求产生 下面这张图是ADC通道表,不同的通道对应不同的IO口,配置ADC的时候需要注意。 在这里插入图片描述

3、直接上代码了 3.1 GPIO初始化(配置PC1为模拟信号输入口) void ADCx_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); // 打开 ADC IO端口时钟 // 配置 ADC IO 引脚模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // 初始化 ADC IO GPIO_Init(GPIOC, &GPIO_InitStructure); } 3.2 ADC和DMA初始化(PC1对应的ADC通道为11) void ADCx_Mode_Config(void) { DMA_InitTypeDef DMA_InitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // 打开DMA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE ); // 打开ADC时钟 DMA_DeInit(DMA1_Channel1);// 复位DMA控制器 // 配置 DMA 初始化结构体 DMA_InitStructure.DMA_PeripheralBaseAddr = ( uint32_t ) ( & ( ADCx->DR ) );// 外设基址为:ADC 数据寄存器地址 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADC_ConvertedValue; // 存储器地址,实际上就是一个内部SRAM的变量 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; // 数据源来自外设 DMA_InitStructure.DMA_BufferSize = 1;// 缓冲区大小为1,缓冲区的大小应该等于存储器的大小 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;// 外设寄存器只有一个,地址不用递增 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; // 存储器地址固定 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;// 外设数据大小为半字,即两个字节 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;// 存储器数据大小也为半字,跟外设数据大小相同 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; // 循环传输模式 DMA_InitStructure.DMA_Priority = DMA_Priority_High;// DMA 传输通道优先级为高,当使用一个DMA通道时,优先级设置不影响 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;// 禁止存储器到存储器模式,因为是从外设到存储器 DMA_Init(ADC_DMA_CHANNEL, &DMA_InitStructure); // 初始化DMA DMA_Cmd(ADC_DMA_CHANNEL , ENABLE);// 使能 DMA 通道 // ADC 模式配置 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;// 只使用一个ADC,属于单模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE ; // 禁止扫描模式,多通道才要,单通道不需要 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 连续转换模式 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 不用外部触发转换,软件开启即可 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 转换结果右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1; // 转换通道1个 // 初始化ADC ADC_Init(ADCx, &ADC_InitStructure); RCC_ADCCLKConfig(RCC_PCLK2_Div8); // 配置ADC时钟为PCLK2的8分频,即9MHz ADC_RegularChannelConfig(ADCx, ADC_CHANNEL, 1, ADC_SampleTime_55Cycles5); // 配置 ADC 通道转换顺序为1,第一个转换,采样时间为55.5个时钟周期 ADC_DMACmd(ADCx, ENABLE); // 使能ADC DMA 请求 ADC_Cmd(ADCx, ENABLE);// 开启ADC ,并开始转换 ADC_ResetCalibration(ADCx);// 初始化ADC 校准寄存器 while(ADC_GetResetCalibrationStatus(ADCx)); // 等待校准寄存器初始化完成 ADC_StartCalibration(ADCx);// ADC开始校准 while(ADC_GetCalibrationStatus(ADCx)); // 等待校准完成 ADC_SoftwareStartConvCmd(ADCx, ENABLE); // 由于没有采用外部触发,所以使用软件触发ADC转换 }

主函数里面只需要调用上面两个初始化函数,while循环中,直接打印ADC通道采集到的数据即可。

4、串口打印电压(音频)值

在这里插入图片描述 这是串口打印的数据并显示波形。不过这个波形感觉很奇怪,正常的波形应该是有上下浮动的,这个只有向上浮动的数据,没有向下的数据。我用LCD屏幕显示波形的话,就是正常的。如下图所示。项目用到的ADC采集模块和这个实验用到的不一样,但ADC采集音频信号这一块的代码逻辑基都是相同的,没有做任何更改。这个原因还不知道是哪里造成的。 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有