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

Objetivo

Programar la STM32F4DISCOVERY « desde la fuente »: el firmware oficial STM32CubeF4 contiene un BSP (Board Support Package) dedicado a esta tarjeta, en Drivers/BSP/STM32F4-Discovery, con ejemplos completos en Projects/STM32F4-Discovery/. Utilizará las API BSP_LED_*, BSP_PB_* y BSP_ACCELERO_* — y sobre todo entenderá la detección automática del acelerómetro, una particularidad de hardware de esta tarjeta.

Material y proyecto

La trampa de hardware: dos acelerómetros según la revisión

La tarjeta se produjo con dos MEMS diferentes en el mismo bus SPI1: el LIS302DL en las primeras tarjetas, el LIS3DSH en las siguientes (SCK PA5, MISO PA6, MOSI PA7, CS PE3, interrupciones PE0/PE1). Un código que asume un solo componente falla silenciosamente en la otra revisión. El BSP resuelve el problema leyendo el identificador del chip: utilice BSP_ACCELERO_Init y no programe valores fijos.

Código completo

#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);
  }
}

Lo que el BSP le oculta (útil saberlo)

Verificación esperada

El LED naranja parpadea a 5 Hz; el LED verde permanece encendido mientras se pulsa USER. Al inclinar la tarjeta, los valores xyz cambian (a observar en el depurador, ya que la consola ST-LINK no está cableada en las tarjetas estándar).

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales