首页 > 解决方案 > 指向数组 C 中寄存器值的指针

问题描述

我正在使用 STM32F303RE。我有以下数组:

int regvals[] = { GPIOA->MODER, GPIOA->OTYPER, GPIOA->OSPEEDR, GPIOA->PUPDR, GPIOA->IDR, GPIOA->ODR, GPIOA->BSRR, GPIOA->LCKR, GPIOA->AFR, GPIOA->AFR, GPIOA->BRR };

现在我想写入这些寄存器之一。为此,我有以下代码:

int *writeVal;
writeVal = &regvals[index];
*writeVal = value;

其中 value 是我要设置的值的 int 。

之后读取寄存器的值时,它仍然与“写入”它之前相同。所以由于某种原因,该值没有在寄存器中设置。

标签: arrayscpointersstm32

解决方案


  1. 这段代码不符合你的想法。它读取一次寄存器的值(在初始化期间),然后它只是与硬件寄存器无关的整数数组。

&regvals[index]只是引用这个与硬件寄存器无关的整数数组的元素。

如果您想保留对所需寄存器的引用:

volatile uint32_t *regrefs[] = { &GPIOA->MODER, &GPIOA->OTYPER, &GPIOA->OSPEEDR, &GPIOA->PUPDR, &GPIOA->IDR, &GPIOA->ODR, &GPIOA->BSRR, &GPIOA->LCKR, &GPIOA->AFR, &GPIOA->AFR, &GPIOA->BRR };
volatile uint32_t *writeVal;
writeVal = regrefs[index];
*writeVal = value;

请记住BSRR&BRR寄存器是只写的


推荐阅读