有没有用过数字式mems麦克风的,想问下SPI通讯的问题
如题,萌新第一次用SPI通讯麦克风,SPI配置如下:static void MX_SPI3_Init(void)
{
/* USER CODE BEGIN SPI3_Init 0 */
/* USER CODE END SPI3_Init 0 */
/* USER CODE BEGIN SPI3_Init 1 */
/* USER CODE END SPI3_Init 1 */
/* SPI3 parameter configuration*/
hspi3.Instance = SPI3;
hspi3.Init.Mode = SPI_MODE_MASTER;
hspi3.Init.Direction = SPI_DIRECTION_2LINES_RXONLY;
hspi3.Init.DataSize = SPI_DATASIZE_16BIT;
hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi3.Init.NSS = SPI_NSS_SOFT;
hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi3.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi3) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN SPI3_Init 2 */
/* USER CODE END SPI3_Init 2 */
}
波特率2M的,符合芯片运行范围。但是在WHILE里如果只读SPI的数据是有读数的,如果加一个延时,不管延时多少就没读数了,示波器看了下时钟信号隔几十ms才跳一下。在DEBUG里单句运行寄存器DR是有读数的。
求各位大佬指点! 大体来说,数字麦克风大致是一个数据线和一个时钟线,依靠上下沿采样。所以普通芯片是用SPI 模拟这样的接口去读数据并且还要软件解码,需要一些处理方法(详细请参考一些资料描述)。简单说靠软件模拟实现,需要了解底层细节多一些。另外ST官方在STM32F4等系列中有DFSDM的外设,通过这个外设连接到数字麦克风接口,这样直接出来需要的数据。可以参考一下官方手册的介绍:) 可能问题没说清楚,
while (1)
{HAL_SPI_Receive_DMA(&hspi3,adc12buff,4); }
循环里这样写是有读数的,但是如果在后面加个delay就没了,一直是0x00偶尔跳一下0xFF,但是debug里这一句设断点会发现寄存器DR是有读数的。 大多数数字式麦克风输出的不是 SPI,而是一种类似 I2S 的协议。 这芯片只有L/R没有WS脚,而且看芯片资料的推荐电路只引出来一个CLK一个DATA,所以用的SPI,如果要接I2S的话是L/R接WS吗? 可以加个微信交流一下吗? 13249840081
页:
[1]