🛠 STM32Cube HAL et BSP officiel : LED, bouton et accéléromètre avec détection automatique

STM32F4DISCOVERY (kit Discovery STM32F407VGT6) · intermediaire · Schéma : arborescence du paquet STM32CubeF4 mise en évidence — Drivers/BSP/STM32F4-Discovery, Drivers/BSP/Components (lis302dl, lis3dsh) et Projects/STM32F4-Discovery — avec la carte STM32F4DISCOVERY et sa puce accéléromètre reliée au bus SPI1 (PA5/PA6/PA7, CS PE3).

Objectif

Programmer la STM32F4DISCOVERY « à la source » : le firmware officiel STM32CubeF4 contient un BSP (Board Support Package) dédié à cette carte, dans Drivers/BSP/STM32F4-Discovery, avec exemples complets dans Projects/STM32F4-Discovery/. Vous allez utiliser les API BSP_LED_*, BSP_PB_* et BSP_ACCELERO_* — et surtout comprendre la détection automatique de l'accéléromètre, particularité matérielle de cette carte.

Matériel et projet

Le piège matériel : deux accéléromètrès selon la révision

La carte a été produite avec deux MEMS différents sur le même bus SPI1 : le LIS302DL sur les premières cartes, le LIS3DSH sur les suivantes (SCK PA5, MISO PA6, MOSI PA7, CS PE3, interruptions PE0/PE1). Un code qui suppose un seul composant échoue silencieusement sur l'autre révision. Le BSP résout le problème en lisant l'identifiant de puce : utilisez BSP_ACCELERO_Init et ne codez pas en dur.

Code complet

#include "stm32f4_discovery.h"
#include "stm32f4_discovery_accelerometer.h"

int main(void)
{
  int16_t xyz[3] = {0, 0, 0};

  HAL_Init;            /* SysTick/NVIC par defaut */
  SystemClock_Config;  /* 168 MHz depuis le quartz HSE 8 MHz */

  BSP_LED_Init(LED3);    /* LED3 = PD13 (orange) ; LED4/5/6 = PD12/14/15 */
  BSP_PB_Init(BUTTON_KEY, BUTTON_MODE_GPIO);  /* USER = PA0 */
  BSP_ACCELERO_Init;   /* auto-detecte LIS302DL vs LIS3DSH via chip ID */

  while (1)
  {
    BSP_LED_Toggle(LED3);
    BSP_ACCELERO_GetXYZ(xyz);   /* axes normalises entre revisions */
    if (BSP_PB_GetState(BUTTON_KEY) == GPIO_PIN_SET)
      BSP_LED_On(LED4);
    else
      BSP_LED_Off(LED4);
    HAL_Delay(100);
  }
}

Ce que le BSP vous cache (utile à savoir)

Vérification attendue

La LED orange clignote à 5 Hz ; la LED verte reste allumée pendant l'appui sur USER. En inclinant la carte, les valeurs xyz changent (à observer en débogueur, la console ST-LINK n'étant pas câblée sur les cartes stock).

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels