5 - Utiliser un "bouton poussoir" avec un "GPIO in" : Différence entre versions

De Wiki L.A.B
Aller à : navigation, rechercher
Ligne 2 : Ligne 2 :
 
Dans cet atelier, on va regarder comment utiliser des GPIO in pour connecter un bouton poussoir. <br>
 
Dans cet atelier, on va regarder comment utiliser des GPIO in pour connecter un bouton poussoir. <br>
 
Dans notre exemple nous allons utiliser la carte “Nucleo64” de référence “NUCLEO-L476RE”.
 
Dans notre exemple nous allons utiliser la carte “Nucleo64” de référence “NUCLEO-L476RE”.
 +
<br>
 +
[[Fichier:NUCLEO476.jpg]]
 
<br>Cette carte embarque un bouton bleu appelé "USER BUTTON" connecté au pin2 (I/O PC13) dans la doc. Ainsi on peut l'utiliser sans hardware supplémentaire. <br>
 
<br>Cette carte embarque un bouton bleu appelé "USER BUTTON" connecté au pin2 (I/O PC13) dans la doc. Ainsi on peut l'utiliser sans hardware supplémentaire. <br>
 
Pour info: Il y a aussi un bouton noir sur la carte. Ceci reset la carte et fait redémarrer le code ("reboot"). <br>
 
Pour info: Il y a aussi un bouton noir sur la carte. Ceci reset la carte et fait redémarrer le code ("reboot"). <br>
 +
[[Fichier:UserButton_Pin2_PC13.jpg]]
  
  

Version du 2 janvier 2018 à 16:21

Utiliser un "bouton poussoir" avec un "GPIO in"

Dans cet atelier, on va regarder comment utiliser des GPIO in pour connecter un bouton poussoir.
Dans notre exemple nous allons utiliser la carte “Nucleo64” de référence “NUCLEO-L476RE”.
NUCLEO476.jpg
Cette carte embarque un bouton bleu appelé "USER BUTTON" connecté au pin2 (I/O PC13) dans la doc. Ainsi on peut l'utiliser sans hardware supplémentaire.
Pour info: Il y a aussi un bouton noir sur la carte. Ceci reset la carte et fait redémarrer le code ("reboot").
UserButton Pin2 PC13.jpg



Il y a deux possibilité d'utiliser les bouton poussoir:

  • en polling: On appelle un fonctionnement de code "en polling", si le code lit à l’intérieur d'une boucle l'état d'un périphérique (par exemple notre bouton, qui peut avoir les états "poussé" et "non poussé"), jusque le périphérique se met à l'état "poussé". Ainsi le code devient bloquant et ne peut pas executer d'autres taches. Cette signification ne convient seulement au situations simples (ou si le programme fonctionne en "multi thread).
  • avec des interruptions: Les microcontrôleurs implémentent une technique dit "interrupt": Le code peut exécuter d'autres taches, mais le code va être interrompu dès que le bouton est poussé. Une fonction spéciale (appelé "interrupt handler" ou "interrupt service routine") est exécuté. Après la fin de cette fonction, le code interrompu reprends la main et continue.

Utiliser le button poussoir "en polling"

 uint8_t ButtonPressed = 0;


 while ( ButtonPressed == 0 )                        // block until button pressed
 {
  GPIO_PinState PinState;
  PinState = HAL_GPIO_ReadPin( GPIOC, GPIO_PIN_13);  // get current state of pin
  if ( PinState == GPIO_PIN_RESET )
   ButtonPressed = 1;
  else
   ButtonPressed = 0;
 }
 HAL_GPIO_WritePin( GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

Utiliser le button poussoir "avec des interrupt"

 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)  
 {
  if ( GPIO_Pin == GPIO_PIN_13 )
  {
   GPIO_PinState PinState;
   PinState = HAL_GPIO_ReadPin( GPIOC, GPIO_PIN_13);
   if ( PinState == GPIO_PIN_RESET )
    ButtonPressed = 1;
   else
    ButtonPressed = 0;
  } 
 }