IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

STM32L4 blink led [STM32]


Sujet :

Embarqué

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 1
    Par défaut STM32L4 blink led
    Salut ,

    Je debute la programmation du STM32 (STM32L476 RG) et je voulais apprendre a utiliser les registres donc j'ai fait un petit code mais quand j'essai sur le microcontrolleur ca ne marche pas donc je voulais savoir qu'est ce que je dois modifier pour que ca marche .

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    #include "stm32l4xx.h"
     
     
    int main(void)
    {
    volatile unsigned int i =0;
    RCC -> AHB2ENR|= 1<<0;
    GPIOA->MODER |= 1 << 10;
    while(1)
    {for (i= 0; i < 50000; i++)
    	GPIOA -> BSRR= (1<<5);
    for (i = 0; i < 50000; i++)
    	GPIOA -> BSRR= (1<<21);}
     
    }

    la user led est connecte au PA5 et j'utilise atollic Truestudio


    Merci

  2. #2
    Candidat au Club
    Homme Profil pro
    Frigoriste
    Inscrit en
    Novembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Frigoriste
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2014
    Messages : 4
    Par défaut
    Salut Alakaab,

    J’ai la même carte que toi et je tourne sur éclipse, si tu as trouvé comment faire pour faire clignoter la led ou bien si tu as des bons Tutos je suis preneur.

    Merci d’avance.

  3. #3
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 254
    Par défaut
    Salut,
    C'est surprenant car je viens de regarder la doc du STM32L476 RG et le code tout en haut du message me semble correcte.

    Tu peux essayer le code ci dessous et me dire si ça fonctionne ? Je n'ai pas eu le temps de le tester ce soir, j'essai demain mais faut que je regarde si j'ai le même micro chez moi. J'ai un STM32F303 ça c'est sur mais un L4xx ?

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include "stm32l4xx.h"
     
    int main(void)
    {
       unsigned int i =0;
     
       /* Activation de l'horloge du périphérique GPIOA */
       RCC->AHB2ENR |= 1 << 0;
     
       /* PA5 en sortie classique */
       GPIOA->MODER |= 1 << 10;
     
       while(1)
       {
          for (i= 0; i < 500000; i++)
    	GPIOA->ODR = (1 << 5); /* PA5 à 1 */
          for (i = 0; i < 500000; i++)
    	GPIOA->ODR = (0 << 5); /* PA5 à 0 */
       }
    }

  4. #4
    Candidat au Club
    Homme Profil pro
    Frigoriste
    Inscrit en
    Novembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Frigoriste
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2014
    Messages : 4
    Par défaut
    Salut Vincent,

    Merci pour ta réponse,
    Je viens de tester le code que tu m'a proposé, j'ai posté une video sur le net :

    La LED ne s'allume pas, je voudrais savoir qu'est ce qu'il faut repérer sur la "datasheet" comme info pour allumer la LED .

    J'ai compris qu'il fallait activer l'horloge RCC avec "AHB2ENR", activer le registre GPIOA avec "MODER" puis mettre le Pin 5 du GPIOA sur "HIGH" avec "ODR".
    Mais je n'arrive pas à bien interpréter ce qu'il y a entre les parenthèses.
    Y'a t-il autre chose à paramétrer comme la fréquence de l'horloge ?

    Merci encore.

    ps : Le code en commentaire c'est ce que j'avais testé avant de poster.

  5. #5
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 661
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 661
    Par défaut
    Bonjour,

    ma remarque peut sembler déplacée, mais est-ce que ta LED est correctement câblée ? Tu ne l'as pas mise à l'envers par hasard ? La valeur de sa résistance est correcte ?

  6. #6
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 254
    Par défaut
    Salut,
    Très bonne question Auteur !!!
    Et rassure moi, on est bien entrain de parler d'une carte Nucléo avec la LED sur PA5 ? C'est ce que j'avais en tête en lisant le premier message. On ne parle pas d'une carte Discovery ? Sinon les LED ne sont peut être pas du tout aux mêmes endroits.

    C'est bien cette carte ci-dessous que tu as ?

    Nom : en.nucleo-Lx.jpg
Affichages : 3351
Taille : 157,4 Ko

    ***********************************************

    Sur ta vidéo ça a l'air de fonctionner, je vois bien le registre Output Data Register passer à 1 et j'imagine qu'il a du passer à 0 si la vidéo avait été plus loin (peut être en mettant un point d'arrêt sur cette ligne GPIOA->ODR = (0 << 5); /* PA5 à 0 */ et en regardant l'état des registres comme tu le fais.) Ce soir je ferai un essai sur une de mes cartes Nucléo, je n'aurai peut être pas la même que toi mais je regarderai si je n'ai pas un microcontrôleur proche du STM32L4xx. Ça fait un petit moment que je n'ai pas touché à un micro ARM mais je ne vois pas ce que j'ai oublié.

    ***********************************************

    Citation Envoyé par ziyad88
    Mais je n'arrive pas à bien interpréter ce qu'il y a entre les parenthèses.
    Si tu parles de ça GPIOA->ODR = (0 << 5); c'est juste un 0 que je décale 5x vers la gauche dans le registre. Ce qui revient à mettre le bit 5 du registre à 0. Si j'écris par exemple GPIOA->ODR = (1 << 21);, je décale 21 fois un bit à 1 dans le registre, ce qui revient à mettre le bit 21 à 1. Personnellement je n'aime pas ce style d'écriture, j'ai fais comme ça parce que j'ai repris le programme initial du premier message.


    ***********************************************

    Pour te repérer dans les docs de chez ST, c'est comme chez Texas Instruments, il te faut deux choses :
    - La datasheet (organisation interne du micro, les spécs électriques, etc...) https://www.st.com/resource/en/datas...tm32l476rg.pdf
    - Le reference manual (fonctionnement détaillé de chaque périphérique et des registres associés) https://www.st.com/resource/en/refer...dm00083560.pdf

    Il faut jongler avec les deux !

    Sur les microcontrôleurs 8 et 16 bits propriétaire (MSP430, ATMEL, PIC, etc) on configure les périphériques et c'est partie mais sur ARM il ne faut pas oublier d'activer en plus, et de régler au besoin, l'horloge du périphérique et pour ça il faut savoir sur quel bus d'horloge est connecté le dit périphérique. Datasheet page 17

    Nom : arm1.PNG
Affichages : 3268
Taille : 39,9 Ko

    Le PORTA est connecté sur le bus d'horloge AHB2, note qu'il y a plusieurs bus d'horloge, AHB1, APB1 et APB2 certains bus sont limités en vitesse (ce n'est pas le cas sur ce microcontrôleur) il y a des ponts et des réglages possibles pour permettre des ajustements très fins surtout en terme de consommation puisque plus ça tourne lentement et moins ça consomme.

    Maintenant, il faut aller voir dans le Reference Manual, ce qu'on nous raconte à propose du bus AHB2. Si tu regardes l'image ci dessous tu peux voir que AHB2 est un registre classé dans la fonctionnalité RCC (Reset and Clock Control) d'où le pointeur RCC->AHB2xxx et ce registre AHB2 être "enable" (AHB2ENR) ou "reset" (AHB2RSTR). C'est toujours intéressant d'aller lire ce que fait la fonctionnalité RCC.

    Nom : arm2.PNG
Affichages : 3267
Taille : 48,3 Ko

    Et ci-dessous, on voit qu'il suffit de mettre le bit 0 du registre à 1 pour activer l'horloge du port A (voir la page 252 que je ne mets pas ici.) La doc précise l'utilité de chaque bit de chaque registre.

    Nom : arm3.PNG
Affichages : 3216
Taille : 49,4 Ko

    Concernant le registre 32bits MODER de la fonctionnalité GPIOA, il s'agit de mettre le bit 10 à 1

    Nom : arm4.PNG
Affichages : 3230
Taille : 22,8 Ko

    Et enfin on met à 1 ou à 0 le bit de PA5 via le registre ODR de la fonctionnalité GPIOA

    Nom : arm5.PNG
Affichages : 3234
Taille : 26,5 Ko


    Si tu te demandes comment connaitre les registres nécessaires à telle ou telle fonctionnalités, c'est écrit dans le Reference Manual, regarde le chapitre 8 General-purpose I/Os (GPIO) tout est écrit. Je test ce soir, surement sur un micro STM32 différent mais on s'adaptera !

  7. #7
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 254
    Par défaut
    Je crois avoir trouvé en regardant à nouveau ta vidéo

    La valeur par défaut de chaque bit dans le registre MODER est 11 donc 3 en décimal ou 0x03 en hexa. C'est qui est écrit dans la doc et dans ta vidéo (heureusement )

    Nom : arm6.PNG
Affichages : 3204
Taille : 22,3 Ko

    Donc au démarrage on a tout des bits à 1 partout et l'erreur se situe ici GPIOA->MODER |= 1 << 10; car en faisant un OU bit à bit entre les 32 bits à 1 et la valeur 1 décalé de 10 vers la gauche ça donne ça :
    Code ASM : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       1111 1111 1111 1111 1111 1111 1111 1111
    OU 0000 0000 0000 0000 0000 0100 0000 0000
    ------------------------------------------
    =  1111 1111 1111 1111 1111 1111 1111 1111

    Et c'est pas du tout ce qu'on voulait puisque là on a tout remis à 1, tout est en entrée comme après un reset !

    Nous ce qu'on voulait comme résultat c'est ça :
    Code ASM : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ------------------------------------------
    =  1111 1111 1111 1111 1111 0111 1111 1111

    Soit le bit 10 à 1 et le bit 11 à 0 pour que PA5 soit une sortie donc il faut modifier cette ligne GPIOA->MODER |= 1 << 10; et la transformer en GPIOA->MODER &= 0xFFFFF7FF;

    Citation Envoyé par Vincent PETIT
    Personnellement je n'aime pas ce style d'écriture, j'ai fais comme ça parce que j'ai repris le programme initial du premier message.
    Bah maintenant je me rappelle bien pourquoi je n'aime pas ce style d'écriture

  8. #8
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 661
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 661
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Très bonne question Auteur !!!
    Et rassure moi, on est bien entrain de parler d'une carte Nucléo avec la LED sur PA5 ?
    ben quand le programme semble fonctionner, on regarde après du côté du matériel si quelque chose cloche D'où ma question.


    @Vincent : au fait, les STM32 font forcément référence aux cartes Nucleo ? Ou on peut trouver des STM32 sur d'autres types de cartes ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. LED Clavier
    Par LordBob dans le forum Linux
    Réponses: 5
    Dernier message: 15/03/2006, 14h44
  2. Affichage LED
    Par chourmo dans le forum Composants VCL
    Réponses: 7
    Dernier message: 06/02/2006, 16h15
  3. [Débutant creation de composant] Créer une LED numérique
    Par C_Marteau dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/06/2005, 21h23
  4. [TP]Créer une animation leds clavier
    Par Thomas748 dans le forum Turbo Pascal
    Réponses: 16
    Dernier message: 27/11/2004, 20h18
  5. [TP]blink
    Par néo333 dans le forum Turbo Pascal
    Réponses: 47
    Dernier message: 13/11/2003, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo