2014-04-15 176 views
0

我寫了一個非常簡單的程序來打開STM32L發現套件上的2個LED(GPIO端口B)。Openocd/GDB cortex-m3調試問題

我使用GNU工具鏈和openocd進行調試。

編譯和鏈接就OK了。我將代碼連接起來,使得LMA和VMA位於公羊區域。

我打開了GDB-洞察力.elf,插入一些斷點,並與'openocd-x64-0.7.0 -f stm32ldiscovery.cfg'

在gdb的提示OpenOCD的跑,我跑了以下內容:

(gdb)target remote localhost:3333 

(gdb)monitor reset halt 

(gdb)load 

(gdb)continue 

(gdb)stepi 

... 

Full source code and object files here

=== ================= ...部分源代碼... ======================= ========

const1: .word 0x40020400 @@GPIOB base mode register 

const2: .word 0x55555555 

const3: .word 0x40020414 @@GPIOB base output register 

const4: .word 0x0000FFFF 

... 
... 
... 

reset_handler: 

    ldr r0, =const2 
    ldr r2, [r0] @r2=const2 
    ldr r0, =const1 
    ldr r1, [r0] @r1=const1 
    str r2, [r1]     @@set mode to output 

    ldr r0, =const4 
    ldr r2, [r0] @r2=const4 
    ldr r0, =const3 
    ldr r1, [r0] @r1=const3 
    str r2, [r1]     @@set output register to 1 

loop: 
b loop 

================================================ ===

基本上,我設置GPIO端口B(0x40020400),以輸出模式(0x55555555),然後設置「1'(0x0000FFFF)到端口B輸出寄存器(0x40020414)...

我能夠逐步通過彙編指令,並看到寄存器(r0,r1 ...)正在更新到預期值...

但是當我來到str r2, [r1]str r2, [r1]這基本上是寫入新值的外設寄存器,我發現這些外圍al存儲位置(0x400204000x40020414)未更新爲新值(0x555555550x0000FFFF)。

從gdb提示符下,我試着運行monitor mdw 0x40020400並確認這個內存位置沒有新值0x55555555。我也試過顯示器mww 0x40020400 0x55555555寫內存的位置,但無濟於事...我也試過設置*0x40020400 = 0x55555555,但也無濟於事...

任何人都可以幫我嗎?它是一些openocd/gdb配置或設置我錯了?

回答

0

好的,發現問題了。

我沒有啓用GPIOB時鐘。

在訪問/修改GPIOB寄存器之前,我通過RCC_AHBENR寄存器使能了它,就像上面的代碼一樣......現在它起作用了。