• 30 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 1/29/24

Configurez une cible, compilez votre programme et exécutez-le

Dans ce chapitre, vous allez apprendre les bases pour utiliser µVision. Vous commencerez par configurer un nouveau projet puis vous écrirez quelques lignes d'un programme avant de le compiler et de l'exécuter. Vous verrez comme réaliser cette exécution en simulation, c’est-à-dire en exécutant le programme sur votre machine en simulant l’architecture du microcontrôleur STM32, mais aussi sur la cible réelle, c’est-à-dire directement sur la carte NUCLEO.

Configurer votre projet

Démarrez le programme Keil µVision.

Pour se lancer dans l'écriture de code sous µVision, la première chose à faire est de créer un projet et de le configurer.

Écrire et compiler votre premier code

Une fois le projet construit, il s'agit maintenant d'y ajouter vos premières lignes de code puis de les compiler. Vous allez simplement écrire une procédure main et réalisez le « Hello World » du programmeur de carte en faisant clignoter une LED. Pour cela, copiez simplement le code ci-dessous (vous verrez les détails dans la suite du cours).

#include "STM32f10x.h"
int main (void) 
{
    RCC->APB2ENR |=  RCC_APB2ENR_IOPAEN ;
    GPIOA->CRL = GPIOA->CRL & ~(0xF << 4*5); 
    GPIOA->CRL = GPIOA->CRL | (0x01 << 4*5);
    while(1) 
    { 
        GPIOA->ODR ^= (1 << 5);
    } 
    return 0; 
} 

Simuler le programme

Vous avez réussi à compiler votre premier programme, maintenant vous allez l'exécuter. Avant de le faire sur une cible réelle, vous le ferez en mode simulé. Cela est très pratique pour déboguer et mettre au point vos applications car vous pourrez contrôler l'avancement du système.

Vous verrez ainsi un outil indispensable pour le débogage : l'exécution du programme pas à pas afin de bien observer le comportement du système et ainsi trouver une éventuelle source de bug. Avec µVision vous allez voir que plusieurs moyens s'offrent à vous pour réaliser cela. 

Remarquez que vous pourrez faire exactement les mêmes manipulations sur la cible réelle et donc "geler" le système pour en observer son état. La grande différence avec l'exécution en mode simulé est que le temps physique ne peut pas être arrêté. Certains périphériques pourront aussi continuer à évoluer alors que la CPU (Central Processing Unit, le processeur) a été figée. Il devient complexe d’observer certains effets liés au déroulement continu du temps (synchronisation par exemple).

Pour exécuter le programme en simulation, allez dans configuration du projet Options for target (), onglet Debug  et assurez-vous que l'option Use Simulator est bien cochée. 

Il suffit ensuite de lancer la session de debug ().

 Si vous avez une erreur lors du lancement du simulateur, ou si lors de la simulation vous avez des message d'erreur de type Access violation, allez  dans la configuration du projet (), onglet Debug. Vérifiez que dans la partie à gauche  qui sert pour la simulation, vous avez bien les valeurs suivantes pour :

  • CPU DLL : SARMCM3.DLL

  • Dialog DLL : DARMSTM.DLL Parameter : -pSTM32F103RB

Si vous avez bien tout installé, et en particulier le MDK v4 Legacy Support for ARM Cortex-M devices, vous devriez avoir ces options automatiquement. Sinon écrivez ce valeurs dans les champs (voir capture d’écran ci-dessous).

La partie droite sert pour l'exécution sur cible réelle et vous aurez besoin des valeurs suivantes :

  • Driver DLL : SARMCM3.DLL

  • Dialog DLL : TARMSTM.DLL Parameter : -pSTM32F103RB

L'onglet Debug
L'onglet Debug

Une fois le debug lancé, vous pouvez exécuter le code avec le bouton Run () et l'arrêter avec le bouton Stop (). Si vous voulez ré-initialiser le système comme lors d’un redémarrage, vous pouvez utiliser le bouton Reset ().

Le contrôle de l’exécution en pas à pas se fait à l’aide des boutons Step (), Step Over () et Step Out (). Le bouton Step permet d’avancer d’une instruction, le bouton Step Over évite d’entrer dans une fonction et Step Out va à l’instruction suivant la sortie d’une fonction. Le bouton Run to the cursor line () permet, comme son nom l’indique, de provoquer l’exécution jusqu’à atteindre la ligne de code sélectionné.

L’ajout d’un point d’arrêt se fait soit en double cliquant à droite de la ligne où l’on souhaite déposer le point d’arrêt, soit en cliquant sur le bouton Insert/Remove Breakpoint (). En utilisant le bouton Run (), l’exécution avance jusqu’au prochain point d’arrêt.

Exécuter le programme sur une cible

Si vous avez fait l'acquisition d'une carte Nucleo-F103RB, vous pouvez  exécuter votre code dessus. Pour cela, il vous faut définir les paramètres de la cible avant de charger le code dessus.

Vérifiez que les DLL sont définies correctement (voir la section précédente).

  • Pour charger le code sur le carte, il suffit de cliquer sur Download ().

  • Pour exécuter le code, il faut lancer la session de debug () et faire la même chose qu'en simulé.

Remarquez que si vous lancez directement le debug, le chargement du code se fait automatiquement sans avoir besoin de passer par l'étape Download  (). 

Si vous avez un message de type "Error: Flash Download failed", allez dans les options du projet () puis dans l'onglet Debug. Dans la partie droite droite qui sert pour l'exécution sur cible réelle, cliquez sur Settings, onglet Flash Download et cliquez sur Add et choisissez l'algorithme STM32F10x Med-density Flash. Si tout s'est bien passé vous devriez voir l'algorithme dans la liste des Programming Algorithm de la fenêtre Cortex-M Target Driver Setup

L'algorithme
Installer l'algorithme STM32F10x Med-density Flash

Si la LED nommée LD2 sous les boutons poussoirs s'est allumée, c'est que vous êtes prêt pour la suite ! Si vous ne l'avez pas fait clignoter pas à pas, c'est que vous êtes allé trop vite...

  

Vous avez vu dans ce chapitre comment :

  • configurer un projet pour programmer sur un STM32F103RB ;

  • compiler et exécuter un programme en simulation, voire en réel ;

  • pris en main quelques outils de débogage, en particulier l’exécution pas à pas.

Mais, avant d’entrer plus en profondeur dans la programmation, il reste encore quelques outils disponibles avec µVision à prendre en main.

Example of certificate of achievement
Example of certificate of achievement