指向数组 C 中寄存器值的指针

Pointer to register value in array 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;

其中值是一个整数,其中包含我要设置的值。

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

  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;

请记住 BSRRBRR 寄存器是 只写