c - 使用 UART 检查从 SPH0645 Mic I2S 协议(protocol)接收的数据

标签 c audio stm32 microphone adafruit

我正在尝试将这些 SPH0645 麦克风 (I2S) 连接到 STM32f767ZI 板。

我已正确接线,现在只是尝试通过 UART 将数据传递到我的电脑来测试麦克风。希望有人能指出我正确的方向。

我试过直接传递到 UART 传输。但是我认为我可能需要一些数据处理 - 我正在从 UART 接收,但有时只是 0 或其他时候只是乱码,这不是来自麦克风,因为即使我断开麦克风,它仍然在传输。

I2S 麦克风在 32 位帧中接收 24 位数据,最后 8 位是垃圾。该协议(protocol)是 Big Endian,我认为 HAL 库可以处理此问题,但我不完全确定。

uint16_t data;
while (1)
 {
/* USER CODE END WHILE */
HAL_StatusTypeDef result= HAL_I2S_Receive(&hi2s1,&data,2,100);

HAL_UART_Transmit(&huart3,&data,2,100);
/* USER CODE BEGIN 3 */
 }
/* USER CODE END 3 */
}  

我错过了什么?

最佳答案

  1. 检查HAL_I2S_Receive(&hi2s1, &data, 1, 100)的返回值

  2. 您是否验证了 HAL_I2S_Receive 期望 uint32_t* 作为第二个参数?我认为它应该期待 uint16_t*

  3. 使用 HAL_UART_Transmit 您希望通过 UART 传输数据。您不应该将 data 作为参数传递给 HAL_UART_Transmit 吗?

关于c - 使用 UART 检查从 SPH0645 Mic I2S 协议(protocol)接收的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57351731/

相关文章:

objective-c - 需要帮助理解 c 中的指针

c++ - 将 pickle 添加到用 C++ 编写的 Python 扩展

c - 在同一个进程中,同一个文件的多个 MAP_PRIVATE 映射仍然是私有(private)的吗?

iOS:在相机打开并拍照时播放来自另一个应用程序的音乐

c# - C#实时生成声波

c - 使用头文件时出现 undefined symbol 错误

windows - 是否可以从另一个进程捕获渲染 Audio Session ?

c - 为什么PLL不锁定?我的时钟配置正确吗?

无法使用 mbedtls 示例客户端连接到 https 服务器

c - STM32 HAL USART驱动程序: How does this syntax work?