关于接线就特别简单了
注意如果是stm32f407将vF+和vF-接到3.3和Gnd
关于喇叭的话一个喇叭就没有正负

关于cubemx的配置,使用的是8khz



关于使用stm32f407使用DAC直接输出音频的.c代码
本质就是不断的用DMA加载新的数据进去,DMA是有内存限制的可能是65535,显然一次性加载所有的音频数据进去是不会被全部播放的,所以需要进行双缓冲使其连续播放,那么这里就体现出了传输过半中断回调函数的作用了
extern const uint8_t data[159571] = {.............};//特别大省略
//初次定义放在main中定义
volatile uint8_t activeBuffer = 0; // 0 表示 Buffer A,1 表示 Buffer B volatile 保护容易被编译器优化的变量
volatile uint32_t audioDataIndex = 0; // 当前音频数据的索引
extern uint8_t isplay;
uint8_t isPlaybackComplete = 1;
uint8_t bufferA[BUFFER_SIZE];
uint8_t bufferB[BUFFER_SIZE];
void load_audio_data(uint8_t* buffer, size_t size) {
for (size_t i = 0; i < size; i++) {
buffer[i] = data[audioDataIndex];
audioDataIndex++; // 更新音频数据索引
if (audioDataIndex >= AUDIO_DATA_SIZE) {
isPlaybackComplete =1;
audioDataIndex = 0; // 如果到达音频数据末尾,重新从头开始
}
}
}
void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* fhdac) {
if (activeBuffer == 0) {
// 当前完成 Buffer A 的传输,切换到 Buffer B
load_audio_data(bufferB, BUFFER_SIZE); // 加载新的音频数据
if(isPlaybackComplete == 0)
HAL_DAC_Start_DMA(fhdac, DAC_CHANNEL_1, (uint32_t*)bufferB, BUFFER_SIZE, DAC_ALIGN_8B_R);
activeBuffer = 1;
} else {
// 当前完成 Buffer B 的传输,切换到 Buffer A
load_audio_data(bufferA, BUFFER_SIZE); // 加载新的音频数据
if(isPlaybackComplete == 0)
HAL_DAC_Start_DMA(fhdac, DAC_CHANNEL_1, (uint32_t*)bufferA, BUFFER_SIZE, DAC_ALIGN_8B_R);
activeBuffer = 0;
}
}
void play_start()
{
activeBuffer = 0;
isPlaybackComplete = 0;
audioDataIndex = 0;
load_audio_data(bufferA, BUFFER_SIZE);
HAL_TIM_Base_Start(&htim2);
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)bufferA, BUFFER_SIZE, DAC_ALIGN_8B_R);
}
void play_suspend()
{
isPlaybackComplete = 0;
}
void play_resume()
{
if (activeBuffer == 0) {
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*)bufferA, BUFFER_SIZE, DAC_ALIGN_8B_R);
activeBuffer = 1;
} else {
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*)bufferB, BUFFER_SIZE, DAC_ALIGN_8B_R);
activeBuffer = 0;
}
}
关于使用stm32f407使用DAC直接输出音频的.h代码
#ifndef __OTHER_H__
#define __OTHER_H__
#include "main.h"
#include "tim.h"
#include "dac.h"
#define BUFFER_SIZE 1024
#define AUDIO_DATA_SIZE 159571
void load_audio_data(uint8_t* buffer, size_t size);
void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* fhdac);
void play_start();
void play_suspend();
void play_resume();
#endif
关于date如何获取,使用adobe audition输出合适采样率的wave文件

再用winhex取取出源文件选择C source然后改成
extern const uint8_t data[159571]格式

最后调用一个play_start函数就可以运行了
送一个data测试一下
unsigned AnsiChar data[1408] = {
0x52, 0x49, 0x46, 0x46, 0xF8, 0x44, 0x0E, 0x00, 0x57, 0x41, 0x56, 0x45, 0x66, 0x6D, 0x74, 0x20,
0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x1F, 0x00, 0x00, 0x40, 0x1F, 0x00, 0x00,
0x01, 0x00, 0x08, 0x00, 0x64, 0x61, 0x74, 0x61, 0x28, 0x2D, 0x0E, 0x00, 0x81, 0x80, 0x81, 0x7F,
0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81, 0x80, 0x7F, 0x7F, 0x80,
0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x81,
0x80, 0x80, 0x80, 0x80, 0x7F, 0x81, 0x7F, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81,
0x80, 0x80, 0x80, 0x7F, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80,
0x80, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x81, 0x80, 0x80, 0x80,
0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F,
0x7F, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x81, 0x80, 0x80,
0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x7F, 0x80, 0x80,
0x80, 0x81, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x80, 0x80,
0x80, 0x7F, 0x7F, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x7F, 0x80, 0x81, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x81, 0x80, 0x7F, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80,
0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x81,
0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81, 0x7F, 0x7F,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80,
0x81, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81,
0x81, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80,
0x80, 0x80, 0x81, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81,
0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x80, 0x7F, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x7F, 0x80, 0x7F, 0x80,
0x7F, 0x80, 0x81, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x7F, 0x80, 0x81, 0x7F, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x7F,
0x80, 0x80, 0x81, 0x7F, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x7F, 0x80, 0x80,
0x80, 0x80, 0x80, 0x81, 0x7F, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x7F, 0x80,
0x80, 0x80, 0x7F, 0x7F, 0x80, 0x7F, 0x80, 0x80, 0x7F, 0x80, 0x81, 0x80, 0x80, 0x80, 0x7F, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x80, 0x7F,
0x80, 0x80, 0x80, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x7F, 0x7F, 0x80, 0x7F, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x80,
0x80, 0x80, 0x80, 0x7F, 0x80, 0x81, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81,
0x80, 0x7F, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80,
0x81, 0x7F, 0x80, 0x7F, 0x81, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x81, 0x80,
0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x81,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x7F, 0x80, 0x80,
0x80, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x7F,
0x80, 0x80, 0x81, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x7F, 0x80, 0x80,
0x81, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x81, 0x80, 0x7F, 0x7F, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81,
0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80,
0x7F, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x7F, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x7F, 0x80, 0x80, 0x80, 0x81, 0x80, 0x7F, 0x80, 0x81,
0x80, 0x81, 0x80, 0x80, 0x81, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x7F,
0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x80,
0x7F, 0x80, 0x80, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x80, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x80, 0x80, 0x7F, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80,
0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x80, 0x80, 0x80, 0x7F, 0x81, 0x80,
0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x81,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x81,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x7F, 0x7F,
0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x81, 0x80, 0x80, 0x80,
0x81, 0x80, 0x80, 0x81, 0x7F, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80,
0x7F, 0x81, 0x80, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x7F, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80,
0x80, 0x81, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F,
0x80, 0x81, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81, 0x80, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x81,
0x81, 0x81, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x81, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x7F,
0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x81, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x81, 0x80, 0x81, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x80, 0x80, 0x7F, 0x7F, 0x80, 0x81, 0x80, 0x80,
0x80, 0x80, 0x80, 0x7F, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7F, 0x80, 0x80, 0x80,
0x7F, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x81, 0x80, 0x80, 0x80,
0x80, 0x80, 0x7F, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80,
0x7F, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80,
0x7F, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x80, 0x80, 0x81, 0x80, 0x80,
0x81, 0x81, 0x7F, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80,
0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x81, 0x7F, 0x80, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81, 0x80, 0x7F,
0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80,
0x80, 0x80, 0x80, 0x7F, 0x80, 0x7F, 0x81, 0x7F, 0x80, 0x80, 0x81, 0x80, 0x7F, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F
};
3495

被折叠的 条评论
为什么被折叠?



