2024-12-02 05:33 AM - last edited on 2024-12-02 06:14 AM by SofLit
Hello ,
I am working with stm32h747.
M4 .ld File
FLASH (rx) : ORIGIN = 0x08100000, LENGTH = 1024K
M7 .ld File
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
With the above settings I can run Core M7 and M4 properly.
I need more flash on the m7 side and I want to separate the flash as follows
M4 .ld File
FLASH (rx) : ORIGIN = 0x081E0000, LENGTH = 128K
M7 .ld File
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1896K
I also make adjustments with cube programer as in the picture.
Core m7 works but m4 doesn't seem to work.I think I'm missing something or doing something wrong. Can you help me?
Codes are as follows
CM4 Main Code :
int main(void)
{
MPU_Config();
__HAL_RCC_HSEM_CLK_ENABLE();
HAL_HSEM_ActivateNotification(__HAL_HSEM_SEMID_TO_MASK(HSEM_ID_0));
HAL_PWREx_ClearPendingEvent();
HAL_PWREx_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFE, PWR_D2_DOMAIN);
__HAL_HSEM_CLEAR_FLAG(__HAL_HSEM_SEMID_TO_MASK(HSEM_ID_0));
HAL_Init();
MX_MDMA_Init();
MX_DMA_Init();
MX_GPIO_Init();
MX_SPI1_Init();
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(100);
}
}
int main(void)
{
int32_t timeout;
MPU_Config();
SCB_EnableICache();
SCB_EnableDCache();
timeout = 0xFFFF;
while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) == RESET) && (timeout-- > 0));
HAL_Init();
SystemClock_Config();
PeriphCommonClock_Config();
__HAL_RCC_HSEM_CLK_ENABLE();
HAL_HSEM_FastTake(HSEM_ID_0);
HAL_HSEM_Release(HSEM_ID_0,0);
timeout = 0xFFFF;
while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) == RESET) && (timeout-- > 0));
if ( timeout < 0 )
{
Error_Handler();
}
MX_GPIO_Init();
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_1);
HAL_Delay(100);
}
}
2024-12-02 06:13 AM
Hello,
First in next time, please use </> button to paste your code.
Second,
Don't modify option bytes. Keep the default boot address:
Just use the linker file as you did:
FLASH (rx) : ORIGIN = 0x081E0000, LENGTH = 128K
I'm editing your post then.
2024-12-03 12:36 AM
Okay, I'll use this for the code area now.(</>)
As you said, I only changed the CM4 .ld file. The code 0x081e0000 is loaded to this address. I can verify this with cube programer. I do not change the Option bytes. Default boot address(0x08100000 ). But still CM4 is not working.
2024-12-03 12:46 AM - edited 2024-12-03 12:49 AM
@snnzdmr1 wrote:
I do not change the Option bytes. Default boot address(0x08100000 ). But still CM4 is not working.
Sorry, this is not the default option byte value for boot address and I think 'e' in 0x081E0000 came from your configuration:
From the RM. The factory value is 0x0810 while you have 0x081e.
2024-12-03 01:01 AM
Yes. The default address for M4 is 0x081E0000. My goal is to allocate more flash for M7. 1024 kbytes is not enough for me. I want to decrease the flash of M4 and increase the flash of M7. For this, I want to start m4 from this address 0x081E0000.
2024-12-03 01:09 AM
This is what I want to tell you from my first post. You don't have to manage that in option bytes just do it in the linker file.
2024-12-03 01:19 AM
I do what you say.M4 still not working.I did not change the options bytes.
My settings are exactly as follows.
M4 core not working.
FLASH (rx) : ORIGIN = 0x081E0000, LENGTH = 128K
2024-12-03 01:31 AM
Ok,
Please try this simple blink LED example in attachment (I used NUCLEO-H745):
- I used SMPS as power configuration
- Yellow LED (PE1) toggling with CM4
- Green LED (PB0) toggling with CM7
2024-12-03 02:04 AM
2024-12-04 09:53 AM
Unfortunately I don't have to NUCLEO-H745 try this code.
You tried it and if it works I will focus on finding my own mistake. Thank you very much for your detailed help.