À 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
- L’éditeur VSCode
- Un compte sur le site de STMicroelectronics
- STM32CubeMX
- STM32CubeCLT
- ST-MCU-FINDER-PC
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
~/STM32CubeMXet~/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 :
- Ouvrir l’onglet Extensions .
- Installer l’extension STM32 VS Code Extension .
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 :
- Dans Extensions , cliquer sur la roue dentée à côté de STM32 VS Code Extension et ouvrir les Paramètres .
- Renseigner les chemins vers les exécutables et vers le dossier
STM32CubeCLT.
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.).
-
Dans VSCode, ouvrir l’onglet STM32 VS Code Extension .
Onglet STM32 VS Code Extension -
Lancer STM32CubeMX via le bouton dédié.
Lancement de STM32CubeMX -
Créer un nouveau projet.
Création d’un nouveau projet -
Sélectionner la carte ou le microcontrôleur concerné.
Sélection de la carte -
Vérifier la configuration de la LED (GPIO) et noter le “User Label”.
Configuration de la LED -
Vérifier que l’UART est bien activé et configuré en 115200 Baud .
Configuration de l’UART
-
-
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 -
De retour dans VSCode, importer le projet CMake .
Importation du projet CMake -
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 Visualiser l’UART
- Installez l’utilitaire
screen(ouminicom, etc.). - Repérez le port sous
/dev/(souventttyACM0). - Lancez la commande :
screen /dev/ttyACM0 115200
Vous verrez alors s’afficher les messages.
Sortie UART dans le terminal Félicitations ! Votre environnement pour programmer des STM32 sous Fedora 41 avec VSCode est désormais opérationnel.