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

De Wiki L.A.B
Révision de 22 décembre 2017 à 15:28 par Paul.adam (discussion | contributions) (Utiliser un "bouton poussoir" avec un "GPIO in")

Aller à : navigation, rechercher

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”.
Cette carte embarque un bouton bleu appeler "USER BUTTON" 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").


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

  • en polling
  • avec des interrupt

Utiliser le button poussoir "en polling"

Utiliser le button poussoir "avec des interrupt"

 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);

EXTI

 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;
  } 
 }