目前,我正试图使用PortentaH7数据表中的寄存器对STM32H747进行编程。到目前为止,我只尝试访问一个核心(M7),现在我想尝试同时使用这两个核心。关于如何同时使用这两种方法,有很多例子,但没有一个例子说明CORE_CM7和CORE_CM4是在哪里定义的。以下是我迄今所做的工作:
volatile uint32_t* const SYSCFG_UR1 = (uint32_t *) 0x58002704;
volatile uint32_t* const RCC_GCR = (uint32_t *) 0x58024400A0;//to boot M4
void boot_CM4(void){
*SYSCFG_UR1 = (1<<0);//BCM4 = 1;
*RCC_GCR|=(1<<3);//BOOT_C2
}这个函数应该引导M4核心。我在网上读到的大部分代码都使用:
#ifdef CORE_CMx
#endif并且它允许他们与CORE_CMx一起工作。我的问题是CORE_CMx是如何定义的。这里的数据表:https://www.st.com/resource/en/reference_manual/dm00176879-stm32h745755-and-stm32h747757-advanced-armbased-32bit-mcus-stmicroelectronics.pdf让我认为我应该使用SYSCFG_UR3寄存器来编写核心的起始地址,以便定义CORE_CMx。但是,数据表中几乎没有关于此寄存器的任何信息。任何提示都是非常感谢的。
发布于 2022-04-15 13:02:22
经过一些研究,我发现标识符CORE_CMx是由IDE定义的,并得到了与以下内容等价的内容:
#ifdef 1您所需要做的(在Arduino IDE上)只需转到、Tools>boards>Arduino、Mbed、Portenta、,并选择您想要编程的核心。在这里,标识符被认为是被定义的。在使用CM4之前,仍然需要在CM7上引导它。
(快速检查:如数据表中定义的,在编译Flash内存地址时,CM4为0x08100000,CM7为0x08000000 )。
谢谢你的帮助。
https://stackoverflow.com/questions/71881916
复制相似问题