指向数组 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 = ®vals[index];
*writeVal = value;
其中值是一个整数,其中包含我要设置的值。
之后读取寄存器的值时,它仍然与“写入”之前相同。因此由于某种原因,该值未在寄存器中设置。
- 此代码与您的想法不符。它读取一次寄存器的值(在初始化期间),然后它只是与硬件寄存器无关的整数数组。
®vals[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
寄存器是 只写
我正在使用 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 = ®vals[index];
*writeVal = value;
其中值是一个整数,其中包含我要设置的值。
之后读取寄存器的值时,它仍然与“写入”之前相同。因此由于某种原因,该值未在寄存器中设置。
- 此代码与您的想法不符。它读取一次寄存器的值(在初始化期间),然后它只是与硬件寄存器无关的整数数组。
®vals[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
寄存器是 只写