簡體   English   中英

將值加載到 memory 的 STM32 問題

[英]STM32 problem with loading value to memory

我正在嘗試使用裸機匯編代碼打開 STM32F103 藍色葯丸的 PB1 端口。 第一步,我想在 reset_handler 子程序中初始化堆棧指針,然后執行 LED 相關代碼。 在 APB2_ENR 寄存器上使能 RCC,分別配置 GPIO_CRL 和 GPIO_ODR 寄存器。 代碼如下,但似乎不起作用。 請指教有什么錯誤。

stack_size      =       0x400
stack_start     =       0x20000000+stack_size
gpiob_base      =       0x40010C00
rcc_base        =       0x40021000
rcc_apb2enr     =       rcc_base+0x18
gpio_crl        =       gpiob_base
gpiob_odr       =       gpiob_base+0x0C

                .syntax unified
                .cpu cortex-m3
                .thumb
                .global main
                .global vtable
main:
                ; Enable RCC Clock on ABP2
                LDR R0, =rcc_apb2enr
                AND R0, #0x00000000
                ORR R0, #0x4
                STR R0, [rcc_apb2enr]

                ; Configure GPIO_CRL
                LDR R0, #0x44444444 ; Registry reset value
                STR R0, [gpio_crl] ; Reset register
                LDR R0, #0x2
                LDR R1, =gpio_crl ; Load register
                ORR R1, R0 ; set bit 2 - on
                STR R1, [gpio_crl]

                ; Configure GPIOB_ODR
                LDR R0, #0x0 ; set reset value
                STR R0, [gpiob_odr] ; reset register
                LDR R0, #0x2
                LDR R1, =gpiob_odr
                ORR R1, R0
                STR R1, [gpiob_odr]
vtable:
        .word   stack_start
        .word   reset_handler

reset_handler:
                LDR R0, =stack_start
                MOV SP, R0

您錯誤地從文字指向的地址加載文字。

=rcc_apb2enr表示 ROM 中的地址,該地址是您存儲寄存器地址的程序的一部分。 您需要先加載它,然后從它指向的地址加載值。 然后,您可以寫回相同的地址。

更改兩條指令:

LDR R0, =rcc_apb2enr
...
... change the value of R0
...
STR R0, [rcc_apb2enr]

類似於:

LDR R0, =rcc_apb2enr
LDR R1, [R0]
...
...change the value of R1
...
STR R1, [R0]

(此外,您的 AND 指令將啟用寄存器的先前內容清零 - 這可能不是您想要的。要啟用某些東西,您只需要設置位。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM