arrays - 指向数组 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;
其中 value 是我要设置的值的 int 。
之后读取寄存器的值时,它仍然与“写入”它之前相同。所以由于某种原因,该值没有在寄存器中设置。
解决方案
- 这段代码不符合你的想法。它读取一次寄存器的值(在初始化期间),然后它只是与硬件寄存器无关的整数数组。
®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
寄存器是只写的
推荐阅读
- reddit - I want to scrape reddit data using praw. I am getting raise ResponseException(response) error after adding the for loop
- python - 在python中修改同一个脚本中的两个文件
- html - 如何在 .html 中实现两个 QuerySet
- ios - 除了第一个单元格之外,重新加载表格视图中所有行的最有效方法是什么?
- ios - 如何在 Swift 中为 UISlider 的值添加百分号
- python-3.x - 来自 NLTK 2.0 的 sourcedstring 发生了什么?
- java - 使用多线程 Java
- javascript - 谷歌日历添加带有重定向网址的事件
- pytorch - SageMaker Neo 自定义 model_fn 和 predict_fn
- android - XML中textView中字符串的颜色部分