Skip to main content
Ahaji.1
Associate II
April 6, 2020
Question

Problem with running STemWin in STM32F103ZET from external SRAM

Hi everyone

I'm using stm32f103zet to run emwin gui. In the first step i configured everything for running from internal RAM and program worked fine and gui is displays components like progress bar and ...., but when i changed linker command file to map gui memory to external SRAM everything went wrong. I checked connection with SRAM and it was ok. I checked 8,16,32 bit memory accessing integrity by following code:

this code is running well

build analyzer tool of cubeide shows memory usage as follows:

0693W000000VPiFQAW.png

in this case program run GUI_Init() function successfully and memory allocation and LCD initialization are done, (The LCD is turn to black after GUI_Init() Execution just like when i use the internal RAM as gui memory) but nothing else happens.

What is the problem?

Thank you so much

This topic has been closed for replies.

2 replies

Tesla DeLorean
Guru
April 6, 2020

>>..STM32F103ZET .. external SDRAM

This would surprise me, I'm pretty sure the F1 series does not support SDRAM, sure it is not just a Static RAM?

>>this code is running well

The real trick is to be able to read back the content

>>What is the problem?

Hard to know without actually doing some debugging.

Is the content being initialized? Is there a hard fault?

Where does the code go in the "nothing happening" path. Perhaps output telemetry via a USART or SWO/SWV channel

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
Ahaji.1
Ahaji.1Author
Associate II
April 6, 2020

>>..This would surprise me, I'm pretty sure the F1 series does not support SDRAM, sure it is not just a Static RAM?

Yes, Sorry, You are right, it is a SRAM (not SDRAM)

>>..The real trick is to be able to read back the content

yes, I checked that through this code:

int main()
{
// some codes
 
	uint8_t static Var8[1000]__attribute__((section(".GUI_RAM")));
	uint16_t static Var16[1000]__attribute__((section(".GUI_RAM")));
	uint32_t static Var32[1000]__attribute__((section(".GUI_RAM")));
 
	uint8_t Read8[1000];
	uint16_t Read16[1000];
	uint32_t Read32[1000];
 
// other codes 
 
	for(ii=0;ii<1000;ii++)
	{
		Var8[ii]=ii;
		Var16[ii]=ii;
		Var32[ii]=ii;
	}
 
	for(ii=0;ii<1000;ii++)
	{
		Read8[ii] = Var8[ii];
		Read16[ii] = Var16[ii];
		Read32[ii] = Var32[ii];
	}
 
// break point here
  
// codes ... 
}

I could read back the all content of the Var8,Var16 and Var32. as follows:

0693W000000VPwCQAW.png

  

>>..Is the content being initialized?

Content of what?

>>.. Is there a hard fault?

No, program continues to execution as normal but nothing displays on the screen

>>..Where does the code go in the "nothing happening" path

program is in the while loop as follows:

0693W000000VPwRQAW.png

I placed break point inside the while(1) to making sure that program is running.

  

By the way, the same code runs very well with internal RAM.

Thanks

Ali.H