🛠 Dominar E/S avanzadas: GPIO y sensor LSM6DS3TR-C
Objetivos
Este tutorial tiene como objetivo configurar E/S digitales de alta frecuencia y comunicar con el sensor inercial LSM6DS3TR-C integrado. Aprenderá a manipular los registros GPIO para una latencia mínima y a leer datos acelerados a través del bus I2C, aprovechando las especificidades del STM32C5A3CG.
Hardware Necesario
- Tarjeta Seeed Studio XIAO STM32C5
- Cable USB-C
- Ordenador con STM32CubeIDE o VS Code + PlatformIO
- Analizador lógico (opcional, para verificar señales GPIO)
Pasos
Abra STM32CubeIDE y cree un nuevo proyecto para STM32C5A3CG. En el Configurador Gráfico (IPCC), habilite el reloj externo (HSE) a 48 MHz y configure el sistema para funcionar a 144 MHz mediante el PLL. Asegúrese de que la Unidad de Punto Flotante (FPU) esté habilitada si es necesario.
- Configuración del entorno
En la pestaña Pinout & Configuration, seleccione un pin GPIO libre (por ejemplo, uno expuesto en los headers). Configúrelo como Output Push Pull con velocidad Very High. Para el bus I2C conectado al LSM6DS3TR-C, verifique que los pines SCL y SDA estén configurados como Alternate Function con ajustes Open Drain y una frecuencia adecuada (ej: 400 kHz para Fast Mode).
- Configuración de GPIO
Genere el código. En main.c, inicialice los periféricos. Use MX_GPIO_Init() y MX_I2C_Init(). Para un rendimiento máximo de GPIO, evite funciones HAL lentas como HAL_GPIO_WritePin en bucles críticos. Prefiera la escritura directa en los registros BSRR (Bit Set Reset Register) del puerto GPIO.
- Generación de código
El sensor está conectado vía I2C. Su dirección es generalmente 0x6A (si SD0 está a tierra) o 0x6B. Envíe un comando de reinicio de software. Configure el registro CTRL1_XL para habilitar el acelerómetro a una frecuencia de muestreo alta (ej: 104 Hz) y un rango de ±2g. Habilite el giroscopio vía CTRL1_G si es necesario.
- Inicialización del Sensor LSM6DS3TR-C
Implemente una función de lectura I2C para acceder a los registros de salida (OUTX_L_XL, etc.). Use un búfer DMA para transferir datos desde I2C a la memoria SRAM sin bloquear la CPU, lo cual es crucial para aplicaciones en tiempo real en el Cortex-M33.
- Lectura de datos
Verificación
Conecte un analizador lógico a los pines GPIO configurados. Debería observar flancos de subida/bajada muy rápidos (< 10 ns) al alternar los GPIO. Para el sensor, lea los valores brutos mediante una herramienta de depuración o imprímalos en el puerto serie (USB-C). Se debe detectar una aceleración estática de aproximadamente 1g (9.8 m/s²) en el eje Z cuando la tarjeta está colocada plana.
Para ir más allá
Explore el uso de interrupciones por hardware (EXTI) para detectar cambios de estado de GPIO sin sondeo. Integre el circuito de calentamiento programable del LSM6DS3TR-C vía PWM para estabilizar la temperatura del sensor y reducir la deriva de las mediciones, una característica clave de esta tarjeta.