Se connecter
Se connecter

ou
Créer un compte

ou
Agrandir
Les Mains dans le Cambouis
Bidouille & Développement Informatique

Sujet Le pub des programmeurs

  • 1 925 réponses
  • 117 participants
  • 123 028 vues
  • 130 followers
Sujet de la discussion Le pub des programmeurs
Salut :coucou: y a des programeurs sur AF si oui vous bossez sous quoi ?
Afficher le sujet de la discussion
1851
yes !

Chris Kazvon

-------------------------------------------------

Introduction à Hornresp et Tutoriels  -  Tutoriels Vidéo pour Room EQ Wizard

1852
Et aussi avant le disque dur ?
1853
je referai la vérif mais oui :)

je pense que j'ai pas dû prendre les bons / assez de fichiers

du coup je vais tester avec Ubuntu, y a qu'un seul fichier à télécharger, on peut pas se tromper !
je vous tiens au jus :)

Chris Kazvon

-------------------------------------------------

Introduction à Hornresp et Tutoriels  -  Tutoriels Vidéo pour Room EQ Wizard

1854
Et désactiver le secure boot, qui est souvent mis par défaut dans les BIOS UEFI/récents.

« What is full of redundancy or formula is predictably boring. What is free of all structure or discipline is randomly boring. In between lies art. » (Wendy Carlos)

1855
Je suis en train de faire du C pour stm32 en ce moment (de l'embarqué donc) et je galère avec un truc tout simple. Sur ma carte (une nucleo F303RE) il y a un bouton. Et j'aimerais que ce bouton déclenche une interruption quand il est pressé et lâché et afficher le résultat sur le port série. jusque la rien de sorcier voici mon code :

Voici la boucle principale de l'application :
main.c

 while (1)
  {
    /* USER CODE END WHILE */
      if (toto && HAL_GPIO_ReadPin(B1_Pin, B1_GPIO_Port))
      {
          HAL_UART_Transmit(&huart2, "B=1\r\n", 6, 10);
      }
      if (toto && !HAL_GPIO_ReadPin(B1_Pin, B1_GPIO_Port))
      {
          HAL_UART_Transmit(&huart2, "B=0\r\n", 6, 10);
      }
      toto = 0;
    /* USER CODE BEGIN 3 */
  }/


Voici la configuration de l'interruption :
main.c

static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
 [...]

  /*Configure GPIO pin Output Level */
 [...]
  /*Configure GPIO pin : B1_Pin */
  GPIO_InitStruct.Pin = B1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; //Interruption sur front montant (on) et descendant (off)
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : LD2_Pin */
  [...]

  /* EXTI interrupt init*/
  HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

}


stm32f3xx_it.c
void EXTI15_10_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI15_10_IRQn 0 */
  toto = 1;
  /* USER CODE END EXTI15_10_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
  /* USER CODE BEGIN EXTI15_10_IRQn 1 */

  /* USER CODE END EXTI15_10_IRQn 1 */
}


La variable toto est de type char et est définie dans le fichier main.h qui est inclus dans main.c mais aussi dans stm32f3xx_it.c

J'ai paramétré le type de detection sur front montant et descendent via la ligne
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;


Le code tel quel fonctionne à peu près. C'est à dire que quand je presse le bouton, j'ai sur mon terminal "B=1" mais quand je le relache... aussi. Je ne comprends pas pourquoi... Quelqu'un a une idée ?
J'ai essayé avec HAL_GPIO_ReadPin(B1_Pin, B1_GPIO_Port) == 1 et HAL_GPIO_ReadPin(B1_Pin, B1_GPIO_Port) == 0 mais j'ai le même résultat.

[ Dernière édition du message le 13/01/2020 à 21:29:17 ]

1856
Et si tu mets le déclenchement juste sur ce qui correspond au relâchement du bouton ?

D’ailleurs généralement sur les IHM c’est fait comme ça : il ne se passe rien quand on enfonce le bouton de la souris, c’est quand on le relâche que l’action est effectuée.


Citation :
J'ai paramétré le type de detection sur front montant et descendent via la ligne
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;

Le code tel quel fonctionne à peu près. C'est à dire que quand je presse le bouton, j'ai sur mon terminal "B=1" mais quand je le relache... aussi. Je ne comprends pas pourquoi... Quelqu'un a une idée ?

En fait je ne comprends pas le problème ; soit parce-que je ne comprends pas ce que tu veux obtenir, soit parce-que je ne comprends pas ce que tu obtiens.

[ Dernière édition du message le 13/01/2020 à 21:36:56 ]

1857
Non j'ai besoin d'avoir l'information de quand le bouton est appuyé et de quand il est relaché, il y aura des traitement différents pour les deux cas. Par exemple dans le cas d'un clavier midi si tu presse une note, un message midi est envoyé. Quand tu la relâche c'est un autre message midi, différent, qui est envoyé.

Dans mon cas je shouaite que le message "B=1" soit envoyé sur le port série quand je presse le bouton et le message "B=0" quand je le relache.

[ Dernière édition du message le 13/01/2020 à 21:44:50 ]

1858
1859
edit
Citation :
GPIO_InitStruct.Pull = GPIO_NOPULL;


t'es sur que tu ne veux pas la pullup ? j'esperes que tu as une résistance en externe.

tu devrais laissé l'interuption modifier toto et lire le resultat dans la while loop et l'envoyer sur le port série.

méfie toi également l'interuption ne fait pas le distinguo entre rising et falling, c'est a toi de la faire lors de l'interruption (lire les registers de GPIO)

mais en générale un button sur un inter risque d'etre problématique a cause du rebond des contacts internes au switch. Il te faut une solution debounce.

rumorofsmoke.github.io/

[ Dernière édition du message le 13/01/2020 à 22:43:57 ]

1860