|
|
|
# TP2: Configuration des GPIOs et des interruptions
|
|
|
|
# Configuration des GPIOs et des interruptions
|
|
|
|
|
|
|
|
## Présentation
|
|
|
|
|
|
|
|
Le projet traite de l’utilisation des GPIOs et des interruptions. Sur la carte, nous utiliserons notamment la led verte (LED2) et le bouton poussoir (USER_BUTTON).
|
|
|
|
|
|
|
|
## Analyse des fonctions de la bibliothèque fournie
|
|
|
|
|
| ... | ... | @@ -9,9 +9,15 @@ |
|
|
|
- Que vous propose le fichier stm32f446xx.h ?
|
|
|
|
- A quel instant activer l'horloge sur un port ? Doit-on l'activer sur tous les ports ?
|
|
|
|
|
|
|
|
##
|
|
|
|
Vous utiliserez :
|
|
|
|
| Label | GPIO name |
|
|
|
|
| ------ | ------ |
|
|
|
|
| LED2 | PA_5 |
|
|
|
|
| USER_BUTTON | PC_13 |
|
|
|
|
|
|
|
|
## Utilisation du bouton en scrutation
|
|
|
|
|
|
|
|
Ecrire la fonction TP_GPIO permettant d'allumer la LED LED2, selon l'état du bouton poussoir USER_BUTTON.
|
|
|
|
Ecrire la fonction TP_GPIO() permettant d'allumer la LED LED2, selon l'état du bouton poussoir USER_BUTTON.
|
|
|
|
|
|
|
|
Prototype de la fonction :
|
|
|
|
````
|
| ... | ... | @@ -30,9 +36,32 @@ La valeur d’entrée est-elle à 0 ou à 1 quand le bouton est pressé ? |
|
|
|
|
|
|
|
## Utilisation d'une interruption (à la place de la scrutation)
|
|
|
|
|
|
|
|
Afin d’éviter que le processeur ne scrute constamment la valeur de l’entrée PC_13, vous configurerez l’appui sur le bouton comme un évènement qui provoque une interruption.
|
|
|
|
On doit d’abord configurer l’interruption, au niveau du périphérique SYSCFG et au niveau du processeur, puis compléter la routine. Dès que l’IT est autorisée, un évènement sur la broche doit déclencher l’appel de la routine.
|
|
|
|
Afin d’éviter que le processeur ne scrute constamment la valeur de l’entrée PC_13, vous configurerez l’appui sur le bouton comme un évènement qui provoque une interruption.
|
|
|
|
|
|
|
|
On doit d’abord configurer l’interruption, au niveau du périphérique **SYSCFG** et au niveau du processeur, puis compléter la routine. Dès que l’IT est autorisée, un évènement sur la broche doit déclencher l’appel de la routine.
|
|
|
|
|
|
|
|
Pour configurer l'interruption matérielle pour la ligne d'entrée EXTI k, la procédure générale est la suivante :
|
|
|
|
1. Activer l’interruption au niveau du processeur (vous trouverez la référence exacte dans stm32f446xx.h )
|
|
|
|
NVIC_EnableIRQ(EXTIk_IRQn);
|
|
|
|
Plusieurs GPIO peuvent partager la même ligne d’interruption, il faudra en tenir compte dans la routine d’interruption et gérer le flag d’interruption correspondant.
|
|
|
|
|
|
|
|
2. Activer l'horloge au niveau du périphérique SYSCFG (APB2 bus)
|
|
|
|
|
|
|
|
3. Configurez le registre de configuration d'interruption externe SYSCFG pour connecter la broche GPIO k à la ligne d'entrée d'interruption externe correspondante EXTI k (EXTICR reg)
|
|
|
|
|
|
|
|
4. Sélectionnez un front de signal qui déclenchera l’interruption EXTI: un front montant, un front descendant ou les deux. Ceci est configuré par le registre de sélection de déclenchement de front (reg EXTI_RTSR ou EXTI_FTSR).
|
|
|
|
|
|
|
|
5. Réglez le kième bit dans le registre de masque d'interruption (reg EXTI_IMR) pour activer l'interruption EXTI pour la ligne d'entrée k.
|
|
|
|
|
|
|
|
6. Modifiez la routine d'interruption pour EXTI k. Le nom de la routine d'interruption est donné par le fichier de démarrage startup_stm32F446xx.s.
|
|
|
|
Le registre EXTI_PR enregistre la source de l'interruption. Pensez à l’effacer dans la routine. Le bit de statut en attente correspondant doit être effacé pour permettre une interruption future. **Étonnamment, le forcer à 1 efface le bit en attente. (reg EXTI_PR)**
|
|
|
|
|
|
|
|
- Tester le programme et valider votre mise en place d’interruption.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Création d'API (pour les plus rapides)
|
|
|
|
|
|
|
|
Afin de faciliter la configuration des ports dans les prochains TPs, vous allez compléter la fonction générique `GPIOx_Pin_Configure()` qui permet de configurer une pin de n’importe quel port, notamment les 4 registres configurés précédemment. Le squelette de la fonction vous est proposé. Vous pourrez vous inspirer des fonctions proposées dans cette librairie (gpio.c).
|
|
|
|
|
|
|
|
|
|
|
|
### Création d'API |
|
|
\ No newline at end of file |