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

Audio 在stm32f769i Discovery上使用BSP库进行音频录制时出现问题,audio,stm32,recording,Audio,Stm32,Recording,我正在与stm32f769合作,使用stm32f769的mems传感器和板支持包库进行录制。但是我在使用BSP\u AUDIO\u IN\u Record功能时遇到问题。我意识到执行完成时没有调用HAL\u DFSDM\u FilterRegConvCpltCallback和HAL\u DFSDM\u FilterRegConvHalfCpltCallback函数,也没有保存任何声音值,但应用程序仍然可以与ST 我怎样才能解决这个问题 我的代码: int main(void) { /* En

我正在与
stm32f769
合作,使用
stm32f769
的mems传感器和板支持包库进行录制。但是我在使用
BSP\u AUDIO\u IN\u Record
功能时遇到问题。我意识到执行完成时没有调用
HAL\u DFSDM\u FilterRegConvCpltCallback
HAL\u DFSDM\u 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\u xxx\u IRQHandler()
      。这些IRQ处理函数正在处理和调用正确的回调函数

      查看STM32 HAL示例中的文件
      stm32f7xx_it.c
      。下面您可以从
      Audio\u playback\u和\u record
      STM32示例中看到此类文件中的代码片段

      /* 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);
      }
      
      另一个问题可能是你检查录音是否真的发生的方法。在您提供的代码中,我找不到类似的内容,因此如果您不提供更多详细信息,我将无法帮助您