你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

有没有用过数字式mems麦克风的,想问下SPI通讯的问题

[复制链接]
wooyeei 提问时间:2019-12-27 16:11 /
如题,萌新第一次用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是有读数的。
求各位大佬指点!
收藏 评论5 发布时间:2019-12-27 16:11

举报

5个回答
butterflyspring 回答时间:2020-1-3 17:24:49
大体来说,数字麦克风大致是一个数据线和一个时钟线,依靠上下沿采样。所以普通芯片是用SPI 模拟这样的接口去读数据并且还要软件解码,需要一些处理方法(详细请参考一些资料描述)。简单说靠软件模拟实现,需要了解底层细节多一些。另外ST官方在STM32F4等系列中有DFSDM的外设,通过这个外设连接到数字麦克风接口,这样直接出来需要的数据。可以参考一下官方手册的介绍

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

wooyeei 回答时间:2019-12-27 16:14:47
可能问题没说清楚,
while (1)
  {HAL_SPI_Receive_DMA(&hspi3,adc12buff,4); }
循环里这样写是有读数的,但是如果在后面加个delay就没了,一直是0x00偶尔跳一下0xFF,但是debug里这一句设断点会发现寄存器DR是有读数的。
maxtch 回答时间:2019-12-28 23:18:19
大多数数字式麦克风输出的不是 SPI,而是一种类似 I2S 的协议。
wooyeei 回答时间:2019-12-30 08:55:40
这芯片只有L/R没有WS脚,而且看芯片资料的推荐电路只引出来一个CLK一个DATA,所以用的SPI,如果要接I2S的话是L/R接WS吗?
hrg33802 回答时间:2020-9-23 11:17:02
可以加个微信交流一下吗? 13249840081
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版