🛠 Acquérir le micro PDM MP45DT02 : I2S2, filtre PDM-vers-PCM et contraintes de sortie

STM32F4DISCOVERY (kit Discovery STM32F407VGT6) · avance · Schéma : chaîne d'acquisition micro de la STM32F4DISCOVERY — micro omnidirectionnel MP45DT02 en sortie PDM 1 bit horlogée par I2S2, décimation logicielle vers un PCM 16 bits, puis exfiltration vers un PC via un convertisseur USB-série externe sur UART2 (PA2/PA3) ; encart : UART1 interdit (PB6 = SCL du codec), PA0 occupé par USER.

Objetivo

Utilizar el MP45DT02, el micrófono digital omnidireccional PDM integrado en la STM32F4DISCOVERY. A diferencia de un micrófono analógico, no entrega una tensión, sino un flujo PDM de 1 bit de alta frecuencia, que el STM32F407 captura mediante I2S2 (modo «receive») y luego diezma a PCM de 16 bits mediante un filtro proporcionado en STM32CubeF4. El verdadero tema de nivel avanzado no es el micrófono: es dónde extraer los datos, ya que esta tarjeta acumula trampas de asignación de pines seriales.

La cadena de adquisición

  1. I2S2 en recepción con reloj PDM: el BSP de audio de CubeF4 (BSP_AUDIO_IN_*, demos de grabación de Projects/STM32F4-Discovery/) configura el periférico y el filtro PDM (diezmo + filtro paso bajo) que produce PCM de 16 bits.
  2. Doble bufferización DMA: mientras se procesa el medio búfer, el siguiente se llena — la callback HalfTransfer/TransferComplete recarga la ventana de análisis.
  3. Exfiltración: la tarjeta no tiene ni pin micro-SD ni PHY Ethernet (el MAC 10/100 está en el chip, no en el conector). Tres opciones: el puerto OTG FS en modo CDC (ver el tutorial USB), un dongle USB-serial externo en UART2 PA2/PA3, o un tratamiento 100 % embebido (VAD, detección de palmadas) sin exportación.

Las trampas de asignación de pines que convierten una práctica en una pesadilla

Esqueleto de código

#include "stm32f4_discovery.h"
#include "stm32f4_discovery_audio.h"

static int16_t pcmBuf[2 * AUDIO_IN_BUF_SIZE]; /* double buffer DMA */

int main(void)
{
  HAL_Init;
  SystemClock_Config;                       /* 168 MHz */
  MX_I2S2_Init;                             /* I2S2 RX horloge PDM */
  BSP_AUDIO_IN_Init(AUDIO_IN_FREQUENCY_DEFAULT, 16, 0);
  BSP_AUDIO_IN_Record(pcmBuf, 2 * AUDIO_IN_BUF_SIZE);

  while (1) {
    if (halfReady) { halfReady = 0; Uart2Send(pcmBuf, AUDIO_IN_BUF_SIZE); }
    if (fullReady) { fullReady = 0; Uart2Send(pcmBuf + AUDIO_IN_BUF_SIZE,
                                              AUDIO_IN_BUF_SIZE); }
  }
}
/* Callbacks BSP_AUDIO_IN_HalfTransfer_CallBack / TransferComplete */

Procedimiento completo

  1. Compile la demo de grabación de CubeF4 para STM32F4-Discovery como referencia (asignación de pines I2S2 + filtro PDM ya correctos).
  2. Reemplace la escritura hacia el códec por su exfiltrador: CDC OTG o UART2 a la velocidad máxima adecuada a su cable.
  3. En el PC, capture el flujo (8 bits con signo o 16 bits según su maqueta), trace un espectrograma: la voz debe aparecer por debajo de 4 kHz.
  4. Para un producto real, procese a bordo (energía por trama, wake-word ligero) y extraiga solo los eventos.

Verificación esperada

Al aplaudir, el espectrograma muestra una ráfaga de banda ancha; al hablar, formantes por debajo de 4 kHz. Un piso de ruido regular sin estructura = filtro PDM mal dimensionado o reloj I2S2 incorrecto.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales