如何解决stm32f769i-Discovery上使用BSP库录音的问题
我正在与 stm32f769
合作,使用 stm32f769
的 mems 传感器和电路板支持包库进行记录。但是我在使用 BSP_AUdio_IN_Record
函数时遇到了问题。我意识到 HAL_DFSDM_FilterRegConvCpltCallback
和 HAL_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 处理函数正在处理和调用正确的回调函数。
查看 STM32 HAL 示例中的文件 stm32f7xx_it.c
。您可以在下面看到来自 Audio_playback_and_record
STM32 HAL 示例的此类文件的代码片段。
/* 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);
}
另一个问题可能是您检查录音是否真的发生的方法。在您提供的代码中,我找不到类似的内容,因此如果您不提供更多详细信息,我将无法帮助您。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。