STM32L476RGTx Nucleo Blink Code in Assembly [Newbie Ques]

1
    __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

El código parpadea en la MCU (1 advertencia durante la compilación) pero el LED no parpadea. Mientras se realiza la depuración de ORRS r2, r0, r2 en GPIOA_MODER, aparece el indicador negativo en el PSR y el valor no se carga en GPIOA_MODER.The Lo mismo sucede con BSRR.

El LED está conectado a PA5.

    
pregunta V.Singh

1 respuesta

2

Creo que tienes la dirección de registro ENR RCC_AHB 2 incorrecta

La dirección base se da como 0x40021000, el desplazamiento es 0x4C. Por lo tanto, la dirección del registro es 0x4002104C y no 0x4002144C.

En efecto, no habilitas el reloj para la GPIOA, por lo tanto, no ocurrirá nada (no he comprobado esas direcciones).

Otra observación: su bucle no tiene retraso, el LED no parpadeará visiblemente para los seres humanos, ya que se encenderá y apagará en el rango de MHz. Se verá como la mitad.

Lección: preste especial atención a los números mágicos (siempre), intente usar símbolos predefinidos, entonces solo tendrá que prestar mayor atención una vez.

Siguiente error:

El registro del modo GPIO del puerto A tiene un valor de restablecimiento de 0xABFFFFFF. OVER otro 1 en eso no cambiará nada.

Debe restablecer los bits de configuración para el pin que desea cambiar primero.

    
respondido por el Arsenal

Lea otras preguntas en las etiquetas