在C中与STM32芯片的内存交互

我想与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)这些function和变量是否会根据我正在处理的STM32芯片而改变?

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

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

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

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

编辑:我可能已将您指向错误的ID寄存器。 Clifford在评论中指出,在地址0xE0042000处有一个MCU器件ID寄存器。 该MCU器件ID寄存器与Unique器件ID寄存器不同,它在参考手册的第1782页的48.6.1节中有所描述。

您可以在这里查看: http : //www.openstm32.org

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

我的AVR代码中有类似的东西:

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

有魅力。