1 - Premier programme “blinky” : Différence entre versions

De Wiki L.A.B
Aller à : navigation, rechercher
(Premier programme “blinky”)
(Rajout d'une LED externe)
 
(17 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 76 : Ligne 76 :
 
=== B. Utilisation de la carte NUCLEO-L476 ===
 
=== B. Utilisation de la carte NUCLEO-L476 ===
 
<br>
 
<br>
[[Fichier:Nucleo32.png|center|]]
+
[[Fichier:NUCLEO476.jpg|center|]]
  
 
==== Création du projet avec STM32CubeMx ====
 
==== Création du projet avec STM32CubeMx ====
Ligne 83 : Ligne 83 :
 
Il faut exécuter “New Project”. <br>
 
Il faut exécuter “New Project”. <br>
 
Dans la fenêtre ouverte, il faut choisir l’onglet “Board Selector”. <br>
 
Dans la fenêtre ouverte, il faut choisir l’onglet “Board Selector”. <br>
Le “Type of Board” et “MCU Series” doivent correspondre à la carte connectée. <br> Dans notre exemple, on choisira “Type of Board” : Nucleo32 (le nombre de cartes listées n'étant pas très grand, il ne sera pas nécessaire de préciser “MCU Series”)<br>
+
Le “Type of Board” et “MCU Series” doivent correspondre à la carte connectée. <br> Dans notre exemple, on choisira “Type of Board” : Nucleo64 (le nombre de cartes listées n'étant pas très grand, il ne sera pas nécessaire de préciser “MCU Series”)<br>
Dans le champs “Boards List:”, on choisit la carte connectée en double cliquant. Dans notre exemple : “Nucleo32” de référence “NUCLEO-F303K8” <br>
+
Dans le champs “Boards List:”, on choisit la carte connectée en double cliquant. Dans notre exemple : “Nucleo64” de référence “NUCLEO-L476RG” <br>
 +
 
 +
Sur cette carte, une LED est connectée sur la broche “PA5” (appellation de STM32) correspondant à la broche D13 du connecteur arduino.<br>
 +
L'affectation de cette broche est donc déjà faite : dans l'onglet "Pinout" la broche est verte et l'indication " LD2 green Led" est présente.
  
Sur cette carte, une LED est connectée sur la broche “PB3” (appellation de STM32) correspondant à la broche D13 du connecteur arduino.<br>
 
  
Dans l’onglet “Pinout”, il faut cliquer dans le dessin du chip sur la broche “PB3”. Dans le menu, il faut sélectionner “GPIO_Output”. La broche change alors de couleur en devenant verte.<br>
 
 
<br>
 
<br>
[[Fichier:STM32CubeMX.PNG]]
+
[[Fichier:CONFIG-MX-476-LED.jpg]]
 
<br>
 
<br>
 
<br>
 
<br>
Ligne 104 : Ligne 105 :
 
Par le menu “Project” -> “Generate Code…”, on peut générer automatiquement le code de base.<br>
 
Par le menu “Project” -> “Generate Code…”, on peut générer automatiquement le code de base.<br>
 
Dans la boîte de dialogue “Code Generation”, on faut cliquer sur “Open Project” pour visualiser le code dans eclipse.<br>
 
Dans la boîte de dialogue “Code Generation”, on faut cliquer sur “Open Project” pour visualiser le code dans eclipse.<br>
 +
 
==== Développement du code source dans eclipse ====
 
==== Développement du code source dans eclipse ====
 
Le projet “Blinky” contient les répertoires :
 
Le projet “Blinky” contient les répertoires :
Ligne 113 : Ligne 115 :
 
<br>
 
<br>
 
Dans la fonction “void main(void)”, on trouve trois appels de fonction “HAL_Init()”, “SystemClock_Config()” et “MX_GPIO_Init()” nécessaires pour l’initialisation du système.<br>  
 
Dans la fonction “void main(void)”, on trouve trois appels de fonction “HAL_Init()”, “SystemClock_Config()” et “MX_GPIO_Init()” nécessaires pour l’initialisation du système.<br>  
Ensuite, il y a une boucle infinie, dans laquelle on peut ajouter son propre code, par exemple : <br>  
+
Ensuite, il y a une boucle infinie, dans laquelle on peut ajouter son propre code, à la suite du commentaire /* USER CODE BEGIN 3 */ :  par exemple : <br>  
  
 
<syntaxhighlight lang="cpp" enclose="div">
 
<syntaxhighlight lang="cpp" enclose="div">
 
while (1)
 
while (1)
 
{
 
{
   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, 1 );  // LED on PB3 ON
+
   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1 );  // LED on PA5 ON
 
   HAL_Delay(500);                            // wait 500 milli seconds
 
   HAL_Delay(500);                            // wait 500 milli seconds
   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, 0 );  // LED on PB3 OFF
+
   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 0 );  // LED on PA5 OFF
 
   HAL_Delay(500);                            // wait 500 milli seconds
 
   HAL_Delay(500);                            // wait 500 milli seconds
 
}
 
}
Ligne 128 : Ligne 130 :
 
Pour compiler le projet, il faut aller dans le menu “Project” -> “Build Project”.<br>
 
Pour compiler le projet, il faut aller dans le menu “Project” -> “Build Project”.<br>
 
Eclipse va utiliser la toolchain “GNU Tools ARM Embedded” pour la compilation.
 
Eclipse va utiliser la toolchain “GNU Tools ARM Embedded” pour la compilation.
 +
<br>
 +
Si tout se passe bien le message "Build Finished" s'affichera dans la console.
 +
 
==== Débogage ====
 
==== Débogage ====
 
Pour déboguer le projet; il faut aller dans le menu “Run” -> “Debug”.<br>  
 
Pour déboguer le projet; il faut aller dans le menu “Run” -> “Debug”.<br>  
Ligne 136 : Ligne 141 :
  
 
==== Rajout d'une LED externe ====
 
==== Rajout d'une LED externe ====
On peut facilement rajouter une LED externe en montant la carte nucleo32 F303K8 sur une plaque d'essai (breadbord)et en branchant l'anode (broche la plus longue) d'une LED sur la broche D13 et sa cathode à une résistance d'environ 220 Ohms reliées au 0V (GND).
+
On peut facilement rajouter une LED externe montée sur une plaque d'essai (breadbord) et reliée à la carte nucleo64 L476RG.
 +
En branchant l'anode (broche la plus longue) d'une LED sur la broche correspondante (par exemple PA7) et sa cathode à une résistance d'environ 220 Ohms reliées au 0V (GND). <br>
 +
 
 +
Il faudra alors modifier la configuration de la broche PA7 dans STM32CubeMx.
 
<br>
 
<br>
 +
Puis modifier le code dans main.c avec eclipse :
 +
<syntaxhighlight lang="cpp" enclose="div">
 +
while (1)
 +
{
 +
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, 1 );  // LED on PA7 ON
 +
  HAL_Delay(500);                            // wait 500 milli seconds
 +
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, 0 );  // LED on PA7 OFF
 +
  HAL_Delay(500);                            // wait 500 milli seconds
 +
}
 +
</syntaxhighlight>
 +
 
<br>
 
<br>
[[Fichier:Blinky_LED_ext.jpg|sans_cadre|Nucleo32 Blinky avec LED externe|600px]]
+
 
  
 
<br>
 
<br>

Version actuelle en date du 21 janvier 2018 à 11:58

Premier programme “blinky”

Ce tout premier programme va nous permettre de valider l'installation de l'environnement de développement SW4STM32.
Dans notre exemple nous allons tout d'abord utiliser la carte “Nucleo32” de référence “NUCLEO-F303K8”.
Puis dans un second temps nous utiliserons une carte “Nucleo64” de référence "NUCLEO-L476".

A. Utilisation de la carte NUCLEO-F303K8


Nucleo32.png

Création du projet avec STM32CubeMx

On va utiliser “STM32CubeMx” pour générer la trame du code source :
Après avoir ouvert “STM32CubeMx”. Il faut exécuter “New Project”.
Dans la fenêtre ouverte, il faut choisir l’onglet “Board Selector”.
Le “Type of Board” et “MCU Series” doivent correspondre à la carte connectée.
Dans notre exemple, on choisira “Type of Board” : Nucleo32 (le nombre de cartes listées n'étant pas très grand, il ne sera pas nécessaire de préciser “MCU Series”)
Dans le champs “Boards List:”, on choisit la carte connectée en double cliquant. Dans notre exemple : “Nucleo32” de référence “NUCLEO-F303K8”

Sur cette carte, une LED est connectée sur la broche “PB3” (appellation de STM32) correspondant à la broche D13 du connecteur arduino.

Dans l’onglet “Pinout”, il faut cliquer dans le dessin du chip sur la broche “PB3”. Dans le menu, il faut sélectionner “GPIO_Output”. La broche change alors de couleur en devenant verte.

STM32CubeMX.PNG

Dans le menu “Project” -> “Settings…”, on ouvre la boîte de dialogue “Project Settings”

  • On saisi un nom de projet (“Project Name”) et le répertoire (“Project Location”).
  • Avec le bouton “Browse”, on choisit le répertoire “workspace”, qu’on avait spécifié lors de l'installation d'eclipse.
  • Dans la liste “Toolchain / IDE” il faut choisir le “SW4STM32” (très important!!!).
  • On ferme le dialogue par “OK”.


Lors de la première utilisation de STM32CubeMx, toutes les sources des firmware packages ne sont pas encore installées.
Il nous est proposé de les télécharger depuis le site st.com.
Par le menu “Project” -> “Generate Code…”, on peut générer automatiquement le code de base.
Dans la boîte de dialogue “Code Generation”, on faut cliquer sur “Open Project” pour visualiser le code dans eclipse.

Développement du code source dans eclipse

Le projet “Blinky” contient les répertoires :

  • “Drivers”,
  • “Inc”,
  • “Src”
  • “startup”.

Il faut ouvrir “main.c” du répertoire “Src”.

Dans la fonction “void main(void)”, on trouve trois appels de fonction “HAL_Init()”, “SystemClock_Config()” et “MX_GPIO_Init()” nécessaires pour l’initialisation du système.
Ensuite, il y a une boucle infinie, dans laquelle on peut ajouter son propre code, par exemple :

while (1)
{
   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, 1 );   // LED on PB3 ON
   HAL_Delay(500);                             // wait 500 milli seconds
   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, 0 );   // LED on PB3 OFF
   HAL_Delay(500);                             // wait 500 milli seconds
}

Compilation

Pour compiler le projet, il faut aller dans le menu “Project” -> “Build Project”.
Eclipse va utiliser la toolchain “GNU Tools ARM Embedded” pour la compilation.

Débogage

Pour déboguer le projet; il faut aller dans le menu “Run” -> “Debug”.
Dans la boîte de dialogue “Debug As” il faut choisir “Ac6 STM32 C/C++ Application”.
Eclipse va utiliser OpenOCD et STLink pour communiquer avec le microcontrôleur.
Avec les fonctionnalités de debug, on peut avancer pas à pas dans le code et voir la LED s’allumer et s'éteindre.
“Resume (F8)” va exécuter le code sans intervention supplémentaire de l’IDE et donc la LED va clignoter...

Rajout d'une LED externe

On peut facilement rajouter une LED externe en montant la carte nucleo32 F303K8 sur une plaque d'essai (breadbord)et en branchant l'anode (broche la plus longue) d'une LED sur la broche D13 et sa cathode à une résistance d'environ 220 Ohms reliées au 0V (GND).

Nucleo32 Blinky avec LED externe





B. Utilisation de la carte NUCLEO-L476


NUCLEO476.jpg

Création du projet avec STM32CubeMx

On va utiliser “STM32CubeMx” pour générer la trame du code source :
Après avoir ouvert “STM32CubeMx”. Il faut exécuter “New Project”.
Dans la fenêtre ouverte, il faut choisir l’onglet “Board Selector”.
Le “Type of Board” et “MCU Series” doivent correspondre à la carte connectée.
Dans notre exemple, on choisira “Type of Board” : Nucleo64 (le nombre de cartes listées n'étant pas très grand, il ne sera pas nécessaire de préciser “MCU Series”)
Dans le champs “Boards List:”, on choisit la carte connectée en double cliquant. Dans notre exemple : “Nucleo64” de référence “NUCLEO-L476RG”

Sur cette carte, une LED est connectée sur la broche “PA5” (appellation de STM32) correspondant à la broche D13 du connecteur arduino.
L'affectation de cette broche est donc déjà faite : dans l'onglet "Pinout" la broche est verte et l'indication " LD2 green Led" est présente.



CONFIG-MX-476-LED.jpg

Dans le menu “Project” -> “Settings…”, on ouvre la boîte de dialogue “Project Settings”

  • On saisi un nom de projet (“Project Name”) et le répertoire (“Project Location”).
  • Avec le bouton “Browse”, on choisit le répertoire “workspace”, qu’on avait spécifié lors de l'installation d'eclipse.
  • Dans la liste “Toolchain / IDE” il faut choisir le “SW4STM32” (très important!!!).
  • On ferme le dialogue par “OK”.


Lors de la première utilisation de STM32CubeMx, toutes les sources des firmware packages ne sont pas encore installées.
Il nous est proposé de les télécharger depuis le site st.com.
Par le menu “Project” -> “Generate Code…”, on peut générer automatiquement le code de base.
Dans la boîte de dialogue “Code Generation”, on faut cliquer sur “Open Project” pour visualiser le code dans eclipse.

Développement du code source dans eclipse

Le projet “Blinky” contient les répertoires :

  • “Drivers”,
  • “Inc”,
  • “Src”
  • “startup”.

Il faut ouvrir “main.c” du répertoire “Src”.

Dans la fonction “void main(void)”, on trouve trois appels de fonction “HAL_Init()”, “SystemClock_Config()” et “MX_GPIO_Init()” nécessaires pour l’initialisation du système.
Ensuite, il y a une boucle infinie, dans laquelle on peut ajouter son propre code, à la suite du commentaire /* USER CODE BEGIN 3 */ : par exemple :

while (1)
{
   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 1 );   // LED on PA5 ON
   HAL_Delay(500);                             // wait 500 milli seconds
   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, 0 );   // LED on PA5 OFF
   HAL_Delay(500);                             // wait 500 milli seconds
}

Compilation

Pour compiler le projet, il faut aller dans le menu “Project” -> “Build Project”.
Eclipse va utiliser la toolchain “GNU Tools ARM Embedded” pour la compilation.
Si tout se passe bien le message "Build Finished" s'affichera dans la console.

Débogage

Pour déboguer le projet; il faut aller dans le menu “Run” -> “Debug”.
Dans la boîte de dialogue “Debug As” il faut choisir “Ac6 STM32 C/C++ Application”.
Eclipse va utiliser OpenOCD et STLink pour communiquer avec le microcontrôleur.
Avec les fonctionnalités de debug, on peut avancer pas à pas dans le code et voir la LED s’allumer et s'éteindre.
“Resume (F8)” va exécuter le code sans intervention supplémentaire de l’IDE et donc la LED va clignoter...

Rajout d'une LED externe

On peut facilement rajouter une LED externe montée sur une plaque d'essai (breadbord) et reliée à la carte nucleo64 L476RG. En branchant l'anode (broche la plus longue) d'une LED sur la broche correspondante (par exemple PA7) et sa cathode à une résistance d'environ 220 Ohms reliées au 0V (GND).

Il faudra alors modifier la configuration de la broche PA7 dans STM32CubeMx.
Puis modifier le code dans main.c avec eclipse :

while (1)
{
   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, 1 );   // LED on PA7 ON
   HAL_Delay(500);                             // wait 500 milli seconds
   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, 0 );   // LED on PA7 OFF
   HAL_Delay(500);                             // wait 500 milli seconds
}