Travaux Pratiques
I- INTRODUCTION
Fonctionnement
du système Programme
1- Les cartes NUCLEO F103 (à base de microcontrôleurs STM32F103RB) : qui possèdent des
connecteurs compatibles avec les cartes d’extension pour arduino. On trouve :
- Une LED reliée au pin PA5
- Un Bouton poussoir relié au pin PC13
- Un adaptateur de communication USB/série UART
E. DAMERGI
2I INSAT2019
Programmation des SOCs RT4/IIA4
E. DAMERGI
4I INSAT2019
Programmation des SOCs RT4/IIA4
On trouve :
- 4 Leds reliées aux pins PD12,13,14 et 15.
- Un bouton poussoir relié au pin PA0
- Un axeléromètre 3 axes relié au périphérique SPI.
- Un microphone.
- Un DAC 24 bits (Digital ANalog Converter) pour générer des signaux analogiques
audio.
- Un jack Audio.
1- Commencer par ouvrir le projet contenant la manip i, i étant le numéro de la manip. Son
chemin est : « Projets / manipi / manipi.uvprojx »
3- Une fois le code terminé, le compiler avec l’outil IAR pour générer l’exécutable en utilisant
la commande Project>>Rebuild All (voir figure ci-dessous).
Si tout se passe bien, on doit obtenir l’affichage suivant au niveau de la fenêtre « Messages » en
bas de l’IDE de l’outil IAR. Sinon, des messages d’erreurs seront affichés.
E. DAMERGI
6I INSAT2019
Programmation des SOCs RT4/IIA4
Rq : Il est possible qu’un programme ne fonctionne pas comme prévu (même si la compilation
est réussie). Dans ce cas, il est possible de trouver les erreurs en procédant au débogage du
programme : il s’agit de l’exécuter pas à pas ou en insérant des breakpoints. A chaque arrêt du
programme, il est possible de consulter les contenus des registres du microcontrôleur ainsi que les
valeurs des variables utilisées et de vérifier s’ils correspondent au fonctionnement désiré.
L’objectif est la familiarisation avec l’environnement de développement intégré Keil ainsi que
le principe de fonctionnement et de programmation des interfaces de périphériques par accès direct
aux registres.
On veut développer un programme ‘C’ qui permet de faire clignoter le(s) Led(s) de la carte à base du
microcontrôleur STM32.
Trouver les adresses des registres des ports auxquels sont connectées les Leds ainsi que les
positions des bits qui permettent de contrôler les pins. (consulter le STM32F4 Reference
manual.pdf).
compiler le programme et le charger dans la carte afin de l’exécuter et tester son bon
fonctionnement (voir parag II : Utilisation de l’IDE Keil)
On veut développer un programme en ‘C’ en utilisant l’accès direct aux registres et qui permet
d’allumer les Leds quand on appuie sur le bouton poussoir et de les éteindre quand on le relâche.
Trouver les adresses du port auquel est connecté le bouton poussoir ainsi que les positions des
bits qui permettent de contrôler les pins. (consulter le STM32 F4 Reference manual.pdf).
Compiler le programme et le charger dans la carte afin de l’exécuter et tester son bon
fonctionnement.
E. DAMERGI
8I INSAT2019
Programmation des SOCs RT4/IIA4
On veut développer un programme en ‘C’ qui assure le même fonctionnement que celui de la
manip_1-2, avec :
1) Faire abstraction des adresses des registres au niveau de la configuration des GPIOs et
2) Le test du bouton poussoir, Allumer une Led ou l’éteindre devrait se faire en faisant appel
paramètre
Pour cela :
Compiler le programme et le charger dans la carte afin de l’exécuter et tester son bon
fonctionnement.
On veut développer un programme ‘C’ qui permet de faire clignoter le(s) Led(s) de la carte STM32.
Trouver les fonctions de la librairie qui permettent de mettre un pin à 1, ainsi que la fonction
de mise à 0 d’un pin (voir figure ci-dessous).
On veut développer un programme qui permet d’allumer le(s) Leds quand on appuie sur le bouton
poussoir et de les éteindre quand on le relâche. La lecture de l’état du bouton étant assurée par le
mécanisme de scrutation.
Trouver les fonctions de la librairie qui permettent de lire l’état d’un pin.
Ecrire le programme en ‘C’en utilisant les fonctions des drivers.
Compiler le programme et le charger dans la carte afin de l’exécuter et tester son bon
fonctionnement.
E. DAMERGI
10I INSAT2019
Programmation des SOCs RT4/IIA4
II-A- Fonctionnement :
Pour les 2 manips suivantes, il s’agit d’utiliser la scrutation (test continu) pour recevoir et envoyer
des données sur le port série USART2. Le code à développer doit répéter continuellement, et tant que
le bouton poussoir n’est pas appuyé (==1) les actions suivantes :
- Attendre jusqu’à ce qu’un caractère soit reçu sur l’interface série USART2 (Pin RX= PA3).
S’il s’agit du caractère ‘G’, alors le microcontrôleur envoie le contenu de la chaine
MessageOK[] à travers l’interface série USART2 (Pin TX= PA2) et allume la Led.
Sinon il envoie le contenu de la chaine MessageKO[] et éteint la Led (PA5).
- Si le bouton poussoir est appuyé, envoyer le message « End of Comm » par liaison série.
« STM32_NucleoF401_HAL\HAL_USART2_Polling\MDK-ARM\*.uvprojx »
Au niveau du projet :
- Compléter le code permettant d’initialiser les périphs utilisés (GPIO Pins, USART Pins et
USART) au niveau du fichier main.c, en utilisant les Alias pour les pins et les interfaces
Commencer par générer le code d’initialisation à partir de l’outil CubeMX en utilisant l’option
generate Peripheral Initialization as pairs .h/.c files per IP. C’est-à-dire que pour chaque périph PPP
utilisé, les paramètres et le code permettant sa configuration et son initialisation vont être mis dans
des fichiers PPP.c et PPP.h et non pas au niveau des fichiers main.c et main.h.
Utiliser les Alias Led, PushButton, Serial_Tx et Serial_Rx pour les différents pins utilisés.
- Au niveau de quelle fonction et quel fichier se fait l’initialisation des pins TX et RX relatifs à
l’interface série USART2 ?
- Au niveau de quelle fonction se fait l’appel à cette dernière (la fonction d’initialisation des
pins TX et RX).
- Que serait le code au niveau de la fonction d’initialisation des pins TX et RX si on a utilisé
deux interfaces série USART2 et USART3 ?
- Quelles fonctions de la librairie HAL doivent être utilisées pour l’envoi (resp. réception) des
données en mode polling ?
E. DAMERGI
12I INSAT2019
Programmation des SOCs RT4/IIA4
Il s’agit d’écrire un programme qui permet de faire clignoter une fois le(s) led(s) à chaque appui
sur le bouton poussoir, en utilisant le mécanisme d’interruptions et en se basant sur la librairie HAL.
a) __HAL_GPIO_EXTI_CLEAR_IT “stm32f10x_hal_gpio.h”
b) __HAL_GPIO_EXTI_CLEAR_FLAG “stm32f10x_hal_gpio.h”
c) HAL_NVIC_ClearPendingIRQ (IRQn_Type IRQn) “stm32f10x_hal_cortex.c”
Comparer ces fonctions (niveau code) et préciser quelle est la plus appropriée pour remettre
à 0 le pending bit au niveau du Handler. Expliquer.
- Ecrire le Handler et tester.
- Comment change le comportement du programme quand on met la fonction, permettant la
remsie à 0 du pending bit, au début ou à la fin du Handler. Expliquer.
Dans les manips suivantes (3-4 et 3-5), aucun code n’est donné. Il faut générer soi-même le
code d’initialisation des périphériques avec l’outil CubeMX et compléter le code permettant
d’assurer le fonctionnement du système.
Rq : aussi bien la temporisation que la détection de l’état du bouton doit être gérée par
utilisation du mécanisme d’interruptions.
E. DAMERGI
14I INSAT2019
Programmation des SOCs RT4/IIA4
Manip 3_5 :
STM32
PCPPC
NVIC DMA Terminal
(Hecules)
Usb To
Serial
Bridge
Driver
BUS AHB BUS APB
Serial To
TX
USART1 Usb
RX_Int_Request RX
(Nucleo) usb
Une fois 10 caractères sont reçus, il faut comparer la chaine de 10 caractères à une chaine de
caractères password[ ]= "9876543210".
Si les 2 chaines sont les mêmes, alors allumer la LED et attendre (delay (0xFFFFF)), sinon la
faire clignoter lentement.