Пытаюсь воспроизвести звук через DMA на плате STM32VLDiscovery (проц STM32F100RB), 8МГц
Заготовка проекта сделана с помощью Cube. Вроде бы все получается как надо, файл читаю с флешки, но воспроизводится какой-то скрежет
WAV файл, который пытаюсь воспроизвести - 8 бит, 1 канал, 8000 KHz
#define DMA_BUFFER_SIZE 512
uint8_t dma_buffer[DMA_BUFFER_SIZE]; // буфер звука для DMA. Пробовал разный делать, от 8 бит до 32-х.
Запуск ЦАП по DMA
HAL_TIM_Base_Start(&htim6);
HAL_DAC_Start(&hdac,DAC_CHANNEL_1);
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*) dma_buffer, DMA_BUFFER_SIZE, DAC_ALIGN_12B_L); // выравнивание тоже разное пробовал
инициализация DAC
sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO;
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
инициализация таймера 6
htim6.Instance = TIM6;
htim6.Init.Prescaler = 499;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 1;
if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
инициализация DMA
__HAL_RCC_DMA1_CLK_ENABLE();
/* DMA interrupt init */
/* DMA1_Channel3_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);