我想与STM32芯片的内存STM32L476进行交互,首先读取和存储其电子签名(MCU_ID),然后在内存中写入数据。我正在使用链接到JTAG ST-链接的STM32QFP64套接字。
我在C方面很好,但真正开始了嵌入式编程,所以我选择了Atollic 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)?
发布于 2017-05-05 13:13:42
STM为每个MCU发布几种类型的文档,我很难猜测哪个文档将包含我正在寻找的信息片段。因此,我在文档中搜索相关关键词,直到缩小信息范围。两个最重要的文件是数据表和参考手册,所以我总是从它们开始。
在本例中,我开始搜索数据表中的"MCU_ID“,但一无所获,因此我搜索了更通用的"ID”,并发现它与更具体的关键字“唯一”相关联。我在数据表中搜索“唯一”,但没有找到注册地址信息。于是,我在参考手册中搜索了“唯一ID”,并在1808页49.1节中找到了寄存器的基本地址。
是的,像这样的细节可以改变从一个STM MCU到下一个,所以你需要确保你使用的是正确的数据表和参考手册。然而,STM提供了一个名为STM32Cube的硬件抽象层(HAL),它抽象出单片机的特定细节,并允许您调用更多独立于MCU的通用函数。
编辑:,我可能向您指出了错误的ID寄存器。Clifford在评论中指出,地址0xE0042000有一个MCU设备ID寄存器。这个MCU设备ID寄存器不同于唯一的设备ID寄存器,它在参考手册第1782页第48.6.1节中进行了描述。
发布于 2017-05-05 12:52:47
您可能想看看这里:http://www.openstm32.org
这部分可能给你一个提示:char in_ccram_buffer[1024] __attribute__((section("ccmram")));
我的AVR代码中有类似的内容:
const uint16_t tempTable[42] __attribute__((section(".eeprom"))) = ...很有魅力。
https://stackoverflow.com/questions/43805259
复制相似问题