通过GCC中的结构访问stm32寄存器

2019-07-14 17:17发布

我正在尝试使用带有GCC ARM-none-eabi编译器的C中的STM32F103蓝 {MOD}药丸板来推出我自己的USB设备,但我遇到了一些我想要了解的奇怪行为。我创建了一个结构,用于建模与USB外设相关的端点缓冲区描述符表:typedef struct _EP_BUF_DSCR {    uint32_t ADDR_TX;    uint32_t COUNT_TX;    uint32_t ADDR_RX;    uint32_t COUNT_RX;} EP_BUF_DSCR;我已经创建了一个指向其中一个结构的指针,并将其设置为解决MCU的USB数据包存储区的开头:EP_BUF_DSCR *EP0_DSCR = (EP_BUF_DSCR *) 0x40006000;所以现在我可以通过取消引用相应的字段并为它们分配值来设置ADDR_TX和ADDR_RX字段。但是,当我尝试使用COUNT_RX字段执行此操作时,它似乎没有任何效果:// debugger memory view shows register as set to 0 after running this:EP0_DSCR->COUNT_RX = 0x8400;  但我可以通过直接创建指针并取消引用它来更改此寄存器中的值:// debugger memory view shows register set to correct value after running:*((uint32_t *)(0x40006000 + 12)) = 0x8400;  有人可以提供一些有关为何发生这种情况的见解吗 ,是我无意中依赖于未记录的编译器行为?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。