国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32驅(qū)動(dòng)INMP441麥克風(fēng)實(shí)現(xiàn)左右通道聲音采集

這篇具有很好參考價(jià)值的文章主要介紹了STM32驅(qū)動(dòng)INMP441麥克風(fēng)實(shí)現(xiàn)左右通道聲音采集。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、參考原理圖

1、INMP441

stm32采集聲音,stm32,單片機(jī),嵌入式硬件

2、STM32

stm32采集聲音,stm32,單片機(jī),嵌入式硬件
注意INMP441的第4引腳,用來選擇左聲道還是右聲道。
stm32采集聲音,stm32,單片機(jī),嵌入式硬件

二、代碼生成

代碼使用cubemx生成

1、iis設(shè)置

stm32采集聲音,stm32,單片機(jī),嵌入式硬件

2、DMA設(shè)置

stm32采集聲音,stm32,單片機(jī),嵌入式硬件

3、生成代碼

stm32采集聲音,stm32,單片機(jī),嵌入式硬件

三、代碼修改

1、首先定義一個(gè)數(shù)組

	#define BUFFER_SIZE (4)
	static uint32_t simpleBuf[BUFFER_SIZE];
	/* USER CODE BEGIN PV */
	uint32_t val24;
	int val32;
/* USER CODE END PV */

2、定義接收完成中斷函數(shù)

/* USER CODE BEGIN 0 */
unsigned cb_cnt=0;
//I2S接收完成回調(diào)函數(shù)
void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s)
{
	if(hi2s==&hi2s2){
		cb_cnt++;//回調(diào)次數(shù)計(jì)數(shù)
		//將兩個(gè)32整型合并為一個(gè)
		//dat32 example: 0000fffb 00004f00
		val24=(dma[0]<<8)+(dma[1]>>8);
		//將24位有符號(hào)整型擴(kuò)展到32位
		if(val24 & 0x800000){//negative
			val32=0xff000000 | val24;
		}else{//positive
			val32=val24;
		}
		//以采樣頻率的十分之一,串口發(fā)送采樣值
		if(cb_cnt%10==0)
			printf("%d\r\n",val32);
	}
}
/* USER CODE END 0 */

3、啟動(dòng)接收

HAL_I2S_Receive_DMA(&hi2s2,(uint16_t*)simpleBuf,BUFFER_SIZE);	

4、完整代碼

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2022 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "dma.h"
#include "i2s.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
//#include "stm32f1xx_hal.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
uint32_t dma[4];
uint32_t val24;
int val32;
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
unsigned cb_cnt=0;
//I2S接收完成回調(diào)函數(shù)
void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s)
{
	if(hi2s==&hi2s2){
		cb_cnt++;//回調(diào)次數(shù)計(jì)數(shù)
		//將兩個(gè)32整型合并為一個(gè)
		//dat32 example: 0000fffb 00004f00
		val24=(simpleBuf[0]<<8)+(simpleBuf[1]>>8);
		//將24位有符號(hào)整型擴(kuò)展到32位
		if(val24 & 0x800000){//negative
			val32=0xff000000 | val24;
		}else{//positive
			val32=val24;
		}
		//以采樣頻率的十分之一,串口發(fā)送采樣值
		if(cb_cnt%10==0)
			printf("%d\r\n",val32);
	}
}
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_DMA_Init();
  MX_I2S2_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  //開啟DMA傳輸
  HAL_I2S_Receive_DMA(&hi2s2,(uint16_t*)simpleBuf,BUFFER_SIZE);		
  while (1)
  {
  	HAL_Delay(10);
	
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
//后面都是Cube自動(dòng)生成的代碼,省略

5、代碼解析

根據(jù)以上說明,最后一個(gè)參數(shù)size的單位是由數(shù)據(jù)幀的長度決定的。前面在Cube中設(shè)置的數(shù)據(jù)格式為24 Bits Data on 32 Bits Frame,因此DMA讀取數(shù)據(jù)的總長度為size×4字節(jié)。前面定義的DMA緩沖區(qū)是一個(gè)長度為4的uint32_t型數(shù)組,緩沖區(qū)中的數(shù)據(jù)格式為:前2個(gè)元素表示左聲道數(shù)據(jù),后2個(gè)表示右聲道數(shù)據(jù)
單通道數(shù)據(jù)格式為:第一個(gè)字節(jié):0x00000004 第一個(gè)字節(jié):0x00004500。通過val24=(dma[0]<<8)+(dma[1]>>8);合成0x00fffb4f ,然后區(qū)分正負(fù)極:文章來源地址http://www.zghlxwxcb.cn/news/detail-631898.html

if(val24 & 0x800000){
			val32=0xff000000 | val24;
		}else{
			val32=val24;
		}

到了這里,關(guān)于STM32驅(qū)動(dòng)INMP441麥克風(fēng)實(shí)現(xiàn)左右通道聲音采集的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 會(huì)議音響系統(tǒng)麥克風(fēng)陣列波束形成算法C語言實(shí)現(xiàn)

    會(huì)議音響系統(tǒng)麥克風(fēng)陣列波束形成算法C語言實(shí)現(xiàn)

    一 應(yīng)用麥克風(fēng)陣列波束成形算法做的項(xiàng)目產(chǎn)品 二 麥克風(fēng)波束形成技術(shù)應(yīng)用領(lǐng)域? 麥克風(fēng)波束形成技術(shù)是一種利用多個(gè)麥克風(fēng)陣列來實(shí)現(xiàn)聲音定向捕捉和增強(qiáng)的技術(shù)。通過對多個(gè)麥克風(fēng)信號(hào)進(jìn)行處理和合成,可以使麥克風(fēng)系統(tǒng)在特定方向上具有更高的靈敏度和抑制非期望方向

    2024年02月16日
    瀏覽(53)
  • 陣列麥克風(fēng)聲音定位-代碼python實(shí)現(xiàn)-二維與三維聲音定位

    陣列麥克風(fēng)聲音定位-代碼python實(shí)現(xiàn)-二維與三維聲音定位

    FT - 傅立葉變換FT(Fourier Transform) 時(shí)域頻域轉(zhuǎn)換, 此鏈接講的很清晰。 FFT - 快速傅里葉變換 (fast Fourier transform): 計(jì)算機(jī)計(jì)算DFT DTFT - 離散時(shí)間傅立葉變換 :時(shí)域離散,頻域連續(xù) DFT-離散傅立葉變換 :時(shí)域離散,頻域也離散時(shí)域離散,頻域連續(xù) 相當(dāng)于對時(shí)域的連續(xù)信號(hào)進(jìn)行抽

    2023年04月12日
    瀏覽(17)
  • Qt 實(shí)現(xiàn)的萬能采集庫( 屏幕/相機(jī)/揚(yáng)聲器/麥克風(fēng)采集)

    【寫在前面】 ???????? 之前應(yīng)公司需要,給公司寫過一整套直播的庫( 推拉流,編解碼),類似于 libobs 。 ? ? ? ? 結(jié)果后來因?yàn)闆]有相關(guān)項(xiàng)目,便停止開發(fā)維護(hù)了。 ? ? ? ? 不過里面很多有用的組件,然后也挺好用的,遂開源出來一部分。 ? ? ? ? 因此,本篇就簡單講

    2024年04月27日
    瀏覽(28)
  • web端調(diào)用本地?cái)z像頭麥克風(fēng)+WebRTC騰訊云,實(shí)現(xiàn)直播功能

    web端調(diào)用本地?cái)z像頭麥克風(fēng)+WebRTC騰訊云,實(shí)現(xiàn)直播功能

    視頻直播技術(shù)大全、直播架構(gòu)、技術(shù)原理和實(shí)現(xiàn)思路方案整理 視頻采集端: 1、視頻采集:使用攝像頭設(shè)備獲取實(shí)時(shí)視頻流。 2、視頻處理: 對采集到的視頻進(jìn)行處理,可以包括美顏、濾鏡、水印等效果的添加。 3、音視頻編碼壓縮: 將處理后的音視頻數(shù)據(jù)進(jìn)行編碼壓縮,常

    2024年02月10日
    瀏覽(24)
  • 音頻——數(shù)字麥克風(fēng)和模擬麥克風(fēng)(DMIC/AMIC)

    音頻——數(shù)字麥克風(fēng)和模擬麥克風(fēng)(DMIC/AMIC)

    麥克風(fēng) (microphone):是將聲音信號(hào)轉(zhuǎn)換為電信號(hào)的能量轉(zhuǎn)換器件,也就是用來采集你說話的聲音 揚(yáng)聲器 (speaker):是一種把電信號(hào)轉(zhuǎn)變?yōu)槁曅盘?hào)的換能器件,就是把對方說話產(chǎn)生的電信號(hào)轉(zhuǎn)換成聲音播放出來。 簡單來說,麥克風(fēng)的功能是采集聲音,揚(yáng)聲器的功能是播放聲音。

    2024年02月10日
    瀏覽(23)
  • 【ESP32音視頻傳輸】②通過I2S采集SPH0645麥克風(fēng)音頻數(shù)據(jù)并上傳到服務(wù)端實(shí)時(shí)播放

    【ESP32音視頻傳輸】②通過I2S采集SPH0645麥克風(fēng)音頻數(shù)據(jù)并上傳到服務(wù)端實(shí)時(shí)播放

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 本文章基于Arduino ESP32 2.07版本,因?yàn)?.04版本開始I2S驅(qū)動(dòng)被更改了,所以相同代碼可能效果不太同 本文主要參考了:https://atomic14.com/2020/09/12/esp32-audio-input.html ESP32有多種方式從外置麥克風(fēng)中讀取數(shù)據(jù):

    2024年02月11日
    瀏覽(22)
  • 電腦麥克風(fēng)沒聲音?

    電腦麥克風(fēng)沒聲音?

    這3招就可以解決! 在我們使用電腦錄制視頻時(shí),有時(shí)會(huì)遇到一個(gè)令人頭疼的問題:麥克風(fēng)沒有聲音。那么,為什么會(huì)出現(xiàn)這種情況呢?更重要的是,我們應(yīng)該如何解決這個(gè)問題呢?本文將介紹3種方法,幫助您解決麥克風(fēng)沒有聲音的難題! 方法一:通過聲音設(shè)置來調(diào)整麥克風(fēng)

    2024年02月13日
    瀏覽(21)
  • 麥克風(fēng)分類匯總

    麥克風(fēng)分類匯總

    1)按聲電轉(zhuǎn)換原理分為:電動(dòng)式(動(dòng)圈式、鋁帶式),電容式(直流極化式)、壓電式(晶體式、陶瓷式)、以及電磁式、碳粒式、半導(dǎo)體式等。 2)按聲場作用力分為:壓強(qiáng)式、壓差式、組合式、線列式等。 3)按電信號(hào)的傳輸方式分為:有線、無線(無線麥克風(fēng)分為三個(gè)頻段,

    2024年02月09日
    瀏覽(23)
  • 成功解決電腦麥克風(fēng)不管用、電腦無法錄制聲音之出現(xiàn)的麥克風(fēng)Realtek(R) Audio未插入

    成功解決電腦麥克風(fēng)不管用、電腦無法錄制聲音之出現(xiàn)的麥克風(fēng)Realtek(R) Audio未插入

    成功解決電腦麥克風(fēng)不管用、電腦無法錄制聲音之出現(xiàn)的麥克風(fēng)Realtek(R) Audio未插入 目錄 1.解決問題 2.解決方法 電腦無法錄制聲音,經(jīng)過查看發(fā)現(xiàn)問題,麥克風(fēng)Realtek(R) Audio未插入 搜索框輸入Realtek Audio Console→麥克風(fēng)陣列→點(diǎn)擊取消靜音,即可! 哈哈,大功告成! 完工了??!

    2024年02月11日
    瀏覽(29)
  • 麥克風(fēng)陣列波束基本概念理解

    麥克風(fēng)陣列波束基本概念理解

    本質(zhì)上是設(shè)計(jì)合適的濾波器,對于一類固定濾波器系數(shù)的陣列來說,無論輸入信號(hào)或者噪聲信號(hào)的統(tǒng)計(jì)特征如何,其濾波器系數(shù)固定不變,此類波束形成叫Fixed Beamforming,固定波束形成好比傳統(tǒng)數(shù)字信號(hào)處理里面的經(jīng)典濾波器;與此相對的一類就是自適應(yīng)濾波器,陣列里就有

    2024年02月05日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包