0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用嵌入式 STM32F769I-DISCO 麦克风

麦辣鸡腿堡 来源:意法半导体 作者:意法半导体 2023-01-30 15:37 次阅读

在这一部分中,我们将使用的软件是STM32CubeIDE和STM32CubeMX。

要按照安装说明进行操作,请参阅此 wiki 页面工具安装。

1.2启动项目↑

要创建项目,请启动STM32CubeMX,然后在主页上单击访问板选择器使用部件号搜索字段选择特定板STM32F769I-DISCO,如下图所示。

500px-anacubemx.png

600px-anaselect.png

1.3配置开发板↑

下一步是设置正确的参数以创建第一个录音和收听从嵌入式 STM32F769I-DISCO 麦克风获得的声音。

让我们开始配置DFSDM通道和过滤器。

25px-Info_white.png

信息

DFSDM 是 Sigma-Delta 调制器的数字滤波器,它从外部数据执行数字信号处理,在本教程中,它是麦克风采集的外部数据。

对于通道 1,请设置以下参数:

模式:来自 ch1 的输入和内部时钟作为入口

通道 1 参数:

右位移位:2

模拟看门狗参数:

过采样 10

输出时钟:

选择 :输出时钟源是音频时钟

分频器 = 4

对于通道 0,请设置以下参数:

模式 :从 CH0 和内部时钟输入

通道 0 参数:

带下降沿的 SPI类型

SPI 时钟:内部 SPI 时钟

右位移位:2

模拟看门狗参数:

过采样:10

输出时钟:

选择 :音频时钟

分频器= 4

600px-dfsdm.png

稍后,让我们配置使用的过滤器。

对于过滤器 0,请设置以下参数:

常规频道选择:

常规频道部分:Channel1

启动常规转换的触发器:软件触发器

快速模式:启用

注入通道选择:

通道 1 作为注入通道:启用

启动注入转换的触发器:软件触发器

过滤器参数:

Sinc 顺序:Sinc 3 滤波器类型

福斯尔:64

对于过滤器 1,请设置以下参数:

常规频道选择:

常规频道部分:Channel1

触发以开始常规转换:与 DFSDM0 同步

快速模式:启用

注入通道选择:

Channel0 作为注入通道:启用

启动注入转换的触发器:软件触发器

扫描模式:启用

过滤器参数:

Sinc 顺序:Sinc 3 滤波器类型

福斯尔:64

现在是配置SAI外设的时候了。

25px-Info_white.png

信息

SAI 是串行音频接口,它提供一个接口,允许微控制器与外部音频设备(例如放大器ADCDAC 或音频处理器)进行通信

Pinout & Configuration 选项卡中,单击SAI以显示Mode 和 Configuration面板并使用以下参数配置 SAI 参数:

音频= 44

插槽大小= 数据大小

插槽活动= 用户设置:0&1

500px-sai.png

在项目管理器视图中,配置项目设置:重命名应用程序,选择 STM32CubeIDE 作为工具链,然后单击生成代码。

启动项目后,请按照以下步骤创建应用程序:

在Drivers文件夹中的项目目录中创建一个新文件夹并将其命名为BSP。

从STM32CubeMX下载的STM32CubeF7 MCU包中,复制目录下的Components文件夹:C:UsersUserNameSTM32CubeRepositorySTM32Cube_FW_F7_V1.16.0DriversBSP,粘贴到项目目录下的BSP文件夹中。

在BSP中创建一个名为STM32F769I-Discovery的新文件夹,并从以下目录复制两个文件:stm32f769i_discovery.c及其头文件stm32f769i_discovery.h : C:UsersUserNameSTM32CubeRepositorySTM32Cube_FW_F7_V1.16.0DriversBSP STM32F769I-Discovery并将它们放在STM32F769I-Discovery文件夹中。

从“项目”菜单或“文件”菜单,转到“属性”》“C/C++ 构建”》“设置”》“工具设置”》“MCU GCC 编译器”》“包含路径”

500px-options1.png

添加以下内容,如下图所示:

500px-include.png

在main.h文件中添加以下内容:

#include “stm32f7xx_hal.h” #include “stm32f769i_discovery.h” #include “。./Components/Common/audio.h” #include “。./Components/wm8994/wm8994.h”

在 main.c 文件中添加以下声明:

#define SaturaLH(N, L, H) (((N)《(L))?(L):(((N)》(H))?(H):(N))) int32_t LeftRecBuff [ 2048 ] ; int32_t RightRecBuff [ 2048 ]; int16_t PlayBuff [ 4096 ]; uint32_t DmaLeftRecHalfBuffCplt = 0 ; uint32_t DmaLeftRecBuffCplt = 0 ; uint32_t DmaRightRecHalfBuffCplt = 0 ; uint32_t DmaRightRecBuffCplt = 0 ; uint32_t PlaybackStarted = 0 ; AUDIO_DrvTypeDef * audio_drv ;

添加以下函数代码:

void HAL_DFSDM_FilterRegConvHalfCpltCallback ( DFSDM_Filter_HandleTypeDef * hdfsdm_filter ) { if( hdfsdm_filter == & hdfsdm1_filter0 ) { DmaLeftRecHalfBuffCplt = 1 ; }

else { DmaRightRecHalfBuffCplt = 1 ; } }

在SAI的初始化函数中,添加以下代码,从麦克风设备读取信号:WM899,初始化音频驱动 */

if( WM8994_ID != wm8994_drv 。 ReadID ( AUDIO_I2C_ADDRESS )) { Error_Handler (); } audio_drv = & wm8994_drv ; audio_drv -》重置(AUDIO_I2C_ADDRESS );

if( 0 != audio_drv -》 Init ( AUDIO_I2C_ADDRESS , OUTPUT_DEVICE_HEADPHONE , 100 , AUDIO_FREQUENCY_22K )) { Error_Handler (); }

将i声明为uint32_t后,在While循环中添加以下代码:

if(( DmaLeftRecHalfBuffCplt == 1 ) && ( DmaRightRecHalfBuffCplt == 1 ))

{ for

( i = 0 ; i 《 1024 ; i ++ ) { PlayBuff [ 2 * i ] = SaturaLH (( LeftRecBuff [ i ] 》》 8 ) , - 32768 , 32767 ); PlayBuff [( 2 * i )+ 1 ] = SaturaLH (( RightRecBuff [ i ] 》》 8 ), - 32768 , 32767 ); } if( PlaybackStarted == 0 )

{ if

( 0 != audio_drv -》 Play ( AUDIO_I2C_ADDRESS , ( uint16_t * ) & PlayBuff [ 0 ], 4096 )) { Error_Handler (); } 如果

(HAL_OK != HAL_SAI_Transmit_DMA ( & hsai_BlockA1 , ( uint8_t * ) & PlayBuff [ 0 ], 4096 ))

{ Error_Handler (); } PlaybackStarted = 1 ; } DmaLeftRecHalfBuffCplt = 0 ; DmaRightRecHalfBuffCplt = 0 ; } 如果((DmaLeftRecBuffCplt == 1 ) && (DmaRightRecBuffCplt == 1 ))

{ for(i = 1024; i 《 2048; i++) { PlayBuff[2*i] = SaturaLH((LeftRecBuff[i] 》》 8), -32768, 32767); PlayBuff[(2*i)+1] = SaturaLH((RightRecBuff[i] 》》 8), -32768 , 32767 ); } DmaLeftRecBuffCplt = 0 ; DmaRightRecBuffCplt = 0 ; }

完成代码部分后,单击Buildand laterDebugthe program

将耳机插入输出音频线插孔,尽情享受吧!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4984

    文章

    18300

    浏览量

    288651
  • 麦克风
    +关注

    关注

    14

    文章

    596

    浏览量

    54204
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348872
收藏 人收藏

    评论

    相关推荐

    STM32F769I-DISCO在代码中为什么无法控制引脚状态?

    , GPIO_PIN_4);HAL_Delay(1000);是我漏了什么步骤吗 开发板是STM32F769I-DISCO 可以正常下载例程运行,开发板是好的
    发表于 03-19 06:28

    STM32F769I-DISCO开发板CoreMark跑分与固件恢复

    之前看有好多朋友已经成功在STM32F769I-DISCO开发板上进行了CoreMark跑分测试,为了探究开发板的性能到底如何,给大家一个参考,于是自己亲自动手进行了移植测试,其实整个的移植过程
    发表于 12-16 14:38

    基于ARM Cortex-M7内核的STM32F769NI MCU发现套件STM32F769I-DISCO

    STM32F769I-DISCO,Discovery套件允许用户使用基于ARM Cortex-M7内核的STM32F7系列微控制器开发和共享应用程序。该发现套件支持多种应用,可从音频,多传感器支持,图形,安全性,视频和高速连接功能中受益。 Arduino连接支持提供无限扩
    发表于 03-13 08:57

    评测:STM32F769I-DISCO接入机智云,实现IoT开发远程控制等功能

    评测:STM32F769I-DISCO接入机智云,实现IoT开发远程控制等功能摘要:本文主要讲述如何使用STM32F769I-DISCO接入机智云,实现智能设备开发的过程。适合IoT爱好者、高校学生
    发表于 09-05 15:25

    STM32F769I-DISCO评测&机智云物联网云服务体验

    摘要:本文主要讲述如何使用STM32F769I-DISCO接入机智云硬件开发平台,实现智能设备开发的过程。适合IoT爱好者、高校学生等入门参考。[ 一、概览 ]对于一个物联网应用,远程监控设备状态
    发表于 09-05 18:37

    STM32F769I-DISCO开发套件

    近期参加 STMicroelectronics 的活动,幸运地获得一套 STM32F769I-DISCO 开发套件,因为毕业之后的工作以 Linux 应用开发为主,我对 STM32 的印象大多还
    发表于 08-04 09:09

    STM32F769I-DISCO外部连接器(“JP1”)的最大电流消耗和功率输入是多少?

    你好!我拥有一块 STM32F769I-DISCO 板,它有一个名为“JP1”的外部连接器(下面给出了这张图片),用于为微控制器供电。所以,我想知道:这个外部连接器的最大电流消耗是多少?我们在这里可以获得多少功率输入?
    发表于 12-15 07:11

    如何使用“USB HS”连接器用手机电池为STM32F769I-DISCO供电?

    我有一块 STM32F769I-DISCO 板,我想使用 USB HS 连接器为其供电。我刚刚发现移动电源,我想知道我是否真的可以使用它(尤其是 5V/1A 输出)为我的电路板供电而不会有损坏的风险。
    发表于 12-15 07:36

    如何使用带有FatFS和USB大容量存储的STM32F769I-DISCO板呢

    嗨,大家好,不幸的是,我找不到关于如何使用/配置带有 FatFS 和 USB 大容量存储的 STM32F769I-DISCO 的示例,以便能够将 USB 棒插入电路板并读/写文件。你们中有人能指出我
    发表于 12-23 08:28

    如何使用STM32F769I探索板从模拟麦克风录制音频?

    如何使用 STM32F769I 探索板从模拟麦克风录制音频?
    发表于 01-11 09:08

    STM32CubeMX 5.6.1 + TouchGFX 4.13.0 + STM32F769I-DISCO为什么无法创建工作项目?

    ,我必须调整它的大小,所有其他窗口到处都有无数的滚动条。我完全迷路了。为什么使用 ST 默认工具创建一个简单的项目如此痛苦?我试图阅读 ST 页面,但有太多可能我错过了一个重点。有人可以帮我为 STM32F769I-DISCO 演示板获得一个带有最新 STM32CubeM
    发表于 02-07 07:11

    STM32F769I-DISCO断电后无法连接目标的原因?

    我有 STM32F769I-DISCO 板,刚刚制作了一个简单的应用程序,它使用 usart1 在虚拟 com 端口 (USART1.x) 上打印一些调试消息。一切正常,直到我关闭电路板。当开发板
    发表于 02-08 08:41

    求助,STM32F769I-DISCO各种板载芯片的引脚图应该去哪找?

    STM32F769I-DISCO各种板载芯片的引脚图应该去哪找,数据手册上好像没看到?
    发表于 08-07 07:19

    基于STM32F769I-DISCO微控制器的参考设计

    View the reference design for STM32F769I-DISCO. http://www.elecfans.com/soft/ has thousands of reference designs to help bring your project to life.
    发表于 07-09 18:41 17次下载
    基于<b class='flag-5'>STM32F769I-DISCO</b>微控制器的参考设计

    你会不会使用STM32CubeMX建立STM32F769I-DISCO的工程?

    在16年ST就推出了STM32F769I-DISCO开发板,功能搭配可算得上眼前为之一亮,无论是POE、SPDIF输入输出、MEMS麦克风、音频编解码器、还是TFT电容触摸LCD显示屏,各种器件
    发表于 02-11 14:21 5次下载
    你会不会使用<b class='flag-5'>STM32</b>CubeMX建立<b class='flag-5'>STM32F769I-DISCO</b>的工程?