Openocd / GDB cortex-m3调试问题

时间:2014-04-15 08:43:49

标签: debugging gdb stm32 cortex-m3 openocd

我写了一个非常简单的程序来打开STM32L-discovery工具包上的2个LED(GPIO端口B)。

我使用GNU工具链和openocd进行调试。

编译和链接没问题。我链接了代码,使得LMA和VMA位于ram区域。

我在GDB-insight中打开了.elf,插入了一些断点并使用'openocd-x64-0.7.0 -f stm32ldiscovery.cfg'

运行openocd

在gdb提示符下,我运行了以下内容:

(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输出寄存器({{1 }})...

我能够逐步完成汇编指令,看到寄存器(r0,r1 ......)正在更新为预期值......

但是当我来到0x40020414str r2, [r1]基本上是将新值写入外设寄存器时,我发现这些外围存储器位置(str r2, [r1]0x40020400)没有更新为新值(0x400204140x55555555)。

在gdb提示符下,我尝试运行0x0000FFFF并确认此内存位置没有新值monitor mdw 0x40020400。我也试过监视器0x55555555来写内存位置,但无济于事......我也试过设置mww 0x40020400 0x55555555但是也无济于事......

任何人都可以帮助我吗?是一些openocd / gdb配置或设置我错了吗?

1 个答案:

答案 0 :(得分:0)

好的,发现了问题。

我没有启用GPIOB时钟。

我在访问/修改GPIOB寄存器之前通过RCC_AHBENR寄存器启用它,如上面的代码......现在它可以工作。