Modifications

Sauter à la navigation Sauter à la recherche
2 726 octets ajoutés ,  9 décembre 2021 à 18:42
Ligne 13 : Ligne 13 :  
Nous allons maintenant étudier comment ils se programment.  
 
Nous allons maintenant étudier comment ils se programment.  
   −
==Pourquoi utilisé CubeIDE==
+
==Pourquoi utiliser CubeIDE==
    
Les MCU étant des ordinateurs minimalistes, ils ne possèdent pas de système d’exploitation (linux etc…). Il n’y en a aussi pas l'intérêt. De ce fait, les programmes au sein de MCU sont souvent codés, compilés puis téléversés par un ordinateur extérieur.
 
Les MCU étant des ordinateurs minimalistes, ils ne possèdent pas de système d’exploitation (linux etc…). Il n’y en a aussi pas l'intérêt. De ce fait, les programmes au sein de MCU sont souvent codés, compilés puis téléversés par un ordinateur extérieur.
Ligne 75 : Ligne 75 :  
GPIO signifie General Purpose Input Output, il s'agit donc des entrées et des sorties des pins de votre carte. En output, il peut vous permettre d'alimenter une pin d'un de vos composants ou bien une LED. En input, il peut permettre de détecté l'état d'un composant extérieur par exemple celui d'un bouton poussoir.
 
GPIO signifie General Purpose Input Output, il s'agit donc des entrées et des sorties des pins de votre carte. En output, il peut vous permettre d'alimenter une pin d'un de vos composants ou bien une LED. En input, il peut permettre de détecté l'état d'un composant extérieur par exemple celui d'un bouton poussoir.
   −
===Entrée en matière alimenter une LED===
+
===Entrée en matière commander une LED===
 
Dans cette exercice, nous allons alimenté la LED PA5 et commandé la LED avec le bouton poussoir PC13. Ces deux composants sont intégré à la STM32F446.
 
Dans cette exercice, nous allons alimenté la LED PA5 et commandé la LED avec le bouton poussoir PC13. Ces deux composants sont intégré à la STM32F446.
   Ligne 85 : Ligne 85 :  
Sur cette image, vous observez les ports PC13 et PB5 en vert. On en déduit que les ports respectifs au bouton poussoir et à la LED sont ENABLE.<br>
 
Sur cette image, vous observez les ports PC13 et PB5 en vert. On en déduit que les ports respectifs au bouton poussoir et à la LED sont ENABLE.<br>
 
Si vous réalisez un clic droit sur PB5, vous remarquerez que le port de PB5 est en OUTPUT. Si vous réalisez un clic droit sur PC13 vous remarquer que le port n'est pas en INPUT mais EXTI. Nous aborderons la signification de cette configuration plus tard. Pour ce tutoriel cliquez sur PC13 et sélectionnez INPUT. Générez votre code en appuyant sur CTRL+S.
 
Si vous réalisez un clic droit sur PB5, vous remarquerez que le port de PB5 est en OUTPUT. Si vous réalisez un clic droit sur PC13 vous remarquer que le port n'est pas en INPUT mais EXTI. Nous aborderons la signification de cette configuration plus tard. Pour ce tutoriel cliquez sur PC13 et sélectionnez INPUT. Générez votre code en appuyant sur CTRL+S.
 +
 +
Maintenant que la configuration sur Mx a été réalisé, nous allons aborder le code.
 +
 +
====Alimenté une LED====
 +
Pour alimenter une LED, nous allons utilisé la fonction HAL_GPIO_WritePin(GPIOx, GPIO_Pin, PinState). Cette fonction permet de commander l'état d'un port GPIO en OUTPUT.<br>
 +
Le premier argument correspond à la famille du GPIO qui correspond à une lettre par exemple GPIOA, GPIOB et etc.<br>
 +
Le second argument correspond au numéro du GPIO.
 +
Le troisième correspond à l'état haut ou bas du GPIO. Vous pouvez entré 1 ou 0 ou bien les constantes SET ou RESET pour plus lisibilité.
 +
 +
Pour notre application, nous allons écrire HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, SET) entre les balises /* USER CODE BEGIN 2 */ et /* USER CODE END 2 */.
 +
 +
Vous pouvez maintenant compilez et voir votre LED s'allumer. Féliciation !
 +
 +
====Commander une LED avec un bouton poussoir====
 +
 +
Pour commander votre LED avec le bouton poussoir, revérifiez une seconde fois que votre port PC13 est en INPUT.
 +
 +
Notre objectif est que lorsque l'on appuie sur le bouton la LED s'allume puis que si on rappuie dessus elle s'éteigne.
 +
 +
Pour ce faire, nous allons utiliser les fonctions HAL_GPIO_ReadPin et HAL_GPIO_TogglePin. La première est utilisé sur un port en INPUT, elle permet de lire l'état d'entrée. La seconde est utilisé en output, elle inverse l'état de sortit si état haut alors état bas et inversement.<br>
 +
Leur premier argument est la famille du GPIO.<br>
 +
Le second argument correspond à son numéro.<br>
 +
Ainsi pour réussir notre application, nous allons réaliser le code suivant:
 +
[[Fichier:Code pour commander la LED avec le Boutton PC13.png|cadre|centré]]
 +
Vous connaissez maintenant les fondamentaux sur les GPIOs. Nous allons maintenant vous proposer diverse petit projet à réaliser par vous même pour consolider vos bases.
 +
 +
====POUR ALLER PLUS LOIN====
 +
=====PROJET 1 : Faire clignoter une LED avec HAL_DELAY=====
 +
Faite clignotez une LED avec la fonction HAL_Delay(tmps) tmps en secondes.
 +
=====PROJET 2 : Clignoter une LED + boutons poussoir=====
 +
Lorsque l'on appuie une fois sur le bouton la LED clignote et lorsque l'on appuie une seconde fois elle s'éteint.
 +
=====PROJET 3 : Commander une LED externe à la carte=====
 +
Pour ce projet, réutilisez l'un des codes vue auparavant. Configurez un nouveau port de sortie output sur CubeMx. Branchez une résistance en série à une LED sur le nouvelle OUTPUT puis exécuter votre code.
 +
ATTENTION, utilisez bien une RÉSISTANCE sinon la LED EXPLOSERA !
 +
=====PROJET 4 : Commander une LED avec un capteur de fin de course=====
    
==UART: utilisation du printf==
 
==UART: utilisation du printf==
Ligne 134 : Ligne 169 :  
À courte distance de connexion :<br>
 
À courte distance de connexion :<br>
 
On connecte directement TXD1→RXD2 et RXD1→TXD2 + Masse. On s’assure que les niveaux logiques correspondent aux niveaux logiques des deux éléments.<br>
 
On connecte directement TXD1→RXD2 et RXD1→TXD2 + Masse. On s’assure que les niveaux logiques correspondent aux niveaux logiques des deux éléments.<br>
Ensuite on peut télécharger un logiciel de Terminal UART (ex GTKERM (Linux) ou Putty (Windows)), ou alors on peut développer sa propre interface. (Voir libraire Serial sur Python)
+
Ensuite on peut télécharger un logiciel de Terminal UART (ex GTKERM (Linux) ou Putty (Windows)), ou alors on peut développer sa propre interface. (Voir libraire Serial sur Python). <br>
 
Pour plus d'information : https://www.youtube.com/watch?v=kVd8Zj413l8
 
Pour plus d'information : https://www.youtube.com/watch?v=kVd8Zj413l8
    
===Mise en place de l'UART sur STM32CubeIDE===
 
===Mise en place de l'UART sur STM32CubeIDE===
 +
====Utilisation et Installation PUTTY et GTKTERM====
 +
À POLYBOT, nous pouvons vous aider sur deux outils de lecture et rans
 
====Configuration sur MX ====
 
====Configuration sur MX ====
 
Pour débuter, créer un nouveau projet comme décrit dans la section 2.2. (Cible STM32 NUCLEO-F446RE pour ce tuto).
 
Pour débuter, créer un nouveau projet comme décrit dans la section 2.2. (Cible STM32 NUCLEO-F446RE pour ce tuto).
Ligne 150 : Ligne 187 :  
-> bit de stop correspond au nombre de bits utilisés pour déclarer la fin d'un caractère/word. Il est ici à 1.<br>
 
-> bit de stop correspond au nombre de bits utilisés pour déclarer la fin d'un caractère/word. Il est ici à 1.<br>
 
Pour l'instant, nous n'allons pas toucher ou modifier ces paramètres.
 
Pour l'instant, nous n'allons pas toucher ou modifier ces paramètres.
 +
 +
====
    
==Interruptions==
 
==Interruptions==
31

modifications

Menu de navigation