我想与STM32芯片的内存 STM32L476互动,首先要读取并存储其电子签名(MCU_ID)和然后在其内存中写入数据。我正在使用链接到JTAG STM32QFP64的ST-LINK套接字 我在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)的答案?
答案 0 :(得分:1)
STM为每个MCU发布了几种类型的文档,我很难猜测哪个文档将包含我正在寻找的信息。所以我在文档中搜索相关的关键词,直到我缩小信息范围。最重要的两个文件是数据表和参考手册,所以我总是从它们开始。
在这种情况下,我开始在Datasheet搜索" MCU_ID"什么都没找到,所以我搜索了更通用的#34; ID"并发现它与更具体的关键字" unique"相关联。我搜索了数据表以获得" unique"但是没有找到寄存器地址信息。然后,我在Reference Manual搜索了"唯一ID"并在第1808页的第49.1节中找到了寄存器的基址。
是的,这样的细节可以从一个STM MCU变为下一个,因此您需要确保使用正确的数据表和参考手册。但是,STM提供了一个名为STM32Cube的硬件抽象层(HAL),它抽象出类似于此的MCU特定细节,并允许您调用更多与MCU无关的通用功能。
编辑:我可能已将您指向错误的ID寄存器。 Clifford在评论中指出,在地址0xE0042000处有一个MCU设备ID寄存器。该MCU器件ID寄存器与Unique器件ID寄存器不同,它在参考手册的第1782页第48.6.1节中有所描述。
答案 1 :(得分:-1)
你可能想看看这里: http://www.openstm32.org
这部分可能会给你一个提示:
char in_ccram_buffer[1024] __attribute__((section("ccmram")));
我的AVR代码中有类似内容:
const uint16_t tempTable[42] __attribute__((section(".eeprom"))) = ...
有魅力。