arm 组件无法访问 GPIO

jud*_*acl 1 assembly arm

我想点亮 STM32F4-discovery 板上的 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
Run Code Online (Sandbox Code Playgroud)

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

小智 5

首先,我想确保你知道这个网站。如果您还没有,请从左栏中获取“编程手册”。但更重要的是你得到了“用户手册”。

现在,为了获得有关 ARM Cortex-M 指令集(由 ARM 提供)的良好文档,请转到 ARM 信息中心并查看Cortex-M4 通用用户指南Cortex-M4 技术参考手册中也有时序信息

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

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

我还找到了一个GPIO 教程,可能会有所帮助。

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

通过阅读我提供的资源,据我所知,您需要...

  1. 非常重要:打开 GPIO 的时钟电源。如果不这样做,则无法访问任何寄存器;这可能是出了什么问题。
  2. 设置您将要使用的 GPIO 引脚的速度(请参阅参考手册)
  3. 配置引脚(似乎您已经控制住了)
  4. 写入引脚值以更改它们或读取引脚的状态。

由于我对这个产品的了解并不具体,我真的不能走得更远。- 但您也可以在my.st.comARM Connected Community 上找到帮助