🛠 Maîtriser les E/S avancées : GPIO et capteur LSM6DS3TR-C

Seeed Studio XIAO STM32C5 · avance · Configurez les GPIO rapides et interrogez le capteur inertielle intégré via I2C sur la XIAO STM32C5.

Objectifs

Ce tutoriel vise à configurer les entrées-sorties numériques à haute fréquence et à communiquer avec le capteur inertielle LSM6DS3TR-C embarqué. Vous apprendrez à manipuler les registres GPIO pour une latence minimale et à lire les données accélérées via le bus I2C, en exploitant les spécificités du STM32C5A3CG.

Matériel nécessaire

Étapes

Ouvrez STM32CubeIDE et créez un nouveau projet pour le STM32C5A3CG. Dans le configurateur graphique (IPCC), activez l'horloge externe (HSE) à 48 MHz et configurez le système pour tourner à 144 MHz via le PLL. Assurez-vous que l'unité de calcul flottant (FPU) est activée si nécessaire.

  1. Configuration de l'environnement

Dans l'onglet Pinout & Configuration, sélectionnez une broche GPIO libre (par exemple, une broche exposée sur les headers). Configurez-la en mode Output Push Pull, vitesse Very High. Pour le bus I2C connecté au LSM6DS3TR-C, vérifiez que les broches SCL et SDA sont configurées en Alternate Function avec les paramètres Open Drain et une fréquence adaptée (ex: 400 kHz pour Fast Mode).

  1. Configuration des GPIO

Générez le code. Dans main.c, initialisez les périphériques. Utilisez MX_GPIO_Init() et MX_I2C_Init(). Pour une performance maximale sur les GPIO, évitez les fonctions HAL lentes comme HAL_GPIO_WritePin dans les boucles critiques. Préférez l'écriture directe dans les registres BSRR (Bit Set Reset Register) du port GPIO.

  1. Génération du code

Le capteur est connecté via I2C. Son adresse est généralement 0x6A (si SD0 est à la masse) ou 0x6B. Envoyez une commande de réinitialisation logicielle. Configurez le registre CTRL1_XL pour activer l'accéléromètre à une fréquence d'échantillonnage élevée (ex: 104 Hz) et une plage de ±2g. Activez également le gyroscope via CTRL1_G si besoin.

  1. Initialisation du capteur LSM6DS3TR-C

Implémentez une fonction de lecture I2C pour lire les registres de sortie (OUTX_L_XL, etc.). Utilisez un tampon DMA pour transférer les données de l'I2C vers la mémoire SRAM sans bloquer le CPU, ce qui est crucial pour les applications temps réel sur le Cortex-M33.

  1. Lecture des données

Vérification

Connectez un oscilloscope logique aux broches GPIO configurées. Vous devriez observer des fronts de montée/descente très rapides (< 10 ns) lors de la bascule des GPIO. Pour le capteur, lisez les valeurs brutes via un outil de debug ou imprimez-les sur le port série (USB-C). Une accélération statique d'environ 1g (9.8 m/s²) sur l'axe Z doit être détectée lorsque la carte est posée à plat.

Pour aller plus loin

Explorez l'utilisation des interruptions matérielles (EXTI) pour détecter les changements d'état des GPIO sans polling. Intégrez le circuit de chauffage programmable du LSM6DS3TR-C via PWM pour stabiliser la température du capteur et réduire la dérive des mesures, une fonctionnalité clé de cette carte.

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels