代码如下:

#include "sph0644.h"

#include "pdm_filter.h"

#define INTERNEL_BUFF_SIZE      64

#define PCM_OUT_SIZE            16

PDMFilter_InitStruct Filter;

u16 PDM_Output_Buffer[PCM_OUT_SIZE];

u16 *pAudioRecBuf;

u16 InternalBuffer[INTERNEL_BUFF_SIZE];

u16 InternalBufferSize = 0;

static void Sph0644_Config(void)

{

GPIO_InitTypeDef  GPIO_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_AHB1PeriphClockCmd(SPI_SCK_GPIO_CLK|SPI_MOSI_GPIO_CLK, ENABLE);//ʹÄÜÍâÉèGPIOB,GPIOCʱÖÓ

GPIO_InitStructure.GPIO_Pin = SPI_SCK_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸´Óù¦ÄÜ

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//ÍÆÍì

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­

GPIO_Init(SPI_SCK_GPIO_PORT, &GPIO_InitStructure);//³õʼ»¯

GPIO_InitStructure.GPIO_Pin =SPI_MOSI_PIN;

GPIO_Init(SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);//³õʼ»¯

GPIO_PinAFConfig(SPI_SCK_GPIO_PORT,SPI_SCK_SOURCE,SPI_SCK_AF);        //PB13,AF5  I2S_SCLK

GPIO_PinAFConfig(SPI_MOSI_GPIO_PORT,SPI_MOSI_SOURCE,SPI_MOSI_AF);        //PC3 ,AF5  I2S_DACDATA

I2S2_Init(I2S_Standard_LSB,I2S_Mode_MasterRx,I2S_CPOL_High,I2S_DataFormat_16b);

I2S2_SampleRate_Set(32000);   //ÉèÖòÉÑùÂÊ

// Configure the SPI interrupt priority

NVIC_InitStructure.NVIC_IRQChannel = SPI2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 6;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

SPI_I2S_ITConfig(SPI2,SPI_I2S_IT_RXNE,ENABLE);

}

void Sph0644_Init(void)

{

//Enable CRC module/*

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);

//ÅäÖÃI2S2£¬CLKƵÂÊ1024MHz

Sph0644_Config();

//16KHz,ÔÚ´Ë֮ǰ£¬±ØÐ뿪ÆôCRCʱÖÓ£¬·ñÔò½øÈëËÀÑ­»·

Filter.LP_HZ = 8000;

Filter.HP_HZ = 10;

Filter.Fs = 16000;

Filter.Out_MicChannels = 1;

Filter.In_MicChannels = 1;

PDM_Filter_Init(&Filter);

}

void Sph0644_Start(void)

{

pAudioRecBuf = PDM_Output_Buffer;

I2S_Cmd(SPI2,ENABLE);

}

void Sph0644_Stop(void)

{

I2S_Cmd(SPI2,DISABLE);

}

void SPI2_IRQHandler(void)

{

u16 app;

u16 volume;

if(SPI_GetITStatus(SPI2,SPI_I2S_IT_RXNE) == SET)

{

app = SPI_I2S_ReceiveData(SPI2);

InternalBuffer[InternalBufferSize++] = HTONS(app);

if(InternalBufferSize >= INTERNEL_BUFF_SIZE)

{

InternalBufferSize = 0;

volume = 50;

PDM_Filter_64_LSB((u8*)InternalBuffer,pAudioRecBuf,volume,&Filter);

}

}

}

matlab pdm转pcm_STM32F407 PDM转PCM问题相关推荐

  1. STM32 USB AUDIO 基础篇③——模拟MIC、ECM数字麦克风、MEMS数字麦克风、PDM、PCM的简介与差异

    文章目录 一.模拟麦克风.ECM数字麦克风.MEMS数字麦克风 1.1 模拟麦克风 1.2 ECM数字麦克风 1.3 MEMS数字麦克风 二.PCM和PDM信号 2.1 脉冲编码调制PCM信号 2.2 ...

  2. 硅麦驱动开发及调试(pdm>>I2S>>pcm)

    pdm 协议 PDM接口只有两根信号线: PDM_CLK 时钟信号. PDM_DATA 数据信号. I2S协议 数据发送规格 I2S在BCLK的下降沿发送数据(发送),在上升沿进行数据采样(接收).每 ...

  3. 数字音频接口(I2S,PCM/TDM,PDM)

    概述 数字音频接口DAI,即Digital Audio Interfaces,顾名思义,DAI表示在板级或板间传输数字音频信号的方式.相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DAI在 ...

  4. micropython i2s_数字音频接口(I2S,PCM/TDM,PDM)

    概述 数字音频接口DAI,即Digital Audio Interfaces,顾名思义,DAI表示在板级或板间传输数字音频信号的方式.相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DAI在 ...

  5. 【精华贴】数字音频接口详解-I2S接口PCM/TDM接口PDM接口

    一.概述 数字音频接口DAI,即Digital Audio Interfaces,顾名思义,DAI表示在板级或板间传输数字音频信号的方式.相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DA ...

  6. 常用音频接口:TDM,PDM,I2S,PCM

    折腾: [整理]SoC CPU MEDIATEK MT8516详解 期间,看到T8516介绍中包含 麦克风语音输入控制和连接的音频产品中包含 I2Sx2(4 个频道).TDM(最多 8 个频道)和 P ...

  7. 数字麦克风PDM信号采集与STM32 I2S接口应用(二)

    在使用STM32的数字麦克风I2S接口时,计算采样率让人头疼,芯片手册上没有明确的说法,而手册上的计算方法经过测试却和实验不符.借助搜索引擎,大部分资料都是来自于开发板卖家或开发板论坛,主要是咪头采集 ...

  8. MEMS mic之PDM mic(二)

    概述 PDM = Pulse Density Modulation是一种用数字信号表示模拟信号的调制方法. PDM则使用远高于PCM采样率的时钟采样调制模拟分量,只有1位输出,要么为0,要么为1.因此 ...

  9. 使用STM32的DFSDM外设来驱动PDM麦克风进行音频采集

    0.前言 最近需要使用STM32L4系列来完成音频采集的工作,前前后后一共尝试了三种方案,最终在各种测试条件以及功耗等原因下,选择了目前这个方案. 主控使用的是STM32L475RCT6(无需一致,只 ...

最新文章

  1. Codemirror-开源在线代码编辑器
  2. 卡特兰数(Catalan number)
  3. Linxu嵌入式汇编语言
  4. Telerik RadGridView动态增删行及行列操作
  5. 深度学习到底有多难?掌握方法很重要!
  6. Codeforces 1196E Connected Component on a Chessboard
  7. api与密度转换公式_API重度和密度换算公式
  8. java jee curd_Java / JEE中的有效日志记录–映射的诊断上下文
  9. 主存储器物理地址,逻辑地址,转换
  10. Redis进阶-缓存问题
  11. 4399元!苹果2020年终极新品上市就遇麻烦:付款3个月才能到货
  12. [转摘]使用异步方式调用同步方法
  13. 大三寒假--算法复习
  14. word批量转换为pdf python脚本
  15. Accumulator Proof解析
  16. android inflate 耗时,Android Fragment的生命周期和Inflate优化
  17. Python爬虫的应用:统记词频
  18. 华硕主板装系统蓝屏_华硕主板电脑怎么重装系统,开机过后蓝屏怎么解决
  19. ssm私人牙科诊所病例管理系统的设计与实现毕业设计源码071128
  20. 友盟登陆 QQ授权2002 应用未授权

热门文章

  1. 聊聊 Python 的单元测试框架(一):unittest
  2. redis内存分析工具rdbtools
  3. springboot踩过的坑
  4. 一个常见的下拉框(css)
  5. [HDU1003]最长子序列和
  6. DSA——直接插入排序笔记
  7. 企业级MySQL数据库备份方案:增量备份、全量备份、逻辑备份
  8. nginx访问静态文件
  9. 禁ping也能ping的工具: tcping
  10. 联想服务器RD450 配置RAID5阵列图文方法