在stm32f769i Discovery上使用BSP库进行音频录制时出现问题



我正在与stm32f769合作,使用用于stm32f769的mems传感器和板支持包库进行记录。但我在使用BSP_AUDIO_IN_Record函数时遇到了问题。我意识到HAL_DFSDM_FilterRegConvCpltCallbackHAL_DFSDM_FilterRegConvHalfCpltCallback函数在执行完成时没有被调用,也没有保存任何声音值,但应用程序仍然可以使用ST的模板。

我该怎么解决这个问题?

我的代码:

int main(void)
{
/* Enable I-Cache---------------------------------------------------------*/

SCB_EnableICache();
/* Enable D-Cache---------------------------------------------------------*/

SCB_EnableDCache();
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();

/* USER CODE BEGIN 2 */

BSP_AUDIO_IN_Init(BSP_AUDIO_FREQUENCY_16K, DEFAULT_AUDIO_IN_BIT_RESOLUTION, DEFAULT_AUDIO_IN_CHANNEL_NBR);

BSP_AUDIO_IN_AllocScratch (Scratch_, SCRATCH_BUFF_SIZE);

BSP_AUDIO_IN_Record((uint16_t*)&BufferCtl.pcm_buff[0], AUDIO_IN_PCM_BUFFER_SIZE);

BufferCtl.fptr = 1;

BufferCtl.pcm_ptr = 0;

BufferCtl.offset = 0;

BufferCtl.wr_state = BUFFER_EMPTY;
while (1)
{
}
}

和库:

  • stm32f769i_discovery.c
  • stm32f769i_discovery.h
  • stm32f769i_discovery_audio.c
  • stm32f769i_discovery_audio.h
  • wm8994.c
  • wm8994.h

也许您忘记实现IRQ函数了?它们在某些用例中是强制性的(例如您自己的用例(,并且它们必须实现相关外围驱动程序的正确HAL_xxx_IRQHandler()。这些IRQ处理程序函数正在处理和调用正确的回调函数。

查看STM32HAL示例中的文件stm32f7xx_it.c。下面您可以看到Audio_playback_and_recordSTM32HAL示例中的此类文件的代码片段。

/* SAI handler declared in "stm32f769i_eval_audio.c" file */
extern SAI_HandleTypeDef haudio_out_sai;
extern DFSDM_Filter_HandleTypeDef       haudio_in_dfsdm_leftfilter;
extern DFSDM_Filter_HandleTypeDef       haudio_in_dfsdm_rightfilter;
// ...
// ...
/**
* @brief This function handles DMA2 Stream 4 interrupt request.
* @param None
* @retval None
*/
void AUDIO_SAIx_DMAx_IRQHandler(void)
{
HAL_DMA_IRQHandler(haudio_out_sai.hdmatx);
}
/**
* @brief This function handles DMA2 Stream 0 interrupt request.
* @param None
* @retval None
*/
void AUDIO_DFSDM_DMAx_LEFT_IRQHandler(void)
{
HAL_DMA_IRQHandler(haudio_in_dfsdm_leftfilter.hdmaReg);
}
/**
* @brief This function handles DMA2 Stream 0 interrupt request.
* @param None
* @retval None
*/
void AUDIO_DFSDM_DMAx_RIGHT_IRQHandler(void)
{
HAL_DMA_IRQHandler(haudio_in_dfsdm_rightfilter.hdmaReg);
}

另一个问题可能是你检查录音是否真的发生的方法。在你提供的代码中,我找不到类似的东西,所以如果你不提供更多细节,我就无法帮助你。

相关内容

  • 没有找到相关文章

最新更新