arm assembly无法访问GPIO

时间:2014-11-09 20:32:22

标签: assembly arm

我想点亮STM32F4发现板上的LED。处理器是STM32F429ZIT6。我的汇编代码如下:

    TTL LLED
    AREA Myprog, CODE, READONLY

    ENTRY
    EXPORT __main

__main
        LDR r5,=0x40021800; MODERG
        LDR r7,=0x4002180C; GPIOG_PUPDR
        MOV r8,#0x04000000
        STR r8, [r5]
        STR r8, [r7]
        LDR r8,=0x00000000; to set PG13
        STR r8,[r6]
        MOV r5,#0x20000000
        MOV r8,#0xFFFFFFFF
        STR r8, [r5]
        END

我用ST-Link调试器检查了地址0x40021800中的内存,但是在STR命令之后没有变化,尽管寄存器的值是正确的。 ST的文档是如此糟糕,完全没有例子。在Internet 0关于程序集和ARM的信息。在书中有一个关于UART的例子,但没有关于GPOI的例子。我花了整个太阳,我现在变得疯狂。 HEEEEEEELP !!!!

2 个答案:

答案 0 :(得分:4)

首先,我想确保你知道this site。 如果您还没有,请从左栏中获取“Programming Manual”。 但更重要的是你得到了“User's Manual”。

现在,为了获得有关ARM Cortex-M指令集(由ARM提供)的详细文档,请访问ARM信息中心并查看Cortex-M4 Generic User GuideCortex-M4 Technical Reference Manual

中还有时间信息

不幸的是我无法直接回答这个问题,因为我没有STM微控制器的经验,但无论如何我都能为你提供帮助。

有关GPIO引脚的信息,请打开用户手册(DM00031020.pdf),也称为RM0090,并阅读第8章。

我还找到了GPIO tutorial,这可能会有所帮助。

虽然我还没有使用STM,但我认为它们可以制造出精密的微控制器;这不是我见过的最糟糕的文件(所以你很幸运)。

通过阅读我提供的资源,我可以告诉你,你需要......

  1. 非常重要:打开GPIO的时钟电源。如果不这样做,则无法访问任何寄存器;这可能是错的。
  2. 设置您即将使用的GPIO引脚的速度(参见参考手册)
  3. 配置引脚(看起来你已经掌控了它)
  4. 写入引脚值以更改它们或读取引脚的状态。
  5. 由于我的知识并不是特定于这个产品,我真的不能走得更远。 - 但您也可以在my.st.comARM Connected Community

    找到帮助

答案 1 :(得分:4)

在STM32中(与大多数Cortex-M3微控制器一样),您首先需要为外设启用时钟来修改其任何寄存器。因此,在GPIOG寄存器中设置任何内容之前,需要在相应的RCC寄存器中启用该时钟,可能是RCC-> AHBENR,该位将为RCC_AHBENR_GPIOGEN。这几乎适用于任何外设,如GPIO,I2C,SPI,定时器......这些"时钟使能的默认值" 99%的情况下比特为0(除少数例外)。