🛠 Controlling GPIO and Reading the IMU on XIAO STM32C5

Seeed Studio XIAO STM32C5 · intermediaire · Apprenez à configurer les broches GPIO et à lire les données du capteur inertielle LSM6DS3TR-C intégré.

Objectifs

This tutorial aims to understand digital Input/Output (GPIO) management and interaction with the integrated 6-axis inertial sensor LSM6DS3TR-C on the XIAO STM32C5 board. We will configure an LED for visual indication and read acceleration data via the internal I2C bus. This intermediate level assumes familiarity with embedded code compilation.

Required Hardware

Steps

  1. Prepare your development environment. If using STM32CubeIDE, create a new project selecting the STM32C5A3CG microcontroller. Ensure the system frequency is set to 144 MHz to utilize the full power of the Arm Cortex-M33 core.
  1. Configure peripherals in CubeMX. Enable the I2C interface connected to the LSM6DS3TR-C. Note that this sensor is directly wired to the board, no soldering is needed. Also configure a GPIO in output mode for an LED (e.g., user LED if available, or a free pin like D0).
  1. Generate code and open the main file (main.c). Include necessary libraries for the LSM6DS3TR-C driver. If using Zephyr RTOS via PlatformIO, add sensor driver dependencies in your platformio.ini file.
  1. Initialize the system and sensor. In the main function, call the I2C bus initialization function, then the inertial sensor initialization. Verify the sensor responds correctly by reading its device ID.
  1. Implement the reading loop. Continuously read acceleration values (X, Y, Z). To display this data, configure UART (via USB-C) in Full-Speed mode and send formatted values to the serial monitor.
  1. Add GPIO reaction logic. For example, if Z acceleration exceeds a threshold (simulating a shock or tilt), turn on the LED configured in step 2 by setting the pin high (HAL_GPIO_WritePin). Turn it off otherwise.

Verification

Open your IDE's serial monitor at 115200 bauds. You should see acceleration values scrolling. By tilting or lightly tapping the board, observe the digit changes and the instant LED lighting, confirming the link between sensor reading and GPIO command is functional.

Going Further

Explore the PWM-programmable heating circuit of the LSM6DS3TR-C to reduce thermal drift. Configure a PWM timer to activate heating and observe measurement stabilization after a few minutes. You can also explore the two CAN FD controllers, using FDCAN2 with the embedded transceiver to communicate with other CAN nodes.

Other tutorials for this board

Code examples for this board

← Back to the board 🛠 All tutorials