Activation des floats et ajout de librairies externes

Optimisez vos projets STM32 en activant la prise en charge des nombres flottants et en intégrant des librairies externes

1. Introduction

Lorsqu'on développe des applications sur microcontrôleurs STM32, deux défis fréquents sont la gestion correcte des nombres à virgule flottante (floats) et l'intégration de librairies tierces pour étendre les fonctionnalités de base. Ce guide vous accompagne pas à pas dans ces deux aspects essentiels:

  • L'activation et la configuration correcte des nombres flottants pour les opérations mathématiques et l'affichage
  • L'ajout et l'intégration de librairies externes provenant de dépôts comme GitHub
Note : Ce guide est spécifiquement conçu pour l'environnement de développement STM32CubeIDE, mais les principes généraux peuvent s'appliquer à d'autres environnements de développement STM32.

2. Activation de la prise en compte des floats pour printf/scanf

Lorsque vous travaillez avec des capteurs comme le DHT qui renvoient des mesures décimales, il est essentiel d'activer correctement la prise en charge des nombres à virgule flottante (floats) dans votre projet STM32.

2.1 Étapes pour activer les floats

  1. Ouvrez les propriétés du projet :
    • Clic droit sur votre projet > Properties
  2. Activez la bibliothèque mathématique :
    • Allez dans "C/C++ Build" > "Settings"
    • Dans l'onglet "Tool Settings" > "MCU GCC Linker" > "Libraries"
    • Ajoutez m dans la liste des bibliothèques (Libraries (-l))
  3. Activez le support des floats pour printf/scanf :
    • Dans "MCU GCC Compiler" > "Miscellaneous"
    • Ajoutez ces flags dans "Other flags":
      
      -u _printf_float
      -u _scanf_float
      						
  4. Appliquez et reconstruisez le projet :
    • Cliquez sur "Apply and Close"
    • Reconstruisez votre projet (Clean and Build)
Configuration des floats dans STM32CubeIDE

Illustration : Configuration des floats dans STM32CubeIDE.

Important : Sans ces configurations, vos fonctions printf() et scanf() ne traiteront pas correctement les valeurs à virgule flottante, ce qui peut entraîner des comportements inattendus ou des affichages incorrects.

2.2 Exemple d'utilisation des floats

Voici un exemple de code utilisant des nombres à virgule flottante :


#include <stdio.h>

void example(void) {
    float temperature = 25.75f;
    float humidity = 68.32f;
    
    // Nécessite l'activation des floats dans printf
    printf("Température: %.2f°C, Humidité: %.2f%%\r\n", temperature, humidity);
    
    // Si les floats ne sont pas activés dans printf, alternative:
    int temp_int = (int)temperature;
    int temp_dec = (int)((temperature - temp_int) * 100);
    printf("Température: %d.%02d°C\r\n", temp_int, temp_dec);
}
Astuce : Même avec l'activation des floats, la deuxième méthode (décomposition en partie entière et décimale) peut être utile sur les systèmes aux ressources limitées, car elle est plus économe en mémoire et en temps de traitement.

3. Ajout d'une librairie externe

Pour intégrer une librairie externe comme STM32_DHT de GitHub à votre projet STM32CubeIDE, suivez ces étapes:

3.1 Téléchargement de la librairie

  1. Identifiez la source de la librairie :
  2. Téléchargez les fichiers:
    • Option 1: Cliquez sur le bouton "Code" > "Download ZIP" pour télécharger tout le dépôt
    • Option 2: Téléchargez individuellement les fichiers nécessaires (généralement .c et .h)
    • Option 3: Utilisez Git pour cloner le dépôt:
      git clone https://github.com/weedmanu/STM32_Libraries.git

3.2 Création de la structure de dossiers

  1. Ajoutez un dossier pour les librairies externes:
    • Dans l'explorateur de projet STM32CubeIDE, cliquez droit sur votre projet
    • New > Folder
    • Nommez-le "Libraries" ou "External_Libraries"
  2. Créez un sous-dossier pour la librairie spécifique:
    • Cliquez droit sur le dossier "Libraries"
    • New > Folder
    • Nommez-le "DHT" (pour le capteur DHT dans notre exemple)
Bonne pratique : Cette organisation en dossiers facilite la maintenance et l'évolution de votre projet, surtout si vous intégrez plusieurs librairies externes.

3.3 Importation des fichiers

    Importez les fichiers de la librairie:
    • Cliquez droit sur le dossier "DHT"
    • Import... > General > File System > Next
    • Naviguez jusqu'à l'emplacement où vous avez téléchargé/extrait les fichiers
    • Sélectionnez les fichiers nécessaires (dht.c, dht.h)
    • Finish
  1. Vérifiez la concordance des fichiers:
    • Assurez-vous que les fichiers importés sont compatibles avec votre version de STM32CubeIDE
    • Vérifiez les dépendances et les inclusions

3.4 Configuration des chemins d'inclusion

  1. Ajoutez le chemin vers la librairie:
    • Cliquez droit sur votre projet > Properties
    • Allez dans "C/C++ General" > "Paths and Symbols"
    • Sélectionnez l'onglet "Includes"
    • Sélectionnez "GNU C" dans la liste des langages
    • Cliquez sur "Add..."
    • Sélectionnez "Workspace..." pour un chemin relatif au workspace
    • Naviguez jusqu'à votre dossier Libraries/DHT
    • Cochez "Add to all configurations"
    • OK
Structure de dossiers pour les librairies externes

Illustration : Structure de dossiers pour les librairies externes.

  1. Ajoutez le dossier source:
    • Dans les propriétés du projet, allez à "C/C++ General" > "Paths and Symbols"
    • Sélectionnez l'onglet "Source Location"
    • Cliquez sur "Add Folder..."
    • Sélectionnez le dossier "Libraries/DHT"
    • OK
Configuration des chemins d'inclusion dans STM32CubeIDE

Illustration : Configuration des chemins d'inclusion dans STM32CubeIDE.

Attention : Sans configuration correcte des chemins d'inclusion, le compilateur ne trouvera pas vos fichiers externes, générant des erreurs du type "No such file or directory".

3.5 Adaptation du code (si nécessaire)

Pour intégrer correctement la librairie à votre projet, il est généralement nécessaire d'effectuer les ajustements suivants :

  1. Modifier l'inclusion du fichier HAL :
    • Dans le fichier d'en-tête de la librairie (par exemple, dht.h), remplacez #include "stm32l4xx_hal.h" par l'inclusion correspondant à votre carte STM32 (par exemple, #include "stm32f4xx_hal.h" pour une carte STM32F4).
  2. Adapter les périphériques utilisés :
    • Configurez les timers, ADC, ou I2C en fonction des ressources matérielles de votre projet.
    • Assurez-vous que les initialisations dans le fichier main.c correspondent aux broches et périphériques choisis pour votre projet.

4. Conclusion

En suivant ces étapes, vous avez maintenant:

  • Activé correctement la prise en charge des nombres à virgule flottante dans votre projet STM32
  • Intégré une librairie externe provenant de GitHub dans votre environnement de développement

Ces compétences vous permettront de développer des applications plus complexes en tirant parti à la fois des capacités mathématiques avancées et du code partagé par la communauté.

Pour aller plus loin : Explorez la documentation officielle de STM32CubeIDE pour découvrir d'autres optimisations et techniques d'intégration.