Démarrage rapide STM32. Partie 2 Hello World sur HAL, débogage dans Atollic TrueSTUDIO

La dernière fois que nous avons maîtrisé la création d'un nouveau projet avec STM CubeMX, la première partie se trouve ici.

Pour ceux qui sont trop paresseux pour relire - tout cela s'est terminé par le fait que le projet vide a été assemblé avec succès.



Dans cette partie, nous allons écrire l'exemple Hello World le plus simple sur HAL, voir comment exécuter et utiliser le débogueur, et découvrons la quantité de mémoire consommée par notre programme, qui dans cette partie sera écrite en HAL.

Nous prenons comme base le même projet vide qui a été initialisé dans la dernière partie.

Afin de faire clignoter la LED - nous devons respecter l'algorithme suivant:

  1. Réglez l'état inverse de l'état actuel sur la jambe du microcontrôleur. Autrement dit, il y avait 0 - set 1, il y avait 1 - set 0, et ainsi de suite.
  2. Attendez N pour le nombre de microsecondes et revenez à l'étape 1.

Pour répondre au premier point, nous devons indiquer au compilateur à quelle broche et à quel port la LED est connectée et quelle fonction inverser son état.

Nous trouvons d'abord où nous avons connecté la LED.

Dans le fichier main.c, juste après les commentaires d'introduction que la société ST nous a aimablement écrit, il y a une ligne pour connecter le fichier d'en-tête main.h



Faites un clic droit sur cette ligne et recherchez l'élément Déclaration ouverte



En cliquant dessus, nous passerons au fichier main.h

Où trouver nos noms de broches et de ports déclarés.



Rappelez-vous, dans la première partie, lors de l'initialisation de la sortie de la LED PC13, nous avons rempli le champ User Label et y avons entré CLOCK_LED?

Lors de la génération du projet, STM32CubeMX a pris en compte nos souhaits et maintenant, au lieu des GPIO_PIN_13 et GPIOC abstraits, nous pouvons accéder à nos LED via les CLOCK_LED_Pin et CLOCK_LED_GPIO_Port plus intelligibles.

Avec cela - ce que nous allons gérer - compris.

Maintenant, nous recherchons une fonction qui peut changer l'état de notre GPIO en sens inverse.
Pour ce faire, dans l'arborescence du projet sur le côté gauche de l'écran - recherchez le fichier:

Drivers -> STM32F1xx_HAL_Driver -> Inc -> stm32f1xx_hal_gpio.h 

Il a beaucoup de choses, mais nous avons besoin de descriptions des fonctions qui vont dans le bloc / * Fonctions exportées * /

Trouvez la fonction là

 void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 

C'est exactement ce dont nous avons besoin.



Pour que la LED clignote constamment, il est nécessaire de placer l'appel de notre fonction en principal dans le corps de la boucle de programme principale.

Et pour faire la distinction entre les clignotements - ajoutez ensuite un délai à l'aide de la fonction HAL_Delay (500);

Dans ce cas, le retard sera de 500 ms.



Soit dit en passant, la fonction HAL_Delay est également décrite dans

 Drivers -> STM32F1xx_HAL_Driver -> Inc 

uniquement dans le fichier stm32f1xx_hal.h
Autrement dit, pour faire clignoter une LED - nous avions besoin d'écrire seulement 2 lignes de code.
Si nous avons tout fait correctement, vous pouvez essayer d'exécuter le débogueur et voir comment le programme s'exécute.





Vous pouvez naviguer dans le code du programme à l'aide des touches F5 et F6
Dans le même temps, le bouton F6 ne marche que sur les appels de fonction, et le bouton F5 vous permet d'entrer dans la fonction appelée et de voir ce qui se passe à l'intérieur.



La seule chose si vous ne voulez pas attraper de problèmes pendant le débogage est que je vous conseille de désactiver l'optimisation. Cela se fait via le menu Projet -> Propriétés

La valeur du niveau d'optimisation doit être définie sur Aucune (-O0)



Après avoir arrêté le débogage, le contrôleur redémarre à nouveau le code et l'exécute de manière cyclique.

Le résultat devrait être quelque chose comme ça.



Pour résumer


L'utilisation de HAL nous a permis d'implémenter cette tâche en écrivant seulement 2 lignes de code.

Mais pour simplifier le travail il fallait payer avec mémoire



1,54 Ko de RAM et 4,69 Ko de mémoire flash.

Permettez-moi de vous rappeler que l'optimisation est désactivée, c'est-à-dire «-O0»

Est-ce beaucoup ou peu?

Cette question ne peut être répondue avec confiance que dans les parties suivantes de l'article.

L'article d'origine est toujours sur mon blog .

Source: https://habr.com/ru/post/fr481436/


All Articles