欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:stm32 ADC采集音頻信號(hào)

柚子快報(bào)激活碼778899分享:stm32 ADC采集音頻信號(hào)

http://yzkb.51969.com/

前言:最近在做一個(gè)關(guān)于采集音頻信號(hào)的小項(xiàng)目,在這里做下記錄和總結(jié)

1、實(shí)現(xiàn)的功能

最終我們需要的功能是:通過ADC模塊對(duì)音頻信號(hào)進(jìn)行采集,利用DMA進(jìn)行數(shù)據(jù)的搬運(yùn),TIMER定時(shí)器觸發(fā)ADC采集,最終在LCD屏幕上展示出采集信號(hào)的波形。

最終效果就是這種。 文章中我沒有用到TIMER定時(shí)器觸發(fā)采集,用的是軟件觸發(fā)的方式,屏顯我選擇了VOFA+軟件進(jìn)行代替。

2、ADC簡介

ADC是Analog to Digital Convert的簡稱。翻譯過來也就是模數(shù)轉(zhuǎn)換器,它可以將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)。 什么是模擬信號(hào)呢? 模擬信號(hào)是指用連續(xù)變化的物理量表示的信息,其信號(hào)的幅度,或頻率,或相位隨時(shí)間作連續(xù)變化,或在一段連續(xù)的時(shí)間間隔內(nèi),其代表信息的特征量可以在任意瞬間呈現(xiàn)為任意數(shù)值的信號(hào)。日常生活中,我們常見的模擬信號(hào)有,如電壓、溫度、壓力、電壓、電流等等。 什么是數(shù)字信號(hào)呢? 數(shù)字信號(hào),是指自變量是離散的、因變量也是離散的信號(hào),這種信號(hào)的自變量用整數(shù)表示,因變量用有限數(shù)字中的一個(gè)數(shù)字來表示。在計(jì)算機(jī)中,數(shù)字信號(hào)的大小常用有限位的二進(jìn)制數(shù)表示。 STM32F103 系列芯片擁有 3 個(gè) ADC(C8T6 只有 2 個(gè)),這些 ADC 可以獨(dú)立使用,其中ADC1 和 ADC2 還可以組成雙重模式(提高采樣率)。STM32 的 ADC 是 12 位逐次逼近型的模擬數(shù)字轉(zhuǎn)換器。它有 18 個(gè)通道,可測(cè)量 16 個(gè)外部和 2 個(gè)內(nèi)部信號(hào)源,其中 ADC3 根據(jù) CPU 引腳的不同其通道數(shù)也不同,一般有 8 個(gè)外部通道。ADC 中的各個(gè)通道的 A/D 轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC 的結(jié)果可以以左對(duì)齊或者右對(duì)齊存儲(chǔ)在 16 位數(shù)據(jù)寄存器中。 STM32F103 的 ADC 主要特性我們可以總結(jié)為以下幾條: 1、12 位分辨率; 2、轉(zhuǎn)換結(jié)束、注入轉(zhuǎn)換結(jié)束和發(fā)生模擬看門狗事件時(shí)產(chǎn)生中斷 3、單次和連續(xù)轉(zhuǎn)換模式 4、自校準(zhǔn) 5、帶內(nèi)嵌數(shù)據(jù)一致性的數(shù)據(jù)對(duì)齊 6、采樣間隔可以按通道分別編程 7、規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項(xiàng) 8、間斷模式 9、雙重模式(帶 2 個(gè)或以上 ADC 的器件) 10、ADC 轉(zhuǎn)換時(shí)間:時(shí)鐘為 72MHz 為 1.17us 11、ADC 供電要求:2.4V 到 3.6V 12、ADC 輸入范圍:VREF–≤VIN≤VREF+ 13、規(guī)則通道轉(zhuǎn)換期間有 DMA 請(qǐng)求產(chǎn)生 下面這張圖是ADC通道表,不同的通道對(duì)應(yīng)不同的IO口,配置ADC的時(shí)候需要注意。

3、直接上代碼了

3.1 GPIO初始化(配置PC1為模擬信號(hào)輸入口)

void ADCx_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); // 打開 ADC IO端口時(shí)鐘

// 配置 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對(duì)應(yīng)的ADC通道為11)

void ADCx_Mode_Config(void)

{

DMA_InitTypeDef DMA_InitStructure;

ADC_InitTypeDef ADC_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // 打開DMA時(shí)鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE ); // 打開ADC時(shí)鐘

DMA_DeInit(DMA1_Channel1);// 復(fù)位DMA控制器

// 配置 DMA 初始化結(jié)構(gòu)體

DMA_InitStructure.DMA_PeripheralBaseAddr = ( uint32_t ) ( & ( ADCx->DR ) );// 外設(shè)基址為:ADC 數(shù)據(jù)寄存器地址

DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADC_ConvertedValue; // 存儲(chǔ)器地址,實(shí)際上就是一個(gè)內(nèi)部SRAM的變量

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; // 數(shù)據(jù)源來自外設(shè)

DMA_InitStructure.DMA_BufferSize = 1;// 緩沖區(qū)大小為1,緩沖區(qū)的大小應(yīng)該等于存儲(chǔ)器的大小

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;// 外設(shè)寄存器只有一個(gè),地址不用遞增

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; // 存儲(chǔ)器地址固定

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;// 外設(shè)數(shù)據(jù)大小為半字,即兩個(gè)字節(jié)

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;// 存儲(chǔ)器數(shù)據(jù)大小也為半字,跟外設(shè)數(shù)據(jù)大小相同

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; // 循環(huán)傳輸模式

DMA_InitStructure.DMA_Priority = DMA_Priority_High;// DMA 傳輸通道優(yōu)先級(jí)為高,當(dāng)使用一個(gè)DMA通道時(shí),優(yōu)先級(jí)設(shè)置不影響

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;// 禁止存儲(chǔ)器到存儲(chǔ)器模式,因?yàn)槭菑耐庠O(shè)到存儲(chǔ)器

DMA_Init(ADC_DMA_CHANNEL, &DMA_InitStructure); // 初始化DMA

DMA_Cmd(ADC_DMA_CHANNEL , ENABLE);// 使能 DMA 通道

// ADC 模式配置

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;// 只使用一個(gè)ADC,屬于單模式

ADC_InitStructure.ADC_ScanConvMode = DISABLE ; // 禁止掃描模式,多通道才要,單通道不需要

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 連續(xù)轉(zhuǎn)換模式

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 不用外部觸發(fā)轉(zhuǎn)換,軟件開啟即可

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 轉(zhuǎn)換結(jié)果右對(duì)齊

ADC_InitStructure.ADC_NbrOfChannel = 1; // 轉(zhuǎn)換通道1個(gè)

// 初始化ADC

ADC_Init(ADCx, &ADC_InitStructure);

RCC_ADCCLKConfig(RCC_PCLK2_Div8); // 配置ADC時(shí)鐘為PCLK2的8分頻,即9MHz

ADC_RegularChannelConfig(ADCx, ADC_CHANNEL, 1, ADC_SampleTime_55Cycles5); // 配置 ADC 通道轉(zhuǎn)換順序?yàn)?,第一個(gè)轉(zhuǎn)換,采樣時(shí)間為55.5個(gè)時(shí)鐘周期

ADC_DMACmd(ADCx, ENABLE); // 使能ADC DMA 請(qǐng)求

ADC_Cmd(ADCx, ENABLE);// 開啟ADC ,并開始轉(zhuǎn)換

ADC_ResetCalibration(ADCx);// 初始化ADC 校準(zhǔn)寄存器

while(ADC_GetResetCalibrationStatus(ADCx)); // 等待校準(zhǔn)寄存器初始化完成

ADC_StartCalibration(ADCx);// ADC開始校準(zhǔn)

while(ADC_GetCalibrationStatus(ADCx)); // 等待校準(zhǔn)完成

ADC_SoftwareStartConvCmd(ADCx, ENABLE); // 由于沒有采用外部觸發(fā),所以使用軟件觸發(fā)ADC轉(zhuǎn)換

}

主函數(shù)里面只需要調(diào)用上面兩個(gè)初始化函數(shù),while循環(huán)中,直接打印ADC通道采集到的數(shù)據(jù)即可。

4、串口打印電壓(音頻)值

這是串口打印的數(shù)據(jù)并顯示波形。不過這個(gè)波形感覺很奇怪,正常的波形應(yīng)該是有上下浮動(dòng)的,這個(gè)只有向上浮動(dòng)的數(shù)據(jù),沒有向下的數(shù)據(jù)。我用LCD屏幕顯示波形的話,就是正常的。如下圖所示。項(xiàng)目用到的ADC采集模塊和這個(gè)實(shí)驗(yàn)用到的不一樣,但ADC采集音頻信號(hào)這一塊的代碼邏輯基都是相同的,沒有做任何更改。這個(gè)原因還不知道是哪里造成的。

柚子快報(bào)激活碼778899分享:stm32 ADC采集音頻信號(hào)

http://yzkb.51969.com/

推薦鏈接

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18990329.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄