admin管理员组

文章数量:1565789

2024年7月27日发(作者:)

AN5027

应用笔记

使用STM32 MCU和MPU连接PDM数字麦克风

引言

数字MEMS(微机电系统)麦克风专为需要小尺寸、高音质、高可靠性和高经济效益的音频

应用而设计。

它们的封装尺寸小且噪声低,可在单个器件中实现多个麦克风,并通过提供免提人机界面、

噪声消除和高质量音频捕获,促进了工业和消费类应用中音频技术的不断发展。

STM32 32位Arm

®

Cortex

®

MCU和STM32 Arm

®

Cortex

®

MCU提供各种音频功能和丰富的连

接功能,包括串行接口和增强型声音捕获接口,使用户能够轻松地为基于麦克风的应用构建

解决方案。

本文档针对具有脉冲密度调制(PDM)输出的数字MEMS麦克风,描述了如何在单声道和立体

声配置中使用SPI/I2S、SAI和DFSDM外设将麦克风连接到STM32 MCU和MPU。本应用笔记

提供指南和基于CubeMX的示例,这些示例展示了如何正确地配置STM32器件,以便采集并

处理来自麦克风的原始数据,并将其转换为标准音频数据。

2021年8月AN5027 Rev 1 [English Rev 2]1/66

1

目录AN5027

目录

1PDM数字麦克风概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.1

1.2

1.3

1.4

声音采集概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

PDM数字麦克风框图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

基础数字麦克风连接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

PDM和PCM信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.4.1

1.4.2

1.4.3

脉冲密度调制(PDM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

脉冲编码调制(PCM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

PDM到PCM的转换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.5声学参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.5.1

1.5.2

1.5.3

1.5.4

灵敏度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

信噪比(SNR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

声学过载点(AOP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

电源抑制比(PSRR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

1.6

1.7

数字麦克风的附加价值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

可用的ST数字麦克风 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2将PDM数字麦克风连接到STM32 MCU和MPU . . . . . . . . . . . . . . . . . . . . . 16

2.1串行外设接口(SPI)/集成电路内置音频总线(I2S) . . . . . . . . . . . . . . . 16

2.1.1

2.1.2

单声道配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

立体声配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.2串行音频接口 (SAI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2.2.1

2.2.2

2.2.3

使用单个子模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

使用两个同步SAI子模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

使用PDM接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.3

2.4

数字滤波器,用于∑Δ调制器(DFSDM) . . . . . . . . . . . . . . . . . . . . . . . . 27

2.3.1立体声配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

时钟方面的考虑 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2.4.1

2.4.2

数字麦克风时钟 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

外设时钟 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.5GPIO数量的考虑 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3数字信号处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.1PDM音频软件解码库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

2/66AN5027 Rev 1 [English Rev 2]

AN5027

3.1.1

3.1.2

3.1.3

目录

概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

数字数据流 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

数字信号处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.2数字信号处理用DFSDM滤波器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.2.1数字数据流:采集和处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4基于STM32CubeMX的配置示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4.1示例1:使用I2S、SPI或者单个SAI模块,连接单声道或者立体声模式下的

数字麦克风与I2S、SPI或单个SAI子模块 . . . . . . . . . . . . . . . . . . . . . . . . . 35

4.1.1

4.1.2

使用STM32CubeMX配置硬件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

添加PDM软件解码库中间件文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

4.2示例2:使用两个同步SAI子模块,连接立体声模式下的数字麦克风. 两个同

步子模块连接数字麦克风与SAI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

4.2.1

4.2.2

使用STM32CubeMX配置SAI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

添加PDM软件解码库中间件文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

4.3示例3:使用SAI的PDM接口,连接立体声模式下的数字麦克风

PDM接口连接数字麦克风与SAI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

4.3.1

4.3.2

使用STM32CubeMX配置SAI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

添加PDM软件解码库中间件文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

4.4示例4:使用DFSDM连接数字麦克风 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4.4.1使用STM32CubeMX配置DFSDM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5

6

结论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

AN5027 Rev 1 [English Rev 2]3/66

3

表格索引AN5027

表格索引

表1.

表2.

表3.

表4.

表5.

表6.

表7.

表8.

表9.

表10.

表11.

表12.

表13.

表14.

表15.

表16.

表17.

DOUT信号模式选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

引脚说明. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

数字麦克风的附加价值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

ST数字麦克风. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

推荐IO线与要连接的数字麦克风数量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

应用示例和相关的麦克风时钟频率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

用于连接一个数字麦克风的硬件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

用于连接两个数字麦克风的硬件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

用于连接四个数字麦克风的硬件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

I2S2时钟配置和精度. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

SPI时钟配置和精度. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

时钟配置和精度. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

SAI时钟配置和精度. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

DFSDM滤波阶数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

DFSDM时钟配置精度值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

文档版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

中文文档版本历史. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

4/66AN5027 Rev 1 [English Rev 2]

AN5027图片目录

图片目录

图1.

图2.

图3.

图4.

图5.

图6.

图7.

图8.

图9.

图10.

图11.

图12.

图13.

图14.

图15.

图16.

图17.

图18.

图19.

图20.

图21.

图22.

图23.

图24.

图25.

图26.

图27.

图28.

图29.

图30.

图31.

图32.

图33.

图34.

图35.

图36.

图37.

图38.

图39.

图40.

图41.

图42.

图43.

图44.

图45.

图46.

图47.

图48.

音频应用中声音采集的示例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

典型PDM数字MEMS麦克风框图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

单声道配置 - 在右侧通道上生成数据. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

右侧通道数据模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

单声道配置 - 在左侧通道上生成数据. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

左侧通道数据模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

立体声配置:共享一条主数据线 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

立体声配置数据模式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

PDM 信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

PCM 信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

在单声道配置中将一个数字麦克风连接至SPI或I2S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

在立体声配置中将两个数字麦克风连接至SPI模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

立体声模式时序图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

在单声道配置中将一个数字麦克风连接至SAI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

在立体声配置中使用SAI子模块和定时器将两个数字麦克风连接至SAI. . . . . . . . . . . . . . . . 22

在立体声配置中使用两个同步SAI子模块将两个数字麦克风连接至SAI. . . . . . . . . . . . . . . . 23

能够连接最多四对麦克风的PDM接口

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

使用SAI PDM接口时的数据格式(具有32位槽和8个麦克风) . . . . . . . . . . . . . . . . . . . . . . 26

使用SAI PDM接口时的数据格式(具有8位槽和8个麦克风) . . . . . . . . . . . . . . . . . . . . . . . 26

能够连接最多4个数字麦克风的DFSDM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

立体声配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

SPI的总线和内核时钟拓扑 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

SAI和DFSDM的总线和内核时钟拓扑 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

数字数据采集和处理(框图). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

数字信号处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

使用DFSDM采集和处理数字数据(框图). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

I2S GPIO引脚配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

I2S2时钟配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

I2S配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

I2S参数设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

I2S DMA设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

SPI GPIO和引脚配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

SPI时钟配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

SPI

配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

SPI参数设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

SPI DMA设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

SAI GPIO和引脚配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

单声道模式下16 kHz时的SAI时钟配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

SAI配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

SAI参数设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

SAI DMA设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

DMA请求设置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

TIM GPIO和引脚配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

TIM配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

TIM参数设置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

SAI GPIO和引脚配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

SAI时钟配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

SAI参数设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

AN5027 Rev 1 [English Rev 2]5/66

6

图片目录

图49.

图50.

图51.

图52.

图53.

图54.

图55.

图56.

图57.

图58.

图59.

图60.

图61.

图62.

图63.

图64.

图65.

66.

AN5027

SAIB参数设置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

SAI DMA设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

SAI GPIO和引脚配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

16 kHz时2个麦克风的SAI时钟配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

SAI配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

SAI参数设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

SAI DMA设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

CORTEX_M7配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Cortex M7参数设置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

立体声模式下的DFSDM GPIO配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

DFSDM引脚配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

DFSDM通道1配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

DFSDM通道0配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

DFSDM滤波器0配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

DFSDM滤波器1配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

DFSDM输出时钟配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

DFSDM DMA设置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

DFSDM时钟配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

6/66AN5027 Rev 1 [English Rev 2]

AN5027PDM数字麦克风概述

1 PDM数字麦克风概述

本章提供PDM数字麦克风的简述和将其与STM32器件相连的基本案例。STM32 MCU和MPU

是基于Arm

®(a)

的器件。

1.1 声音采集概述

数字MEMS麦克风是将声压波转换为数字信号的传感器。STM32 MCU和MPU通过特定外设

从麦克风采集数字数据,这些数据经过处理并被转换为标准音频数据。然后,由微控制器按

照目标音频应用处理音频数据。

图1. 音频应用中声音采集的示例

本文标签: 时钟配置数字音频