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.

image non disponible

Ensuite :

  1. On clique sur Board Selector
  2. On cherche sa carte en tapant le numéro L152 ou autre et on choisit le modèle correspondant
  3. 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)
  4. Puis on clique sur Next
image non disponible

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.

image non disponible

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

image non disponible

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

image non disponible

Activer la prise en compte nombres décimaux

On clique droit sur le Project puis sur Properties.

image non disponible

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

image non disponible

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.

image non disponible

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

image non disponible

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 :

  1. Les bibliothèques :
    /* USER CODE BEGIN Includes */
    Ajouter vos bibliothèques spécifiques ici
    /* USER CODE END Includes */
  2. Les variables globales:
    /* USER CODE BEGIN PV */
    Ajouter vos variables globales ici
    /* USER CODE END PV */
  3. 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 */
  4. 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 */
  5. 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 */
  6. 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 */
  7. 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 */
  8. 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 */
  9. 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 */
  10. 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 :

  1. Ouvrir le fichier .ioc et cliquer sur Connectivity
  2. Choisir l'USART désiré
  3. Cliquer sur parameter setting
  4. Changer la vitesse de transmission
UART

Il faut ensuite :

  1. Cliquer sur GPIO Settings
  2. Repérer ou configurer les broches TX et RX si besoin
  3. Générer le code
UART

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 :

  1. On clique sur Build (le marteau) pour compiler le code
  2. On vérifie qu'il n'y a pas d'erreur dans la console
  3. On clique sur RUN (la flèche verte) pour téléverser le code sur la carte
  4. image non disponible
  5. 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.

image non disponible

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 :

  1. On clique sur le fichier .ioc
  2. On clique sur Pinout & Configuration
  3. On clique sur Timers
  4. On clique sur TIM2
  5. Dans Mode, clock source on choisit Internal Clock
  6. Dans NVIC Settings
  7. On coche Enabled à TIM2 global interrupt
image non disponible

Puis on clique sur Parameter Settings :

  1. Dans Prescaler on met la valeur 31999
  2. Dans Counter Period on met la valeur 999
image non disponible

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

Pour une interruption toute les secondes sur une 80MHz

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 :

  1. On clique sur Build (le marteau) pour compiler le code
  2. On vérifie qu'il n'y a pas d'erreur dans la console
  3. 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).

  1. On clique sur Build (le marteau) pour compiler le code
  2. On vérifie qu'il n'y a pas d'erreur dans la console
  3. 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 :

  1. On clique sur le fichier .ioc
  2. On clique sur System Core et GPIO
  3. On clique sur GPIO dans configuration et on choisit le GPIO mode, le pull-up ou pull-down et un Label
image non disponible
  1. On clique sur NVIC dans configuration et on coche Enabled à EXTI line
image non disponible

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 :

  1. On clique sur Build (le marteau) pour compiler le code
  2. On vérifie qu'il n'y a pas d'erreur dans la console
  3. 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 :

  1. Ouvrir le fichier .ioc
  2. Cliquer sur Connectivity
  3. Choisir l'I2C désiré
  4. Activer le
  5. Vous pouvez modifier les paramètres si nécessaire (vitesse)
image non disponible

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 :

  1. On clique sur Build (le marteau) pour compiler le code
  2. On vérifie qu'il n'y a pas d'erreur dans la console
  3. On clique sur RUN (la flèche verte) pour téléverser le code sur la carte
  4. 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.

image non disponible

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 :

  1. On clique sur Build (le marteau) pour compiler le code
  2. On vérifie qu'il n'y a pas d'erreur dans la console
  3. On clique sur RUN (la flèche verte) pour téléverser le code sur la carte
  4. On devrait voir le texte s'afficher sur l'écran I2C
image non disponible

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.

image non disponible

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.

image non disponible

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.

image non disponible

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.

image non disponible

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

image non disponible

On va ensuite dans :

  1. On va dans C/C++ Build
  2. Puis Settings.
  3. Dans l'onglet Tool Settings
  4. On va dans MCU GCC Linker
  5. Puis Libraries
  6. On click sur Add dans la fenêtre Libraries (-L)
  7. On click sur Workspace
image non disponible

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

image non disponible

On click sur OK :

image non disponible

On doit avoir ceci :

image non disponible

Ensuite :

  1. Toujours dans C/C++ Build
  2. Settings.
  3. Dans l'onglet Tool Settings
  4. On va dans MCU GCC Compiler
  5. Puis Includes paths
  6. On click sur Add dans la fenêtre Include paths (-I)
  7. 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.

  8. On click sur OK
image non disponible

On doit avoir ceci :

image non disponible

Ensuite :

  1. On va dans C/C++ General
  2. Puis Paths and Symbols
  3. Dans l'onglet Source Location
  4. On click sur Add Folder
  5. On ajoute le chemin du dossier de notre librairie STM32_I2C_LCD dans le projet.
  6. On click sur OK

On doit avoir ceci :

image non disponible

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

image non disponible

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

image non disponible

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 :

  1. On clique sur Build (le marteau) pour compiler le code
  2. On vérifie qu'il n'y a pas d'erreur dans la console
  3. On clique sur RUN (la flèche verte) pour téléverser le code sur la carte
  4. On devrait voir le texte s'afficher sur l'écran I2C
image non disponible

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.

image non disponible

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.

image non disponible

On va ajouter le chemin de la librairie au projet, pour cela on click droit sur le projet puis Properties et on va dans :

  1. On va dans C/C++ Build
  2. Puis Settings.
  3. Dans l'onglet Tool Settings
  4. On va dans MCU GCC Linker
  5. Puis Libraries
  6. On click sur Add dans la fenêtre Libraries (-L)
  7. On click sur Workspace
  8. On ajoute le chemin du dossier de notre librairie ssd1306 dans le projet et on click sur OK.
image non disponible

Ensuite :

  1. Toujours dans C/C++ Build
  2. Settings.
  3. Dans l'onglet Tool Settings
  4. On va dans MCU GCC Compiler
  5. Puis Includes paths
  6. On click sur Add dans la fenêtre Include paths (-I)
  7. 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.

  8. On click sur OK
image non disponible

Maintenant :

  1. On va dans C/C++ General
  2. Puis Paths and Symbols
  3. Dans l'onglet Source Location
  4. On click sur Add Folder
  5. On ajoute le chemin du dossier de notre librairie ssd1306 dans le projet.
  6. On click sur OK
  7. On click sur Apply and Close.
image non disponible

Maintenant :

  1. On ouvre le fichier ssd1306_conf_template.h dans le dossier ssd1306 pour adapter la librairie à notre carte.
  2. On modifie en fonction de notre carte la ligne correspondante.
  3. On click sur le fichier ssd1306_conf_template.h et on fait F2 pour le renommer.
  4. On le renomme en ssd1306_conf.h.
  5. On click sur OK pour valider.
image non disponible

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) :

image non disponible

On le nomme logos.h :

image non disponible

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 :

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 :

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

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 :

  1. On ouvre le fichier .ioc
  2. Dans la fenêtre Pinout & Configuration, on clique sur Analog
  3. On sélectionne ADC
  4. On sélectionne le Channel (IN0, IN1, etc...)
  5. 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
image non disponible

Ensuite :

  1. va dans l'onglet GPIO Settings
  2. 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
  3. On génère le code
  4. On ouvre le fichier main.c
image non disponible

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.

La libraire math.h sert à la thermistance , vous pouvez supprimer cette ligne si vous n'en avez pas besoin.

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.

Vous pouvez supprimer le prototype de la fonction thermistance si vous n'en avez pas besoin.

On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN WHILE et USER CODE END WHILE.

Vous pouvez supprimer le printf qui appel la fonction thermistance si vous n'en avez pas besoin.

On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.

Vous pouvez supprimer la fonction thermistance si vous n'en avez pas besoin.

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.

image non disponible

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.

  1. On ouvre le fichier .ioc
  2. Dans la fenêtre Pinout & Configuration, Analog, on sélectionne ADC et on active un channel
  3. Dans l'onglet NVIC Settings, on active ADC Globale Interrupt
  4. On génère le code
image non disponible

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.

La libraire math.h sert à la thermistance , vous pouvez supprimer cette ligne si vous n'en avez pas besoin.

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.

Vous pouvez supprimer le prototype de la fonction thermistance si vous n'en avez pas besoin.

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.

Vous pouvez supprimer la fonction thermistance si vous n'en avez pas besoin.

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.

image non disponible

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.

  1. On ouvre le fichier .ioc
  2. Dans la fenêtre Pinout & Configuration
  3. Dans l'onglet Analog
  4. On sélectionne ADC
  5. On active un channel
  6. Dans l'onglet DMA Settings
  7. On click sur Add
  8. Et on sélectionne ADC
image non disponible

Ensuite, on génère le code.

image non disponible

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.

La libraire math.h sert à la thermistance , vous pouvez supprimer cette ligne si vous n'en avez pas besoin.

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.

Vous pouvez supprimer le prototype de la fonction thermistance si vous n'en avez pas besoin.

On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 2 et USER CODE END WHILE.

Vous pouvez supprimer le printf qui appel la fonction thermistance si vous n'en avez pas besoin.

On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN 4 et USER CODE END 4.

Vous pouvez supprimer la fonction thermistance si vous n'en avez pas besoin.

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.

image non disponible

Activer l'ADC en mode DMA + Timer

On va commencer par paramétrer un timer, cela se passe dans le fichier .ioc :

  1. On ouvre le fichier .ioc
  2. Dans la fenêtre Pinout & Configuration
  3. Dans l'onglet Timers
  4. On sélectionne un Timer (TIM2, TIM3, etc...)
  5. On active l'horloge interne
  6. Dans l'onglet Parameter Settings
  7. On modifie le prescaler et la période (ARR)
  8. On active modifie le TRGO en Update Event
image non disponible

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 :

Ensuite, dans l'onglet NVIC Settings, on active TIMx Global Interrupt pour activer les interruptions du timer.

image non disponible

Voila pour le Timer, maintenant on va configurer l'ADC.

  1. Dans l'onglet Analog.
  2. On sélectionne un ADC.
  3. On active un channel (en mode Single-Ended (Entrée Simple) si le choix est proposé).
  4. Dans l'onglet DMA Settings.
  5. On click sur Add.
  6. 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.
  7. On modifie le mode en Circular pour que le DMA transfert les données en boucle.
image non disponible

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.

La libraire math.h sert à la thermistance , vous pouvez supprimer cette ligne si vous n'en avez pas besoin.

On ajoute les lignes ci-dessous dans l'espace nommé USER CODE BEGIN PD et USER CODE END PD.

Vous pouvez supprimer ce qui concerne la thermistance si vous n'en avez pas besoin.

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.

Vous pouvez supprimer le prototype de la fonction thermistance si vous n'en avez pas besoin.

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.

image non disponible

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 :

  1. On ouvre le fichier .ioc
  2. Dans la fenêtre Pinout & Configuration.
  3. on clique sur Analog et on sélectionne ADC
  4. On sélectionne les Canaux (IN0, IN1, etc...) à utiliser.
  5. Dans l'onglet Paramters Settings, on va modifier la configuration.
image non disponible
  1. Dans ADC Settings
  2. On met Résolution sur 12 bits
  3. On active le scan mode pour lire plusieurs canaux
  4. On met End of Conversion Selection sur End of single conversion
image non disponible
  1. Dans ADC Regular ConversionMode
  2. On définie le nombre de canaux à lire
  3. On configure le canal à lire en premier Rank 1 avec sampling time pas trop rapide afin de pouvoir lire chaque canal
  4. On configure les autres canaux à lire suivant l'ordre désiré
image non disponible

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.

image non disponible

Activer l'ADC en Mode Interrupt

Avant de pouvoir lire plusieurs valeurs analogiques, il faut activer l'ADC. Pour cela :

  1. On ouvre le fichier .ioc
  2. Dans la fenêtre Pinout & Configuration.
  3. on clique sur Analog et on sélectionne ADC
  4. On sélectionne les Canaux (IN0, IN1, etc...) à utiliser.
  5. Dans l'onglet Paramters Settings, on va modifier la configuration.
image non disponible
  1. Dans ADC Settings
  2. On met Résolution sur 12 bits
  3. On active le scan mode pour lire plusieurs canaux
  4. On met End of Conversion Selection sur End of single conversion
image non disponible
  1. Dans ADC Regular ConversionMode
  2. On définie le nombre de canaux à lire
  3. On configure le canal à lire en premier Rank 1 avec sampling time pas trop rapide afin de pouvoir lire chaque canal
  4. On configure les autres canaux à lire suivant l'ordre désiré
image non disponible
  1. Dans l'onglet Nvic Settings
  2. On active l'ADC en mode interrupt
image non disponible

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.

image non disponible

Activer l'ADC en Mode DMA

Avant de pouvoir lire plusieurs valeurs analogiques, il faut activer l'ADC. Pour cela :

  1. On ouvre le fichier .ioc
  2. Dans la fenêtre Pinout & Configuration.
  3. on clique sur Analog et on sélectionne ADC
  4. On sélectionne les Canaux (IN0, IN1, etc...) à utiliser.
  5. Dans l'onglet Paramters Settings, on va modifier la configuration.
image non disponible
  1. Dans ADC Settings
  2. On met Résolution sur 12 bits
  3. On active le scan mode pour lire plusieurs canaux
  4. On met End of Conversion Selection sur End of single conversion
image non disponible
  1. Dans ADC Regular ConversionMode
  2. On définie le nombre de canaux à lire
  3. On configure le canal à lire en premier Rank 1 avec sampling time pas trop rapide afin de pouvoir lire chaque canal
  4. On configure les autres canaux à lire suivant l'ordre désiré
image non disponible
  1. Dans l'onglet DMA Settings
  2. On ajoute le mode DMA à l'ADC
  3. On configure le canal DMA à utiliser
  4. On laisse le mode en normal
image non disponible

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.

image non disponible

Sondes DHT

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

image non disponible

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.

image non disponible

On la branche comme ceci:

image non disponible

On crée un projet STM32CubeIDE et on active les périphériques par défaut.

  1. On ouvre le fichier .ioc
  2. Dans l'onglet Pinout & Configuration
  3. Dans le menu Timer
  4. On clique sur TIM1
  5. On change Clock Source en Internal Clock
  6. Dans l'onglet Parameters Settings
  7. On change le Prescaler en Votre horloge -1 (ex 80MHz: Prescaler: 79)
  8. On change le Counter Period en 0xffff -1 (ex 65534)
image non disponible

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:

image non disponible

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.

image non disponible

On la branche comme ceci:

image non disponible

On crée un projet STM32CubeIDE et on active les périphériques par défaut.

  1. On ouvre le fichier .ioc
  2. Dans l'onglet Pinout & Configuration
  3. Dans le menu Timer
  4. On clique sur TIM1
  5. On change Clock Source en Internal Clock
  6. Dans l'onglet Parameters Settings
  7. On change le Prescaler en Votre horloge -1 (ex 80MHz: Prescaler: 79)
  8. On change le Counter Period en 0xffff -1 (ex 65534)
image non disponible

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:

image non disponible

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.

image non disponible

On la branche comme ceci:

image non disponible

On crée un projet STM32CubeIDE et on active les périphériques par défaut.

  1. On ouvre le fichier .ioc
  2. Dans l'onglet Pinout & Configuration
  3. Dans le menu Timer
  4. On clique sur TIM1
  5. On change Clock Source en Internal Clock
  6. Dans l'onglet Parameters Settings
  7. On change le Prescaler en Votre horloge -1 (ex 80MHz: Prescaler: 79)
  8. On change le Counter Period en 0xffff -1 (ex 65534)
image non disponible

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:

image non disponible

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 :

image non disponible

On crée un nouveau projet STM32CubeIDE et on active les périphériques par défaut.

  1. On ouvre le fichier .ioc
  2. Dans l'onglet Pinout & Configuration
  3. Dans le menu Timer
  4. On clique sur TIM1
  5. On change Clock Source en Internal Clock
  6. Dans l'onglet Parameters Settings
  7. On change le Prescaler en Votre horloge -1 (ex 80MHz: Prescaler: 79)
  8. On change le Counter Period en 0xffff -1 (ex 65534)
image non disponible

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

image non disponible

On le nomme STM32_DHT.h

image non disponible

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:

image non disponible

On le nomme STM32_DHT.c

image non disponible

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:

image non disponible

La librairie est disponible sur mon GitHub:

https://github.com/weedm/STM32_Libraries

Pour installer une librairie :

installer une librairie externe

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 :

Fonctionnement :

Librairie STM32_DS18B20

Cette librairie ne fonctionne qu'avec les microcontrôleurs STM32L4 et STM32F4.

Lien vers la librairie
image non disponible

Annexes

Raccourcis utiles dans STM32CubeIDE

Raccourcis pour le code

Raccourcis pour le débogage

Raccourcis pour la navigation

Raccourcis pour la mise en forme et la refonte du code

Raccourcis pour le contrôle de version

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 :

image non disponible

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

image non disponible

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

image non disponible
image non disponible

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.

Pour être alimentée par le connecteur USB le connecteur JP5 doit être positionné sur la position U5V

image non disponible

Alimentation par une alimentation externe

Pour être alimentée par une alimentation externe :

image non disponible
Image en plein écran