STM32L476RGTx Nucleo Blink Code dans l’assemblage [Newbie Ques]

V.Singh

STM32L476RGTx Nucleo Blink Code dans l’assemblage [Newbie Ques]


    __initial_sp    EQU 0x20000800
                PRESERVE8 ;8byte alignment of the stack (required by ARM) 
                THUMB    ; will use THUMB2 instructions
                AREA    RESET, DATA, READONLY
__Vectors       DCD     __initial_sp              ; Top of Stack
                DCD     Reset_Handler             ; Reset Handler
                AREA    |.text|, CODE, READONLY 
                ENTRY   
Reset_Handler   PROC    
                LDR r1, =0x4002144C         ;address of RCC_AHBENR register 
                LDR r0, =0x1
                LDR r2, [r1]
                ORRS r2,r0,r2
                STR r2, [r1]

                LDR r1, =0x48000000         ;address of GPIOA_MODER register
                LDR r0, =0x400          ;configure PA5 as output
                LDR r2, [r1]
                ORRS r2,r0,r2
                STR r2, [r1]

                LDR r1, = 0x48000018            ;address of GPIOA_BSRR register 
                LDR r0, =0x20           ;pin 5 on GPIOA set 
                LDR r2, =0x200000       ;pin 5 on GPIOA clear 
loop
                STR r0, [r1]                
                STR r2, [r1]
                B  loop                 
                ENDP
                END

Le code clignote sur le MCU (1 avertissement lors de la compilation) mais la LED ne clignote pas. Pendant le débogage ORRS r2, r0, r2 dans GPIOA_MODER, le drapeau négatif est levé dans le PSR et la valeur n’est pas chargée dans GPIOA_MODER. BSRR.

La LED est connectée au PA5.

Los Frijoles

Deux questions: quel était l’avertissement? Pourquoi n’écrivez-vous pas cela en C et n’utilisez pas les en-têtes CMSIS fournis par ST qui gèrent pour vous tous les numéros de registre et les masques de bits?

P J__

cela n’a aucun sens d’écrire le code assembleur. Ces uC sont optimisés pour l’utilisation du compilateur et je parie que vous écrirez du code pire dans l’assembleur que la sortie du compilateur C

Arsenal

@P__J__ ce n’est pas si mal d’apprendre le montage, car vous vous retrouverez dans la situation où vous devrez analyser le montage généré par le compilateur.

Réponses


 Arsenal

Je pense que vous vous êtes trompé d’adresse de registre RCC_AHB 2 ENR.

L’adresse de base est donnée comme 0x40021000, le décalage est 0x4C. L’adresse du registre est donc 0x4002104C et non 0x4002144C.

Donc, en fait, vous n’activez pas l’horloge sur le GPIOA, donc rien ne se passera (je n’ai pas vérifié ces adresses).

Autre remarque: votre boucle n’a pas de retard, la LED ne clignotera pas visiblement pour l’homme car elle sera allumée et éteinte dans la gamme MHz. Cela ressemblera à moitié.

Leçon: prêtez une attention supplémentaire aux nombres magiques (toujours), essayez d’utiliser des symboles prédéfinis – alors vous ne devez porter une attention supplémentaire qu’une seule fois.


Erreur suivante:

Le registre de mode GPIO du port A a une valeur de réinitialisation de 0xABFFFFFF. OU en ajouter un autre 1 ne changera rien.

Vous devez d’abord réinitialiser les bits de réglage de la broche que vous souhaitez modifier.

V.Singh

J’ai changé d’adresse, ça ne marche toujours pas

Arsenal

@ V.Singh J’ai mis à jour ma réponse avec la prochaine erreur dans votre code.

 

[Newbie, Blink, code, dans, l’assemblage, Nucleo, Ques], STM32L476RGTx

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *