Programmer un STM32 sous Fedora 41 avec VSCode · Thomas Bolteau
author avatar

Thomas Bolteau

About Me Posts

Programmer un STM32 sous Fedora 41 avec VSCode

Mise en place de l’environnement de développement pour le STM32F411RE sous Linux (Fedora 41) avec Visual Studio Code

Programmer un STM32 sous Fedora 41 avec VSCode

À propos

Dans cet article, nous allons mettre en place un environnement pour programmer des STM32 en C via VSCode . Nous allons intégrer les outils fournis par STMicroelectronics afin de générer facilement le code nécessaire au développement d’un firmware.

Prérequis

Installation

Attention : Ne vous précipitez pas lors de l’installation ! La plupart des problèmes proviennent d’erreurs liées aux chemins d’installation des différentes dépendances.

Outils STM32

Dans un premier temps, nous allons installer les outils propriétaires de ST afin de pouvoir interagir facilement avec le microcontrôleur :

  • STM32CubeMX et ST-MCU-FINDER-PC s’installent via des installateurs graphiques. Notez bien le chemin d’installation (généralement ~/STM32CubeMX et ~/ST-MCU-FINDER-PC).
  • STM32CubeCLT s’installe via un script qui crée par défaut le dossier /opt/ST/STM32CubeCLT.

VSCode

Après avoir installé VSCode, configurons les outils :

  1. Ouvrir l’onglet Extensions .
  2. Installer l’extension STM32 VS Code Extension .

Installation de l’extension STM32 Installation de l’extension STM32

Une fois l’extension installée, il faut la configurer pour indiquer les chemins d’accès aux outils STM32 installés :

  1. Dans Extensions , cliquer sur la roue dentée à côté de STM32 VS Code Extension et ouvrir les Paramètres .
  2. Renseigner les chemins vers les exécutables et vers le dossier STM32CubeCLT.

Paramètres de l’extension STM32 Paramètres de l’extension STM32

La configuration étant terminée, nous allons créer notre premier projet pour vérifier le bon fonctionnement de l’ensemble.

Hello World

Notre objectif est d’envoyer un message via l’UART depuis notre STM32 et de faire clignoter la LED intégrée.

Cette partie du tutoriel utilise la carte STM32F411RE . Selon votre carte, la configuration peut différer.

Génération du code de base avec STM32CubeMX

STM32CubeMX est le logiciel de ST qui permet de configurer graphiquement un microcontrôleur puis de générer automatiquement le code associé (GPIO, SPI, UART, I2C, DMA, etc.).

  1. Dans VSCode, ouvrir l’onglet STM32 VS Code Extension .

    Onglet STM32 VS Code Extension Onglet STM32 VS Code Extension

  2. Lancer STM32CubeMX via le bouton dédié.

    Lancement de STM32CubeMX Lancement de STM32CubeMX

  3. Créer un nouveau projet.

    Création d’un nouveau projet Création d’un nouveau projet

    • Sélectionner la carte ou le microcontrôleur concerné.

      Sélection de la carte Sélection de la carte

    • Vérifier la configuration de la LED (GPIO) et noter le “User Label”.

      Configuration de la LED Configuration de la LED

    • Vérifier que l’UART est bien activé et configuré en 115200 Baud .

      Configuration de l’UART Configuration de l’UART

  4. Dans l’onglet Project Manager , choisir le nom du projet et générer le code.

    Important : Sélectionner CMake comme toolchain !

    Project Manager - Génération du code Project Manager - Génération du code

  5. De retour dans VSCode, importer le projet CMake .

    Importation du projet CMake Importation du projet CMake

  6. Redémarrer VSCode si nécessaire et sélectionner la configuration Debug .

L’IDE est prêt ! Passons à l’écriture de notre premier firmware.

Premier firmware

Nous allons faire clignoter la LED intégrée et envoyer un message sur l’UART, incluant une variable.
Le code complet est disponible sur ce dépôt GitHub .

Attention : Écrivez votre code entre les balises USER CODE BEGIN et USER CODE END pour éviter d’éventuelles suppressions par STM32CubeMX.

Deux modifications principales sont nécessaires :

1. Dans main.c (section Includes )

/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* USER CODE END Includes */

2. Dans la fonction main

int main(void)
{
  /* USER CODE BEGIN 1 */
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */
  uint8_t counter = 0;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    char buffer[64];
    snprintf(buffer, sizeof(buffer), "Hello World! %d\r\n", counter);
    HAL_UART_Transmit(&huart2, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);

    HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
    HAL_Delay(100);
    HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
    HAL_Delay(200);

    HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
    HAL_Delay(100);
    HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
    HAL_Delay(1000);

    counter++;
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

Flash et débogage

Pour compiler et flasher votre STM32, lancez le debugger dans VSCode :

Lancement du débogueur Lancement du débogueur

Visualiser l’UART

  1. Installez l’utilitaire screen (ou minicom, etc.).
  2. Repérez le port sous /dev/ (souvent ttyACM0).
  3. Lancez la commande :
screen /dev/ttyACM0 115200

Vous verrez alors s’afficher les messages.

Sortie UART dans le terminal Sortie UART dans le terminal

Félicitations ! Votre environnement pour programmer des STM32 sous Fedora 41 avec VSCode est désormais opérationnel.