1

我想与 STM32 芯片的内存STM32L476进行交互,首先读取并存储其电子签名(MCU_ID),然后将数据写入其内存。我正在使用链接到 JTAG ST-LINK的STM32QFP64插座。 我在 C 方面相当出色,但真正开始嵌入式编程,所以我选择了Atollic Studio IDE,因为它看起来很完整,并且基于我之前已经使用过的 Eclipse。

我的问题是我找不到某种文档列出了我可以用来与芯片交互的函数、变量等。我搜索了 ST 网站上提供的几乎所有 PDF,阅读了 ST 的 GitHub,但由于我是初学者,我可能会错过这些信息,因为我不知道我要搜索的内容是什么样的。

下面的代码是无关紧要的,完全是想象出来的,但它可以帮助理解我正在尝试做的事情,我以某种方式将其描绘成这样:

#define MEMORY_ADRESS_MCU_ID FFFFF // A memory adress ( I should be able to find it in STM32L476 documentation)
#define MEMORY_ADRESS_TO_WRITE FFFF // Same

unsigned extractMCUID() {

   return READ_IN_MEMORY(MEMORY_ADRESS_MCU_ID); // Returns the ID stored in a particular memory adress

}

void writeData(char* d) {

   WRITE_IN_MEMORY(MEMORY_ADRESS_TO_WRITE, d); // Writes data in specified memory adress

}

因此,在这种情况下,甚至更一般地说

1)我应该在哪里寻找这样的文件?

2) 这些函数和变量是否会根据我正在处理的 STM32 芯片而改变?

3)如果不在 StackExchange 上 ,我在哪里可以找到1)2)的答案?

4

2 回答 2

1

STM 为每个 MCU 发布了几种类型的文档,我很难猜测哪个文档将包含我正在寻找的信息。所以我在文档中搜索相关的关键词,直到我缩小信息范围。两个最重要的文件是数据表和参考手册,所以我总是从它们开始。

在这种情况下,我开始在数据表中搜索“MCU_ID”,但一无所获,因此我搜索了更通用的“ID”,发现它与更具体的关键字“unique”相关联。我在数据表中搜索“唯一”,但没有找到寄存器地址信息。因此,我在参考手册中搜索了“唯一 ID”,并在第 1808 页的第 49.1 节中找到了寄存器的基地址。

是的,这样的细节可能会从一个 STM MCU 更改为下一个,因此您需要确保使用正确的数据表和参考手册。但是,STM 提供了一个名为 STM32Cube 的硬件抽象层 (HAL),它抽象出像这样的 MCU 特定细节,并允许您调用更多独立于 MCU 的通用函数。

编辑: 我可能给你指出了错误的 ID 寄存器。Clifford 在评论中指出,地址 0xE0042000 处有一个 MCU 设备 ID 寄存器。此 MCU 设备 ID 寄存器与唯一设备 ID 寄存器不同,它在参考手册第 1782 页的第 48.6.1 节中进行了描述。

于 2017-05-05T13:13:42.687 回答
1

你可能想看看这里: http ://www.openstm32.org

这部分可能会给你一个提示: char in_ccram_buffer[1024] __attribute__((section("ccmram")));

我的 AVR 代码中有类似的内容:

 const uint16_t tempTable[42] __attribute__((section(".eeprom"))) = ...

很有魅力。

于 2017-05-05T12:52:47.963 回答