PlatformIO Community

Configure memory area on STM32

Hello everyone,

I’m trying to upload my program to SRAM on STM32F103RC for debugging purpose. This can be easily done using Keil5.

图片

How can I make this happen with PlatformIO?

The compilation process uses a pre-configured linkerscript that determines where things end up in memory. These are preconfigured for Flash. You’ll need to copy & modify the linkerscript that your exact project is using and point to it using board_build.ldscript in the platformio.ini. You can see the used linkerscript by looking at the -T "path/to/linkerscript" command contained in the final linker command, that is displayed when doing executing the Advanced → Verbose Build project task.

There is no 1-click button for this.

Thanks for your response,

I tried modifying original linker script, the program can be built, but openOCD reported some errors, and the program wont run. My board uses STM32F103RCT6.

The output of openOCD:

swd
Error: stm32f1x.cpu -- clearing lockup after double fault
Polling target stm32f1x.cpu failed, trying to reexamine
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x200001e0 msp: 0x20005000
** Programming Started **
Warn : no flash bank found for address 0x20000000
Warn : no flash bank found for address 0x20000930
** Programming Finished **
** Verify Started **
Error: checksum mismatch - attempting binary compare
embedded:startup.tcl:521: Error: ** Verify Failed **
in procedure 'program' 
in procedure 'program_error' called at file "embedded:startup.tcl", line 582
at file "embedded:startup.tcl", line 521
*** [upload] Error 1

The memory section of my linker script:

MEMORY
{
  RAM    (xrw)    : ORIGIN = 0x20001020,  LENGTH = 0x2800 
  FLASH    (rx)   : ORIGIN = 0x20000200,  LENGTH = 0x1000 
}

Does your MCU have flash at address 0x20000200?

Looking at page #40 here https://www.st.com/resource/en/datasheet/stm32f103rc.pdf

Of course not. I said I want to upload my program into SRAM, not flash. :joy:

Mhm yes that’s a problem that OpenOCD doesn’t allow you to do that. I’ll look into it.

Have you seen this discussion? c - Executing code from RAM in STM32 - Stack Overflow

They define the section as RAM and use a boot mode to executed from RAM, after a few manual tweaks with the debugger.