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

发布时间:2024-09-18  

在这一部分中,我们将使用的软件是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 是串行音频接口,它提供一个接口,允许微控制器与外部音频设备(例如放大器、ADC、DAC 或音频处理器)进行通信。

在 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。

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


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>