[英]arm assembly cannot access GPIO
我想点亮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
我用ST-Link调试器检查了地址0x40021800中的内存,但是STR命令后没有任何变化,尽管寄存器的值正确。 ST的文档是如此糟糕,完全是零示例。 在Internet 0中有关程序集和ARM的信息。 在书中,有一个关于UART的例子,但没有关于GPOI的例子。 我花了整整一个太阳,现在正变得疯狂。 嗨!!!
首先,我想确保您了解此网站 。 如果还没有的话,请从左栏中获取“ 编程手册 ”。 但是,更重要的是您获得了“ 用户手册 ”。
现在,为了获得有关ARM Cortex-M指令集(由ARM提供)的良好文档,请转至ARM信息中心并查看《 Cortex-M4通用用户指南》 。 《 Cortex-M4技术参考手册》中还有计时信息。
不幸的是,由于我没有使用STM微控制器的经验,因此我无法为您提供直接的问题答案,但是无论如何我都能为您提供帮助。
有关GPIO引脚的信息,请打开也称为RM0090的用户手册(DM00031020.pdf),并阅读第8章。
我还找到了GPIO教程 ,这可能会有所帮助。
尽管我还没有使用过STM,但我认为它们可以构成出色的微控制器。 而且这不是我所见过的最糟糕的文档(因此,您很幸运)。
通过阅读我提供的资源可以告诉我的是,您需要...
由于我的知识不是专门针对该产品的,因此我无法走得更远。 -但是您也可以在my.st.com和ARM Connected Community上找到帮助。
在STM32中(与大多数Cortex-M3微控制器一样),您首先需要为外设启用时钟以修改其任何寄存器。 因此,在GPIOG寄存器中进行任何设置之前,您需要在适当的RCC寄存器(可能为RCC-> AHBENR)中启用时钟,该位应为RCC_AHBENR_GPIOGEN。 这几乎适用于所有外设,例如GPIO,I2C,SPI,定时器等。在99%的情况下,这些“时钟使能”位的默认值为0(除少数例外)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.