🛠 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.

Objectif

Utiliser le MP45DT02, le microphone numérique omnidirectionnel PDM embarqué sur la STM32F4DISCOVERY. Contrairement à un micro analogique, il ne sort pas une tension mais un flux PDM 1 bit à haute fréquence, que le STM32F407 capture en I2S2 (mode « receive ») puis décime en PCM 16 bits par un filtre fourni dans STM32CubeF4. Le vrai sujet de niveau avancé n'est pas le micro : c'est où sortir les données, car cette carte cumule les pièges de brochage série.

La chaîne d'acquisition

  1. I2S2 en réception horloge PDM : le BSP audio CubeF4 (BSP_AUDIO_IN_*, démos record de Projects/STM32F4-Discovery/) configure le périphérique et le filtre PDM (décimation + filtre passe-bas) qui produit du PCM 16 bits.
  2. Double bufferisation DMA : pendant que le half-buffer est traité, le suivant se remplit — la callback HalfTransfer/TransferComplete recharge la fenêtre d'analyse.
  3. Exfiltration : la carte n'a ni broche micro-SD ni PHY Ethernet (le MAC 10/100 est dans la puce, pas sur le connecteur). Trois options : le port OTG FS en CDC (voir le tutoriel USB), un dongle USB-série externe sur UART2 PA2/PA3, ou un traitement 100 % embarqué (VAD, détection de claquement) sans export.

Les pièges de brochage qui transforment un TP en cauchemar

Squelette de code

#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 */

Démarche complète

  1. Compilez la démo record de CubeF4 pour STM32F4-Discovery comme référence (brochage I2S2 + filtre PDM déjà bons).
  2. Remplacez l'écriture vers le codec par votre exfiltreur : CDC OTG ou UART2 à la vitesse maximale propre à votre câble.
  3. Côté PC, relevez le flux (8 bits signés ou 16 bits selon votre maquette), tracez un spectrogramme : la voix doit apparaître sous 4 kHz.
  4. Pour un produit réel, traitez à bord (énergie par trame, wake-word léger) et ne sortez que les événements.

Vérification attendue

En tapant dans les mains, le spectrogramme montre une rafale large bande ; en parlant, des formants sous 4 kHz. Un plancher de bruit régulier sans structure = filtre PDM mal dimensionné ou horloge I2S2 incorrecte.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels