Tutoriel STM32CubeIDE
Introduction
Il faut au préalable installer la suite logiciel ST suivante :
Il faut également disposer d'un terminal série tel que Putty ou Tera Term.
On a besoin d'une connexion internet pour télécharger les fichiers nécessaires, une carte STM32 et un câble USB pour la connecter à l'ordinateur.
Commencer un nouveau projet
On démarre STM32CubeIDE et on clique sur le i puis Start new STM32 project.

Ensuite :
- On clique sur Board Selector
- On cherche sa carte en tapant le numéro L152 ou autre et on choisit le modèle correspondant
- On la sélectionne, en bas à droite dans Board List
(un bug peut vous faire sortir du mode Board Selector retourner y avant de faire le Next) - Puis on clique sur Next

On choisit un nom à son projet et on clique sur Finish en répondant oui au popup pour installer le firmware de la carte et la configuration par défaut des pins.

On configure les périphériques par défaut de la carte en cliquant sur oui dans le popup suivant.

Après quelque temps, STM32CubeIDE s'ouvre avec le projet et les périphériques par défaut (en vert) configurés.

Activer la prise en compte nombres décimaux
On clique droit sur le Project puis sur Properties.

On développe C/C++ Build puis sur on clique sur Settings puis sur MCU/MPU Settings et on coche Use float.

Générer le code
Tout ce qui est paramétré dans le fichier .ioc sera pris en compte et activé lors de la génération du code.

La fichier main.c est généré dans le dossier Core/Src du projet.

Le fichier main.c a été généré en fonction de la configuration du fichier .ioc.
A ce stade, les broches de la carte sont configurées pour les périphériques choisis et initialisé dans le code généré.
A chaque fois, que l'on modifiera la configuration du projet dans le fichier .ioc, il faudra régénérer le code.
Le code est organisé en sections réservées au système et en sections réservées à l'utilisateur.
Lorsque l'on modifie le code, il faut le faire dans les sections réservées à l'utilisateur car les sections réservées au système sont écrasées à chaque génération du code.
Architecture: sections USER
Les sections réservées à l'utilisateur sont :
- Les bibliothèques :
/* USER CODE BEGIN Includes */
Ajouter vos bibliothèques spécifiques ici
/* USER CODE END Includes */ - Les variables globales:
/* USER CODE BEGIN PV */
Ajouter vos variables globales ici
/* USER CODE END PV */ - Les prototypes des fonctions :
/* USER CODE BEGIN PFP */
Ajouter vos prototypes ici (Il faut déclarer le prototype de vos fonctions personnalisées)
/* USER CODE END PFP */ - Les variables ou fonctions à utiliser avant le main :
/* USER CODE BEGIN 0 */
Ajoutez ici vos variables ou fonctions d'initialisation à utiliser avant le main
/* USER CODE END 0 */ - Des fonctions à utiliser dans le main :
/* USER CODE BEGIN 1 */
Ajouter vos fonctions à utiliser dans avant l'initialisation des périphériques comme GPIO, UART, etc...
/* USER CODE END 1 */ - Le code à utiliser dans le main avant la boucle principale :
/* USER CODE BEGIN 2 */
Ajoutez ici du code d'initialisation ou de configuration supplémentaire qui doit être exécuté après l'initialisation des périphériques comme GPIO, UART, etc...
/* USER CODE END 2 */ - Le code utilisateur à l'intérieur de la boucle principale :
/* USER CODE BEGIN WHILE */
Ajoutez ici votre code à exécuter en boucle
/* USER CODE END WHILE */ - Les fonctions à utiliser après la boucle :
/* USER CODE BEGIN 3 */
Cette section est rarement utilisée et est réservée pour les fonctions qui doivent être exécutées après la boucle principale.
/* USER CODE END 3 */ - Les fonctions personnalisées à utiliser :
/* USER CODE BEGIN 4 */
Ajouter vos fonctions personnalisées à utiliser ici (Il faut déclarer le prototype dans USER CODE BEGIN PFP)
/* USER CODE END 4 */ - Les fonctions de gestion des erreurs :
/* USER CODE BEGIN Error_Handler_Debug */
Ajouter votre code de gestion des erreurs personnalisés ici
/* USER CODE END Error_Handler_Debug */
Activer l'UART
L'UART (Universal Asynchronous Receiver Transmitter) est un protocole de communication série asynchrone.
Il est utilisé pour communiquer avec un ordinateur, un autre microcontrôleur ou pour le débogage.
L'UART utilise généralement deux broches : TX (transmission) et RX (réception).
Par exemple, sur la carte STM32L152RE, les broches PA2 et PA3 sont utilisées pour TX et RX respectivement.
Pour activer l'UART si il n'est pas activé, il faut :
- Ouvrir le fichier .ioc et cliquer sur Connectivity
- Choisir l'USART désiré
- Cliquer sur parameter setting
- Changer la vitesse de transmission

Il faut ensuite :
- Cliquer sur GPIO Settings
- Repérer ou configurer les broches TX et RX si besoin
- Générer le code

Maintenant que l'UART est activé, on peut utiliser les fonctions de la bibliothèque stm32l1xx_hal_uart.h pour communiquer avec un terminal série.
On va donc modifier le fichier main.c, on commence par importer la bibliothèques nécessaire "stdio.h" pour la communication série en ajoutant la ligne suivante dans l'espace nommé Private includes entre USER CODE BEGIN Includes et USER CODE END Includes.
On va ensuite ajouter le code nécessaire pour utiliser l'UART en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2 qui se trouve après l'initialisation des périphériques.
On va ensuite ajouter une fonction qui permet de transmettre un caractère via l'UART et le renvoyer en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4. Cette fonction est utilisée pour la sortie standard (printf).
On sauvergarde le fichier main.c (Ctrl S).
Maintenant :
- On clique sur Build (le marteau) pour compiler le code
- On vérifie qu'il n'y a pas d'erreur dans la console
- On clique sur RUN (la flèche verte) pour téléverser le code sur la carte
- On ouvre un terminal série tel que Putty, Tera Term ou autre et on configure la vitesse de transmission à 115200 bauds

Puis on clique sur le bouton noir de la carte STM32 pour la redémarrer et on devrait voir le message "test Serial" s'afficher dans le terminal série.

LED et bouton
Faire clignoter une LED avec un délai
La LED LD2 de la carte STM32L152RE est connectée à la broche PA5.
Pour allumer la LED, il faut mettre la broche PA5 à l'état haut et pour l'éteindre, il faut la mettre à l'état bas.
On va donc modifier le fichier main.c pour faire clignoter la LED en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN WHILE et USER CODE END WHILE qui se trouve dans la boucle principale.
La LED va s'allumer pendant 1 seconde puis s'éteindre pendant 1 seconde.
Ou plus simple :
La LED va clignoter à une fréquence de 1 Hz (1 seconde allumée et 1 seconde éteinte).
Faire clignoter une LED par une interruption
Pour cela, on va donc modifier le fichier .ioc :
- On clique sur le fichier .ioc
- On clique sur Pinout & Configuration
- On clique sur Timers
- On clique sur TIM2
- Dans Mode, clock source on choisit Internal Clock
- Dans NVIC Settings
- On coche Enabled à TIM2 global interrupt

Puis on clique sur Parameter Settings :
- Dans Prescaler on met la valeur 31999
- Dans Counter Period on met la valeur 999

PSC (Prescaler)
Le prescaler divise l'horloge principale par de grands facteurs. Il peut prendre des valeurs comprises entre 0 et 65535, ce qui permet une grande flexibilité dans le choix de la fréquence du timer.
ARR (Counter Period)
L'ARR (Auto-reload register) La période (ARR) spécifie le nombre maximal de cycles d'horloge que le timer doit compter avant de se réinitialiser.
Formule utile :
Fréquence du timer (Hz) = 1 / période du timer (s)
Fréquence du timer = Fréquence d'horloge (Hz) / ( PSC + 1 )
PSC = ( Fréquence d'horloge (Hz) / Fréquence du timer (Hz) ) - 1 ( doit être < 65535 on divisera par 1000, 10 000 )
période(ARR) = ( ( période du timer (s) x Fréquence d'horloge (Hz) ) / ( PSC + 1 ) ) - 1
Pour une interruption toute les secondes sur une 32MHz
- Fréquence = 1/1s = 1Hz
- Fréquence d'horloge = 32 MHz
- fréquence du timer = fréquence d'horloge / ( PSC + 1 ) = 32 000 000 / ( 31999 + 1 ) = 1000 Hz
- PSC = (32 000 000 / 1 ) - 1 = 31 999 999 -> 31999 ( doit être < 65535 on a divisé par 1000 )
- ARR = ( ( 1 x 32 000 000) / (31999 + 1) ) - 1 = 999
Pour une interruption toute les secondes sur une 80MHz
- Fréquence = 1/1s = 1Hz
- Fréquence d'horloge = 80 MHz
- fréquence du timer = fréquence d'horloge / (PSC + 1) = 80 000 000 / (7999 + 1) = 10 000 Hz
- PSC = (80 000 000/ 1 ) - 1 = 79 999 999 -> 7999 (doit être < 65535 on a divisé par 10 000)
- ARR = ( (1 x 80 000 000) / (7999 + 1) ) - 1 = 9999
On génère le code et on modifie le fichier main.c pour démarrer le timer en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
Maintenant, on va effacer ce qu'il y a entre USER CODE BEGIN WHILE et USER CODE END WHILE
On va ensuite ajouter une fonction qui va être appelée à chaque interruption du timer en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.
On sauvegarde le fichier main.c (Ctrl S).
Maintenant :
- On clique sur Build (le marteau) pour compiler le code
- On vérifie qu'il n'y a pas d'erreur dans la console
- On clique sur RUN (la flèche verte) pour téléverser le code sur la carte
La LED va clignoter à une fréquence de 1 Hz (1 seconde allumée et 1 seconde éteinte).
Allumer une led par un bouton avec lecture d'état
On va déclarer une variable pour suivre l'état de la LED
On va ensuite ajouter le code nécessaire pour allumer la LED en fonction de l'état du bouton en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END WHILE qui se trouve dans le main.
On supprime le code entre USER CODE BEGIN 4 et USER CODE END 4 sauf la fonction de l'UART
On sauvegarde le fichier main.c (Ctrl S).
- On clique sur Build (le marteau) pour compiler le code
- On vérifie qu'il n'y a pas d'erreur dans la console
- On clique sur RUN (la flèche verte) pour téléverser le code sur la carte
La LED s'allume ou s'éteint lorsque l'on appuie sur le bouton Bleu de la carte STM32L152RE et garde son état.
Allumer une led par un bouton avec une interruption
On va modifier le fichier .ioc :
- On clique sur le fichier .ioc
- On clique sur System Core et GPIO
- On clique sur GPIO dans configuration et on choisit le GPIO mode, le pull-up ou pull-down et un Label

- On clique sur NVIC dans configuration et on coche Enabled à EXTI line

Maintenant, On génère le code et on modifie le fichier main.c pour déclarer une variable pour suivre l'état de la LED en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On efface ce qu'il y a entre USER CODE BEGIN WHILE et USER CODE END WHILE
On va ensuite ajouter une fonction qui va être appelée à chaque interruption du bouton en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.
On sauvegarde le fichier main.c (Ctrl S).
Maintenant :
- On clique sur Build (le marteau) pour compiler le code
- On vérifie qu'il n'y a pas d'erreur dans la console
- On clique sur RUN (la flèche verte) pour téléverser le code sur la carte
La LED s'allume ou s'éteint lorsque l'on appuie sur le bouton Bleu de la carte STM32L152RE et garde son état qui s'affiche dans le terminal série.
I2C (Inter-Integrated Circuit)
L'I2C est un protocole de communication série synchrone qui permet de communiquer avec plusieurs périphériques sur le même bus.
Activer l'I2C
Pour activer l'I2C si il n'est pas activé, il faut :
- Ouvrir le fichier .ioc
- Cliquer sur Connectivity
- Choisir l'I2C désiré
- Activer le
- Vous pouvez modifier les paramètres si nécessaire (vitesse)

Maintenant, On génère le code
Adresse d'un périphérique I2C
On modifie le fichier main.c pour utiliser l'I2C en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PFP et USER CODE END PFP.
On va ensuite ajouter l'appel de la fonction pour scanner les adresses des périphériques I2C en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
On va ensuite ajouter la fonction qui permet de scanner les adresses des périphériques I2C en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.
On sauvegarde le fichier main.c (Ctrl S).
Maintenant :
- On clique sur Build (le marteau) pour compiler le code
- On vérifie qu'il n'y a pas d'erreur dans la console
- On clique sur RUN (la flèche verte) pour téléverser le code sur la carte
- On ouvre un terminal série tel que Putty, Tera Term ou autre et on configure la vitesse de transmission à 115200 bauds
Puis on clique sur le bouton noir de la carte STM32 pour la redémarrer et on devrait voir les adresses des périphériques I2C connectés s'afficher dans le terminal série.

Utiliser un écran I2C
On va modifier le code précédent et ajouter le code utiliser un écran I2C.
On modifie le fichier main.c pour utiliser l'I2C en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Includes et USER CODE END Includes.
On ajoute ensuite les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PD et USER CODE END PD.
On ajoute ensuite les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On ajoute ensuite les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PFP et USER CODE END PFP.
On ajoute ensuite les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
On ajoute ensuite les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.
On sauvegarde le fichier main.c (Ctrl S).
Maintenant :
- On clique sur Build (le marteau) pour compiler le code
- On vérifie qu'il n'y a pas d'erreur dans la console
- On clique sur RUN (la flèche verte) pour téléverser le code sur la carte
- On devrait voir le texte s'afficher sur l'écran I2C

Installer une bibliothèque externe
On peut aussi utiliser une bibliothèque externe pour utiliser un écran I2C. Elle se compose généralement d'un ou plusieurs fichiers .c et .h à ajouter dans le projet.
A partir du programme précèdent, j'ai crée une libraire pour utiliser l'écran, que l'on va installer
On click droit sur le projet puis Show in et System Explorer.

On ouvre le dossier du projet et on y crée un dossier nommé librairies qui contiendra nos librairies dans le dossier du projet.
Dans ce dossier, on crée un dossier nommé STM32_I2C_LCD qui contiendra notre libraire pour l'écran.

On va maintenant créer deux fichiers nommés STM32_I2C_LCD.h et STM32_I2C_LCD.c dans le dossier STM32_I2C_LCD.
On crée le fichier STM32_I2C_LCD.h ci-dessous dans le dossier STM32_I2C_LCD.
C'est dans le fichier STM32_I2C_LCD.h que l'on adapte la librairie aux type de carte utilisée, définit l'adresse de l'écran et le nombre de colonnes et de lignes.
On crée ensuite le fichier STM32_I2C_LCD.c ci-dessous :
On a ceci maintenant :
Voila, maintenant, on fait F5 pour rafraîchir le projet et on devrait voir les fichiers apparaître dans le projet.

Si on inclue la librairie dans le code et que l'on compile, on devrait avoir une erreur car il faut renseigner le chemin des librairies.

On va maintenant ajouter la librairie à notre projet. On click droit sur le projet puis Properties.

On va ensuite dans :
- On va dans C/C++ Build
- Puis Settings.
- Dans l'onglet Tool Settings
- On va dans MCU GCC Linker
- Puis Libraries
- On click sur Add dans la fenêtre Libraries (-L)
- On click sur Workspace

On ajoute le chemin du dossier de notre librairie STM32_I2C_LCD dans le projet et on click sur OK.

On click sur OK :

On doit avoir ceci :

Ensuite :
- Toujours dans C/C++ Build
- Settings.
- Dans l'onglet Tool Settings
- On va dans MCU GCC Compiler
- Puis Includes paths
- On click sur Add dans la fenêtre Include paths (-I)
- On click sur Workspace et on ajoute du dossier ne notre librairie STM32_I2C_LCD dans le projet s'il ne s'est pas renseigné tout seul.
- On click sur OK

On doit avoir ceci :

Ensuite :
- On va dans C/C++ General
- Puis Paths and Symbols
- Dans l'onglet Source Location
- On click sur Add Folder
- On ajoute le chemin du dossier de notre librairie STM32_I2C_LCD dans le projet.
- On click sur OK
On doit avoir ceci :

On doit avoir ceci , on click sur Apply and Close.

Maintenant, on peut inclure la librairie dans le code et si on compile, il n'y a plus d'erreur.

On sauvegarde le projet (Ctrl S).
Maintenant, on va modifier le code pour utiliser la librairie.
On modifie le fichier main.c pour utiliser l'I2C en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Includes et USER CODE END Includes.
SI vous utiliser le programme précédent, on supprime les lignes dans l'espace nommé USER CODE BEGIN PD et USER CODE END PD. et USER CODE BEGIN PV, USER CODE END PV et USER CODE BEGIN PFP et USER CODE END PFP.
On ajoute ensuite les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
SI vous utiliser le programme précédent, on supprime les lignes dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4. sauf la faonction pour l'UART.
Maintenant :
- On clique sur Build (le marteau) pour compiler le code
- On vérifie qu'il n'y a pas d'erreur dans la console
- On clique sur RUN (la flèche verte) pour téléverser le code sur la carte
- On devrait voir le texte s'afficher sur l'écran I2C

La librairie STM32_I2C_LCD à été améliorée pour être plus facile à utiliser, on peut la télécharger sur mon github ici.
Utiliser un écran Oled I2C
On va pour cela ajouter la librairie SSD1306, on la télécharge ici et on dézippe le fichier.
On copie le dossier ssd1306 dans le dossier librairies du projet.

On click sur le projet puis on fait F5 pour rafraîchir le projet et on devrait voir les fichiers apparaître dans le projet.

On va ajouter le chemin de la librairie au projet, pour cela on click droit sur le projet puis Properties et on va dans :
- On va dans C/C++ Build
- Puis Settings.
- Dans l'onglet Tool Settings
- On va dans MCU GCC Linker
- Puis Libraries
- On click sur Add dans la fenêtre Libraries (-L)
- On click sur Workspace
- On ajoute le chemin du dossier de notre librairie ssd1306 dans le projet et on click sur OK.

Ensuite :
- Toujours dans C/C++ Build
- Settings.
- Dans l'onglet Tool Settings
- On va dans MCU GCC Compiler
- Puis Includes paths
- On click sur Add dans la fenêtre Include paths (-I)
- On click sur Workspace et on ajoute du dossier ne notre librairie ssd1306 dans le projet s'il ne s'est pas renseigné tout seul.
- On click sur OK

Maintenant :
- On va dans C/C++ General
- Puis Paths and Symbols
- Dans l'onglet Source Location
- On click sur Add Folder
- On ajoute le chemin du dossier de notre librairie ssd1306 dans le projet.
- On click sur OK
- On click sur Apply and Close.

Maintenant :
- On ouvre le fichier ssd1306_conf_template.h dans le dossier ssd1306 pour adapter la librairie à notre carte.
- On modifie en fonction de notre carte la ligne correspondante.
- On click sur le fichier ssd1306_conf_template.h et on fait F2 pour le renommer.
- On le renomme en ssd1306_conf.h.
- On click sur OK pour valider.

On va maintenant modifier le code pour utiliser l'écran Oled I2C.
On modifie le fichier main.c en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Includes et USER CODE END Includes.
On ajoute ensuite les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
Voila, maintenant, on sauvegarde le projet (Ctrl S), on compile et on téléverse le code sur la carte.
On devrait voir l'écran Oled I2C s’animer.
pour créer des symboles, des dessins sur l'écran, soit on part d'une image en BMP avec ce site :
On peut aussi utiliser un outil pour convertir une image en code C++ :
Voici un exemple de logo perso, on click droit sur la librairie ssd1306, on ajoute un header (.h) :

On le nomme logos.h :

On ajoute le code suivant dans le fichier logos.h :
Maintenant, on ajoute le code suivant dans le fichier main.c entre les balises USER CODE BEGIN Includes et USER CODE END Includes :
On ajoute ensuite le code suivant dans le fichier main.c entre les balises USER CODE BEGIN 2 et USER CODE END 2 :
On sauvegarde le projet (Ctrl S), on compile et on téléverse le code sur la carte. On devrait voir les logos s'afficher sur l'écran Oled I2C.
ADC (Analog to Digital Converter)
Introduction
L'ADC (Analog to Digital Converter) d'une STM32L152RE se caractérise par divers paramètres qui déterminent son fonctionnement et ses performances. Voici quelques-uns des paramètres clés de l'ADC :
Resolution
La résolution de l'ADC détermine le nombre de bits numériques dans le résultat converti. Les microcontrôleurs STM32 offrent diverses résolutions ADC, telles que 12 bits, 16 bits, ou même plus. Par exemple, le MCU STM32L152RE prend en charge un ADC de 12 bits.
Conversion Modes
L'ADC peut fonctionner dans différents modes de conversion :
- Single Conversion Mode : Dans ce mode, une seule conversion est déclenchée, et l'ADC convertit un canal d'entrée analogique à la fois.
- Continuous Conversion Mode : Dans ce mode, l'ADC effectue des conversions en continu, convertissant un canal d'entrée analogique à la fois.
- Scan Mode : Dans ce mode, l'ADC effectue des conversions en continu sur plusieurs canaux d'entrée analogique.
Sampling Time
Le temps d'échantillonnage fait référence à la durée pendant laquelle l'ADC échantillonne la tension d'entrée analogique.
Temps de conversion = (Temps d'échantillonnage + Cycle de conversion) x (1 / Fréquence d'horloge de l'ADC)
Il est essentiel de définir un temps d'échantillonnage approprié pour permettre à l'ADC de capturer le signal analogique avec précision.
Par exemple, si l'horloge de l'ADC est de 32 MHz et a un temps d'échantillonnage de 1,5 cycles, alors le temps de conversion de l'ADC est de 0.4 µs.
Channels
Le périphérique ADC de STM32 prend en charge plusieurs canaux pour convertir plusieurs entrées analogiques.
Chaque canal peut être configuré individuellement avec des paramètres spécifiques tels que le temps d'échantillonnage, la résolution et la plage de tension d'entrée.
Conversion Trigger
Le déclenchement de la conversion de l'ADC peut se faire de différentes manières :
- Software Trigger : Le logiciel déclenche la conversion de l'ADC en envoyant une commande spécifique.
- External Trigger : Une source externe, telle qu'un timer ou un signal GPIO, déclenche la conversion de l'ADC.
Interrupts and DMA
L'ADC peut générer des interruptions ou utiliser le DMA pour transférer les données converties vers la mémoire sans intervention du CPU.
Analog Watchdog
Le périphérique ADC comprend souvent une fonction de surveillance analogique. Cela vous permet de définir des seuils pour surveiller les valeurs converties et déclencher une interruption ou prendre d’autres actions si la valeur convertie tombe en dehors de la plage spécifiée.
Modes de lecture de l'ADC
- Mode Polling : C'est la méthode la plus simple où le microcontrôleur vérifie régulièrement l'état de conversion de l'ADC.
Cette méthode peut consommer beaucoup de ressources CPU si elle n'est pas bien gérée.
- Mode Interruption (Interrupt) : L'ADC génère une interruption lorsque la conversion est terminée.
Le code d'interruption lit alors les données de conversion.
Cette méthode est plus efficace que le mode Polling car elle permet au CPU de faire d'autres tâches pendant que l'ADC effectue la conversion.
- Mode DMA (Direct Memory Access) : Le DMA transfère automatiquement les données de conversion de l'ADC directement vers une zone de mémoire sans intervention du CPU.
C'est la méthode la plus efficace car elle libère le CPU pour d'autres tâches pendant que les données sont transférées.
l'ADC en Single Channel
Activer l'ADC en Mode Polling
Avant de pouvoir lire une valeur analogique, il faut activer l'ADC. Pour cela, il faut :
- On ouvre le fichier .ioc
- Dans la fenêtre Pinout & Configuration, on clique sur Analog
- On sélectionne ADC
- On sélectionne le Channel (IN0, IN1, etc...)
- Dans l'onglet Paramters Settings, on peut modifier les paramètres de l'ADC (résolution, fréquence, etc...), on laisse tel quel pour le moment

Ensuite :
- va dans l'onglet GPIO Settings
- On repère la broche en entrée analogique utilisée (PA0, PA1, etc...) et la correspondance sur la carte STM32 puis on y branche notre thermistance ou autre
- On génère le code
- On ouvre le fichier main.c

Lire une valeur analogique en mode Polling
J'ai branché un module température avec thermistance sur la broche PA0. On va lire la valeur analogique de la température avec le mode Polling.
On va donc modifier le fichier main.c pour lire sur l'ADC en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Include et USER CODE END Include.
On ajoute la ligne ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PFP et USER CODE END PFP.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN WHILE et USER CODE END WHILE.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.
Maintenant, on peut compiler et téléverser le code sur la carte STM32. On peut lire la valeur analogique sur le terminal série.

Activer l'ADC en Mode Interruption
Pour rappel, le mode interruption permet au microcontrôleur de continuer à exécuter d'autres tâches pendant que l'ADC effectue la conversion. Lorsque la conversion est terminée, l'ADC génère une interruption pour informer le microcontrôleur que la valeur analogique est prête à être lue.
On va activer l'ADC en mode interruption pour lire une valeur analogique. Pour cela, on va modifier le fichier .ioc et activer l'ADC en mode interruption.
- On ouvre le fichier .ioc
- Dans la fenêtre Pinout & Configuration, Analog, on sélectionne ADC et on active un channel
- Dans l'onglet NVIC Settings, on active ADC Globale Interrupt
- On génère le code

Lire une valeur analogique en mode Interruption
On va modifier le fichier main.c pour lire sur l'ADC par interruption, on reprent les mêmes étapes que pour le mode polling.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Include et USER CODE END Include.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PFP et USER CODE END PFP uniquement si vous avez besoin de la fonction thermistance.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END WHILE.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.
Maintenant, on peut compiler et téléverser le code sur la carte STM32. On peut lire la valeur analogique sur le terminal série.

Activer l'ADC en Mode DMA
On va partir du programme précédent et sa Configuration
Le mode DMA (Direct Memory Access) est une méthode utilisée dans les microcontrôleurs pour transférer des données directement entre la mémoire et les périphériques (comme les ADC, UART, etc.) sans intervention du processeur (CPU).
Cela permet d'améliorer l'efficacité et de réduire la charge de travail du CPU, car il peut continuer à exécuter d'autres tâches pendant le transfert de données.
On va activer l'ADC en mode DMA pour lire une valeur analogique. Pour cela, on va modifier le fichier .ioc et activer l'ADC en mode DMA.
- On ouvre le fichier .ioc
- Dans la fenêtre Pinout & Configuration
- Dans l'onglet Analog
- On sélectionne ADC
- On active un channel
- Dans l'onglet DMA Settings
- On click sur Add
- Et on sélectionne ADC

Ensuite, on génère le code.

Lire une valeur analogique en mode DMA
On va modifier le fichier main.c pour lire sur l'ADC par DMA.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Include et USER CODE END Include.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PFP et USER CODE END PFP uniquement si vous avez besoin de la fonction thermistance.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END WHILE.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.
Maintenant, on peut compiler et téléverser le code sur la carte STM32. On peut lire la valeur analogique sur le terminal série.

Activer l'ADC en mode DMA + Timer
On va commencer par paramétrer un timer, cela se passe dans le fichier .ioc :
- On ouvre le fichier .ioc
- Dans la fenêtre Pinout & Configuration
- Dans l'onglet Timers
- On sélectionne un Timer (TIM2, TIM3, etc...)
- On active l'horloge interne
- Dans l'onglet Parameter Settings
- On modifie le prescaler et la période (ARR)
- On active modifie le TRGO en Update Event

Pour le prescaler et la période (ARR) on les choisie en fonction de la fréquence d’interruption désiré, ici on aura une interruption toutes les secondes pour une horloge système de 32MHz.
J'explique dans Faire clignoter une LED avec une interruption les calculs pour trouver la bon couple.
Le paramètre TRGO (Timer Reset Generation) est une fonctionnalité des microcontrôleurs STM32 qui permet de générer un signal de sortie à partir d'un timer.
Ce signal peut être utilisé pour :
- Synchronisation : Synchroniser plusieurs timers entre eux.
- Déclenchement : Déclencher des conversions ADC (Analog-to-Digital Converter) ou DAC (Digital-to-Analog Converter).
- Génération de PWM : Générer des signaux PWM (Pulse Width Modulation) pour contrôler des moteurs ou d'autres dispositifs.
Ensuite, dans l'onglet NVIC Settings, on active TIMx Global Interrupt pour activer les interruptions du timer.

Voila pour le Timer, maintenant on va configurer l'ADC.
- Dans l'onglet Analog.
- On sélectionne un ADC.
- On active un channel (en mode Single-Ended (Entrée Simple) si le choix est proposé).
- Dans l'onglet DMA Settings.
- On click sur Add.
- Et on sélectionne ADC on choisi le channel DMA correspondant à celui de l'ADC, si il n'y a pas de DMA sur le channel ADC on change de channel ADC pour avoir l'option DMA.
- On modifie le mode en Circular pour que le DMA transfert les données en boucle.

Ensuite, on génère le code, et on va modifier le fichier main.c pour lire l'ADC par DMA avec un Timer.
Lire une valeur analogique en mode DMA + Timer
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Include et USER CODE END Include.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PD et USER CODE END PD.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On déclare nos fonction avec les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PFP et USER CODE END PFP.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END WHILE.
On ajoute les lignes ci-dessous, nos fonctions, dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.
On peut ajouter une ligne à la fonction de gestion des erreurs pour avoir plus de précision, après USER CODE END 4 entre USER CODE BEGIN Error_Handler_Debug et USER CODE END Error_Handler_Debug.
Maintenant, on peut compiler et téléverser le code sur la carte STM32. On peut voir le résultat sur le terminal série.

l'ADC en multiple channels
Activer l'ADC en Mode Polling
Avant de pouvoir lire plusieurs valeurs analogiques, il faut activer l'ADC. Pour cela :
- On ouvre le fichier .ioc
- Dans la fenêtre Pinout & Configuration.
- on clique sur Analog et on sélectionne ADC
- On sélectionne les Canaux (IN0, IN1, etc...) à utiliser.
- Dans l'onglet Paramters Settings, on va modifier la configuration.

- Dans ADC Settings
- On met Résolution sur 12 bits
- On active le scan mode pour lire plusieurs canaux
- On met End of Conversion Selection sur End of single conversion

- Dans ADC Regular ConversionMode
- On définie le nombre de canaux à lire
- On configure le canal à lire en premier Rank 1 avec sampling time pas trop rapide afin de pouvoir lire chaque canal
- On configure les autres canaux à lire suivant l'ordre désiré

Lire plusieurs valeurs analogiques en mode polling
On va donc modifier le fichier main.c pour lire sur l'ADC en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Include et USER CODE END Include.
On ajoute la ligne ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN WHILE et USER CODE END WHILE.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.
Maintenant, on peut compiler et téléverser le code sur la carte STM32. On peut lire chaque canal sur le terminal série.

Activer l'ADC en Mode Interrupt
Avant de pouvoir lire plusieurs valeurs analogiques, il faut activer l'ADC. Pour cela :
- On ouvre le fichier .ioc
- Dans la fenêtre Pinout & Configuration.
- on clique sur Analog et on sélectionne ADC
- On sélectionne les Canaux (IN0, IN1, etc...) à utiliser.
- Dans l'onglet Paramters Settings, on va modifier la configuration.

- Dans ADC Settings
- On met Résolution sur 12 bits
- On active le scan mode pour lire plusieurs canaux
- On met End of Conversion Selection sur End of single conversion

- Dans ADC Regular ConversionMode
- On définie le nombre de canaux à lire
- On configure le canal à lire en premier Rank 1 avec sampling time pas trop rapide afin de pouvoir lire chaque canal
- On configure les autres canaux à lire suivant l'ordre désiré

- Dans l'onglet Nvic Settings
- On active l'ADC en mode interrupt

Lire plusieurs valeurs analogiques en mode interrupt
On va donc modifier le fichier main.c pour lire sur l'ADC en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Include et USER CODE END Include.
On ajoute la ligne ci-dessous dans l'espace nommé USER CODE BEGIN PD et USER CODE END PD.
On ajoute la ligne ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN WHILE et USER CODE END WHILE.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.
Maintenant, on peut compiler et téléverser le code sur la carte STM32. On peut lire chaque canal sur le terminal série.

Activer l'ADC en Mode DMA
Avant de pouvoir lire plusieurs valeurs analogiques, il faut activer l'ADC. Pour cela :
- On ouvre le fichier .ioc
- Dans la fenêtre Pinout & Configuration.
- on clique sur Analog et on sélectionne ADC
- On sélectionne les Canaux (IN0, IN1, etc...) à utiliser.
- Dans l'onglet Paramters Settings, on va modifier la configuration.

- Dans ADC Settings
- On met Résolution sur 12 bits
- On active le scan mode pour lire plusieurs canaux
- On met End of Conversion Selection sur End of single conversion

- Dans ADC Regular ConversionMode
- On définie le nombre de canaux à lire
- On configure le canal à lire en premier Rank 1 avec sampling time pas trop rapide afin de pouvoir lire chaque canal
- On configure les autres canaux à lire suivant l'ordre désiré

- Dans l'onglet DMA Settings
- On ajoute le mode DMA à l'ADC
- On configure le canal DMA à utiliser
- On laisse le mode en normal

Lire plusieurs valeurs analogiques en mode DMA
On va donc modifier le fichier main.c pour lire sur l'ADC en ajoutant les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Include et USER CODE END Include.
On ajoute la ligne ci-dessous dans l'espace nommé USER CODE BEGIN PD et USER CODE END PD.
On ajoute la ligne ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN WHILE et USER CODE END WHILE.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.
Maintenant, on peut compiler et téléverser le code sur la carte STM32. On peut lire chaque canal sur le terminal série.

Sondes DHT
Les sondes DHT sont des capteurs numériques utilisés pour mesurer la température et l'humidité.

Elles sont couramment utilisées dans divers projets électroniques et applications IoT (Internet des objets) en raison de leur simplicité d'utilisation et de leur faible coût.
Les sondes DHT sont disponibles en plusieurs modèles, notamment le DHT11, le DHT22 et le DHT21. Chacun de ces modèles a ses propres caractéristiques et spécifications.
Sonde DHT11
Précision :
Température :Plage de mesure de 0 à 50°C avec une précision de ±2°C.
Humidité :Plage de mesure de 20 à 90% avec une précision de ±5%.
Interface :
Utilise une interface de communication numérique à un fil (1-Wire).
Alimentation :
Fonctionne avec une tension d'alimentation de 3.3V à 5.5V.
Fréquence de mesure :
Peut effectuer des mesures environ toutes les secondes.

On la branche comme ceci:

On crée un projet STM32CubeIDE et on active les périphériques par défaut.
- On ouvre le fichier .ioc
- Dans l'onglet Pinout & Configuration
- Dans le menu Timer
- On clique sur TIM1
- On change Clock Source en Internal Clock
- Dans l'onglet Parameters Settings
- On change le Prescaler en Votre horloge -1 (ex 80MHz: Prescaler: 79)
- On change le Counter Period en 0xffff -1 (ex 65534)

Maintenant, on génère le code, et on modifie le fichier main.c:
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Includes et USER CODE END Includes.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PD et USER CODE END PD.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 0 et USER CODE END 0.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN WHILE et USER CODE END WHILE.
Et pour finir, on ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4
On compile le code et on télécharge le programme sur la carte.
On ouvre un terminal et on obtient le résultat suivant:

Sonde DHT22
Précision :
Température :Plage de mesure de -40°C à 80°C avec une précision de ±0.5°C.
Humidité :Plage de mesure de 0 à 99.9% avec une précision de ±2% pour des humidités de 20% à 80% et ±3% pour des humidités de 0% à 20% et 80% à 99.9%.
Interface :
Utilise une interface de communication numérique à un fil (1-Wire).
Alimentation :
Fonctionne avec une tension d'alimentation de 3.3V à 5.5V.
Fréquence de mesure :
Peut effectuer des mesures environ toutes les 2 secondes.

On la branche comme ceci:

On crée un projet STM32CubeIDE et on active les périphériques par défaut.
- On ouvre le fichier .ioc
- Dans l'onglet Pinout & Configuration
- Dans le menu Timer
- On clique sur TIM1
- On change Clock Source en Internal Clock
- Dans l'onglet Parameters Settings
- On change le Prescaler en Votre horloge -1 (ex 80MHz: Prescaler: 79)
- On change le Counter Period en 0xffff -1 (ex 65534)

Maintenant, on génère le code, et on modifie le fichier main.c:
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Includes et USER CODE END Includes.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PD et USER CODE END PD.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 0 et USER CODE END 0.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN WHILE et USER CODE END WHILE.
Et pour finir, on ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4
On compile le code et on télécharge le programme sur la carte.
On ouvre un terminal et on obtient le résultat suivant:

Sonde DHT21
Précision :
Température :Plage de mesure de -40°C à 80°C avec une précision de ±0.5°C.
Humidité :Plage de mesure de 0 à 99.9% avec une précision de ±2% pour des humidités de 20% à 80% et ±3% pour des humidités de 0% à 20% et 80% à 99.9%.
Interface :
Utilise une interface de communication numérique à un fil (1-Wire).
Alimentation :
Fonctionne avec une tension d'alimentation de 3.3V à 5.5V.
Fréquence de mesure :
Peut effectuer des mesures environ toutes les 2 secondes.

On la branche comme ceci:

On crée un projet STM32CubeIDE et on active les périphériques par défaut.
- On ouvre le fichier .ioc
- Dans l'onglet Pinout & Configuration
- Dans le menu Timer
- On clique sur TIM1
- On change Clock Source en Internal Clock
- Dans l'onglet Parameters Settings
- On change le Prescaler en Votre horloge -1 (ex 80MHz: Prescaler: 79)
- On change le Counter Period en 0xffff -1 (ex 65534)

Maintenant, on génère le code, et on modifie le fichier main.c:
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Includes et USER CODE END Includes.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PD et USER CODE END PD.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PV et USER CODE END PV.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 0 et USER CODE END 0.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN WHILE et USER CODE END WHILE.
Et pour finir, on ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4
On compile le code et on télécharge le programme sur la carte.
On ouvre un terminal et on obtient le résultat suivant:

Librairie STM32_DHT
On peut aussi utiliser la librairie STM32_DHT qui est une librairie pour les capteurs DHT11, DHT22 et DHT21 faite à partir des programmes précédent.
Pour l'exemple, j'ai branché 3 sondes, 1 dht11, dht22 et dht21 :

On crée un nouveau projet STM32CubeIDE et on active les périphériques par défaut.
- On ouvre le fichier .ioc
- Dans l'onglet Pinout & Configuration
- Dans le menu Timer
- On clique sur TIM1
- On change Clock Source en Internal Clock
- Dans l'onglet Parameters Settings
- On change le Prescaler en Votre horloge -1 (ex 80MHz: Prescaler: 79)
- On change le Counter Period en 0xffff -1 (ex 65534)

Maintenant, on génère le code, et on crée un nouveau header nommé STM32_DHT.h dans le dossier Inc:

On le nomme STM32_DHT.h

Et on y colle ce code :
On crée un 2 ème nouveau header nommé config.h
Et on y colle ce code, puis modifier le suivant vos paramètres (TIM et Driver de la carte utilisée) :
On crée un nouveau fichier source nommé STM32_DHT.c dans le dossier Src:

On le nomme STM32_DHT.c

Et on y colle ce code :
Maintenant, on ca modifier le fichier main.c:
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN Includes et USER CODE END Includes.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 0 et USER CODE END 0.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END 2.
On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN WHILE et USER CODE END WHILE.
Et pour finir, on ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4
On compile le code et on télécharge le programme sur la carte.
On ouvre un terminal et on obtient le résultat suivant:

La librairie est disponible sur mon GitHub:
Pour installer une librairie :
Capteur de Température DS18B20
Le DS18B20 est un thermomètre numérique qui fournit des mesures de température avec une résolution configurable de 9 à 12 bits. Voici un résumé de ses principales caractéristiques et fonctionnalités :
Caractéristiques Clés :
- Interface : Utilise une interface 1-Wire unique, nécessitant seulement une broche pour la communication.
- Alimentation : Peut être alimenté directement par la ligne de données, avec une plage d'alimentation de 3,0V à 5,5V.
- Plage de Température : Mesure des températures de -55°C à +125°C (-67°F à +257°F).
- Précision : Offre une précision de ±0,5°C dans la plage de -10°C à +85°C.
- Résolution : La résolution du thermomètre est programmable de 9 à 12 bits, ce qui permet de choisir entre différentes précisions de mesure.
- Conversion de Température : Convertit la température en un mot numérique de 12 bits en un maximum de 750 ms.
- Alarmes de Température : Permet de définir des seuils d'alarme pour les températures hautes et basses, avec des réglages non volatils.
- Multidrop : Plusieurs capteurs DS18B20 peuvent être connectés sur le même bus 1-Wire, ce qui simplifie les applications de détection de température distribuée.
- Applications : Utilisé dans les contrôles thermostatiques, les systèmes industriels, les produits de consommation, et tout système thermiquement sensible.
Fonctionnement :
- Communication : La communication avec le DS18B20 se fait via un bus 1-Wire, ce qui permet de connecter plusieurs capteurs sur une seule ligne de données.
- Alimentation Parasite : Le capteur peut tirer son alimentation directement de la ligne de données, éliminant le besoin d'une source d'alimentation externe.
- Mémoire : Le DS18B20 dispose d'une mémoire non volatile pour stocker les réglages des alarmes de température et la configuration de la résolution.
Librairie STM32_DS18B20
Cette librairie ne fonctionne qu'avec les microcontrôleurs STM32L4 et STM32F4.
Lien vers la librairie
Annexes
Raccourcis utiles dans STM32CubeIDE
Raccourcis pour le code
- Auto-complétion : Ctrl+Space
- Recherche dans l'espace de travail : Ctrl+H
- Sélectionner des blocs : Alt+Shift+A
- Ouvrir le plan rapide : Ctrl+O
- Ouvrir les ressources : Ctrl+Shift+R
- Ouvrir les éléments : Ctrl+Shift+T
- Commenter/De-commenter : Ctrl+Shift+C
Raccourcis pour le débogage
- Exécuter l'application : Ctrl+F11
- Déboguer l'application : F11
- Étape dans : F5
- Étape sur : F6
- Retour à l'appelant : F7
- Reprendre jusqu'au prochain point d'arrêt : F8
Raccourcis pour la navigation
- Aller à la ligne : Ctrl+L
- Rechercher à l'intérieur du contexte : Ctrl+Alt+I
- Ouvrir le navigateur d'inclusions : Ctrl+Space
- Aller à la définition : Ctrl+Shift+G
Raccourcis pour la mise en forme et la refonte du code
- Indentation de la ligne : Ctrl+I
- Formatage du code sélectionné : Ctrl+Shift+F
- Renommer : Ctrl+Alt+R
Raccourcis pour le contrôle de version
- Commit des ressources : Ctrl+Alt+C
Pinout de la carte STM32L152RE
La carte STM32L152RE est une carte de développement Nucleo-64 de STMicroelectronics. Elle est basée sur le microcontrôleur STM32L152RET6. Elle est équipée d'un débogueur ST-Link/V2-1 et d'un connecteur USB. Elle dispose de 64 broches d'entrées/sorties dont 37 sont utilisables pour les applications.
Les broches de la carte sont réparties en 4 ports : A, B, C et D. Chaque port est composé de 16 broches. Les broches de chaque port sont numérotées de 0 à 15. Les broches de la carte sont numérotées de PA0 à PD15.
Les broches de la carte STM32L152RE sont utilisées pour plusieurs fonctions. Elles peuvent être utilisées comme des entrées/sorties digitales, des entrées analogiques, des entrées/sorties de communication série, etc.
Voici les numéros des broches de la carte STM32L152RE :

Voici le plan de numérotation des broches de gauche de la carte STM32L152RE :

Voici le plan de numérotation des broches de droite de la carte STM32L152RE :


Alimentation de la carte STM32L152RE
La carte STM32L152RE peut être alimentée de deux manières : par le connecteur USB ou par une alimentation externe.
Alimentation par le connecteur USB
Le cavalier JP1 sur la carte STM32L152RE est utilisé pour limiter le courant consommé par la carte lorsqu'elle est alimentée via USB.
- JP1 en position OFF : La carte peut consommer jusqu'à 300 mA de courant via USB.
- JP1 en position ON : La carte est limitée à une consommation de 100 mA via USB.
Pour être alimentée par le connecteur USB le connecteur JP5 doit être positionné sur la position U5V

Alimentation par une alimentation externe
Pour être alimentée par une alimentation externe :
- Le cavalier JP1 doit être en position OFF.
- Le connecteur JP5 doit être positionné sur la position E5V
- Si la tension d'alimentation est de 5 V, on utilise les bornes E5V et GND.
- Si la tension d'alimentation est de 7 V à 12 V, on utilise les bornes Vin et GND.
