矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 1292|回复: 17

STM32F4驱动MAX98357生成正弦波信号

[复制链接]
     
发表于 2024-3-2 08:34:59 | 显示全部楼层 |阅读模式
STM32F4系列价格低廉,性能高,但是STM32F4系列很多芯片没有自带的DAC,买有DAC的系列又很贵,不划算,因此必须挂载外部DAC。STM32F4系列都有一个特制的音频接口:I2S,这个接口是特制的SPI接口,专用于传输音频信号。
本次实验选择的DAC是MAX98357A,这个芯片的优点是价格很低(5元),不需要配置寄存器,自带功放。缺点是这个芯片只能播放左声道,能播放右声道的是B,想处理双声道必须买一套芯片。不过我这里只想搞单声道所以无所谓了。
STM32F4很复杂,用库函数开发很麻烦,尤其是I2S还要配合DMA使用,因此需要使用CUBEMX开发。KEIL版本需要大于V5.3
     
 楼主| 发表于 2024-3-2 08:40:46 | 显示全部楼层
处理音频信号时,最好使用DMA,自动将内存中的数据搬运到I2S里。传统DMA存在一个问题:无法连续传输数据,因此在这里使用了双缓冲:当DMA读取A数组时,单片机写B数组;当DMA读B数组时,单片机写A数组。这样做的好处是:①数组可以有很多元素,这样就减少了中断次数,不必生成一个数据就中断一次,②交替的读写数组,降低了对时序的要求,单片机可以在处理音频后做其他工作。
代码的话我现在还在写,等到写完了我会发网盘链接。I2S  DAC还在快递中,现在已经用示波器看到了STM32生成的I2S信号。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-3-2 08:48:34 来自手机 | 显示全部楼层
下面是我用示波器测的波形。I2S有两个时钟,一个是22k,一个是22*16k。AB数组存的是0xFFFF和0x0000,因此可以看见间断的振荡信号
IMG_20240302_084521.jpg
IMG_20240302_084518.jpg
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-3-2 08:51:33 来自手机 | 显示全部楼层
Aline744 发表于 2024-3-2 08:48
下面是我用示波器测的波形。I2S有两个时钟,一个是22k,一个是22*16k。AB数组存的是0xFFFF和0x0000,因此可 ...

应该是0x5555和0x0000
回复 支持 反对

使用道具 举报

     
发表于 2024-3-2 09:27:55 | 显示全部楼层
I2S输出波形,之前玩过,采样率还是低了些,频率做不上去,不如用dds芯片做
回复 支持 反对

使用道具 举报

     
发表于 2024-3-2 10:09:32 | 显示全部楼层
撸主可以考虑一下TLV5638,这个芯片又小又好驱动,支持双路,SPI写两个寄存器就行,还可以两通道同步(写完第二路以后第一路的模拟出口才更新)。不足是只有12bit,有些高精度场合可能不够。我有几个项目用过这个芯片。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-3-2 11:01:02 来自手机 | 显示全部楼层
量子隧道 发表于 2024-3-2 10:09
撸主可以考虑一下TLV5638,这个芯片又小又好驱动,支持双路,SPI写两个寄存器就行,还可以两通道同步(写完 ...

谢谢推荐,我去看看
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-3-2 11:05:41 来自手机 | 显示全部楼层
量子隧道 发表于 2024-3-2 10:09
撸主可以考虑一下TLV5638,这个芯片又小又好驱动,支持双路,SPI写两个寄存器就行,还可以两通道同步(写完 ...

这个芯片还是不太合适,首先是贵,然后就是没有功放,我这个要驱动扬声器的
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-3-2 11:37:28 来自手机 | 显示全部楼层
iffi123 发表于 2024-3-2 09:27
I2S输出波形,之前玩过,采样率还是低了些,频率做不上去,不如用dds芯片做

I2S方便做音频,DDS处理音频很不灵活
回复 支持 反对

使用道具 举报

     
发表于 2024-3-2 18:41:08 | 显示全部楼层
用CubeMX尽量选LL库,那个HAL库写的跟屎一样。
回复 支持 反对

使用道具 举报

     
发表于 2024-3-2 19:02:09 | 显示全部楼层
bis 发表于 2024-3-2 18:41
用CubeMX尽量选LL库,那个HAL库写的跟屎一样。

我坚持直接寄存器操作,反正自己的程序,不需要什么移植
回复 支持 反对

使用道具 举报

     
发表于 2024-3-2 19:09:04 | 显示全部楼层
iffi123 发表于 2024-3-2 19:02
我坚持直接寄存器操作,反正自己的程序,不需要什么移植

不要把有限的生命浪费在这些毫无意义的事情上。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-3-4 18:15:15 来自手机 | 显示全部楼层
MAX98357到货了
IMG_20240304_181452.jpg
回复 支持 反对

使用道具 举报

     
发表于 2024-3-4 18:22:49 | 显示全部楼层
iffi123 发表于 2024-3-2 09:27
I2S输出波形,之前玩过,采样率还是低了些,频率做不上去,不如用dds芯片做

换个esp32s来玩,它的i2s甚至能输出vga/s-video/am radio信号,亲测有效
vga的效果还不错,s-video黑白也还行,am radio就有点力不从心了,只能将就听出说话,杂音很大
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-3-4 18:57:26 来自手机 | 显示全部楼层
这个芯片输出的是高频信号,使用0.15u电容并联10k电阻进行滤波,得到波形,看起来音质不是很好,不过能响就行
IMG_20240304_185621.jpg
IMG_20240304_185604.jpg
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-5-6 00:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表