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 ?

***********************************************
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é.
***********************************************

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 :
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
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.
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.
Concernant le registre 32bits MODER de la fonctionnalité GPIOA, il s'agit de mettre le bit 10 à 1
Et enfin on met à 1 ou à 0 le bit de PA5 via le registre ODR de la fonctionnalité GPIOA
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 !
Partager