Hi to all,
I have a self made STM32F750N8H6 board with external SDRAM, QSPI Flash and a 800x480 TFT Panel attached. Panel displays Images, code is executing from SDRAM, Framebuffer is in SDRAM, too. SO far everything looks good.
While this hardware was being manufactured I started application development on a STM32F746 Discovery board. STemWin applicaiton was running well there using FreeRTOS.
SDRAM is mapped to 0x6000000 to allow code execution. That worked well on the discovery board.
Now I tried to port that application to my STM32F750 board, which has quite different I/Os and such, so I created a new Project with STM32CubeMX (unfortunately the latest version that doesnÄt support graphics initialization any more) and copied all related files from my dicovery-board project the new one (or at least I assume I did so).
Project compiles well. But as soon as the StartDefaultTask() calls GUI_Init() this function never returns. Stopping the debugger it tells me that GUI_Init() stops in an intened endless loop! I marked the position of the program counter with an error on the code below:
Display All
Since I do not have source code of GUI_Init() my question is: What causes GUI_Init() to stop in an endless loop? I guess I am missing something very basic, a simple error I made while porting my project from discovery to final hardware, but I have no clue where to start looking for.
I have read the threads regarding MPU settings and HardFaults. But I am definitely not stuck in a HardFault, to me it looks like GUI_Init() never returns intentionally.
Thank you all for any hint.
Regards
Thomas
I have a self made STM32F750N8H6 board with external SDRAM, QSPI Flash and a 800x480 TFT Panel attached. Panel displays Images, code is executing from SDRAM, Framebuffer is in SDRAM, too. SO far everything looks good.
While this hardware was being manufactured I started application development on a STM32F746 Discovery board. STemWin applicaiton was running well there using FreeRTOS.
SDRAM is mapped to 0x6000000 to allow code execution. That worked well on the discovery board.
Now I tried to port that application to my STM32F750 board, which has quite different I/Os and such, so I created a new Project with STM32CubeMX (unfortunately the latest version that doesnÄt support graphics initialization any more) and copied all related files from my dicovery-board project the new one (or at least I assume I did so).
Project compiles well. But as soon as the StartDefaultTask() calls GUI_Init() this function never returns. Stopping the debugger it tells me that GUI_Init() stops in an intened endless loop! I marked the position of the program counter with an error on the code below:
Source Code
- GUI_Init:
- 60034c25: push {r4, r7, lr}
- 60034c27: sub sp, #12
- 60034c29: add r7, sp, #0
- 60034c2b: ldr r2, [pc, #336] ; (0x60034d7c <GUI_Init+344>)
- 60034c2d: ldr r3, [pc, #332] ; (0x60034d7c <GUI_Init+344>)
- 60034c2f: ldr r3, [r3, #0]
- 60034c31: bic.w r3, r3, #1
- 60034c35: str r3, [r2, #0]
- 60034c37: ldr r3, [pc, #328] ; (0x60034d80 <GUI_Init+348>)
- 60034c39: ldr r3, [r3, #0]
- 60034c3b: ubfx r3, r3, #0, #11
- 60034c3f: movw r2, #1097 ; 0x449
- 60034c43: cmp r3, r2
- 60034c45: ite eq
- 60034c47: moveq r3, #1
- 60034c49: movne r3, #0
- 60034c4b: uxtb r2, r3
- 60034c4d: ldr r3, [pc, #304] ; (0x60034d80 <GUI_Init+348>)
- 60034c4f: ldr r3, [r3, #0]
- 60034c51: ubfx r3, r3, #0, #11
- 60034c55: movw r1, #1105 ; 0x451
- 60034c59: cmp r3, r1
- 60034c5b: ite eq
- 60034c5d: moveq r3, #1
- 60034c5f: movne r3, #0
- 60034c61: uxtb r3, r3
- 60034c63: orrs r3, r2
- 60034c65: uxtb r3, r3
- 60034c67: mov r1, r3
- 60034c69: ldr r3, [pc, #276] ; (0x60034d80 <GUI_Init+348>)
- 60034c6b: ldr r3, [r3, #0]
- 60034c6d: ubfx r3, r3, #0, #11
- 60034c71: movw r2, #1106 ; 0x452
- 60034c75: cmp r3, r2
- 60034c77: ite eq
- 60034c79: moveq r3, #1
- 60034c7b: movne r3, #0
- 60034c7d: uxtb r3, r3
- 60034c7f: orrs r3, r1
- 60034c81: cmp r3, #0
- 60034c83: beq.n 0x60034ca6 <GUI_Init+130>
- 60034c85: ldr r3, [pc, #252] ; (0x60034d84 <GUI_Init+352>)
- 60034c87: movs r2, #1
- 60034c89: str r2, [r3, #0]
- 60034c8b: nop
- 60034c8d: ldr r3, [pc, #244] ; (0x60034d84 <GUI_Init+352>)
- 60034c8f: ldr r3, [r3, #0]
- 60034c91: cmp r3, #0
- 60034c93: bne.n 0x60034c8c <GUI_Init+104>
- 60034c95: ldr r3, [pc, #240] ; (0x60034d88 <GUI_Init+356>)
- 60034c97: ldr r2, [pc, #244] ; (0x60034d8c <GUI_Init+360>)
- 60034c99: str r2, [r3, #0]
- 60034c9b: ldr r3, [pc, #236] ; (0x60034d88 <GUI_Init+356>)
- 60034c9d: ldr r3, [r3, #0]
- 60034c9f: ldr r2, [pc, #240] ; (0x60034d90 <GUI_Init+364>)
- 60034ca1: cmp r3, r2
- 60034ca3: beq.n 0x60034cd6 <GUI_Init+178>
- => 60034ca5: b.n 0x60034ca4 <GUI_Init+128>
- 60034ca7: ldr r3, [pc, #236] ; (0x60034d94 <GUI_Init+368>)
- 60034ca9: ldr r3, [r3, #0]
- 60034cab: ubfx r3, r3, #0, #11
- 60034caf: cmp.w r3, #1104 ; 0x450
Since I do not have source code of GUI_Init() my question is: What causes GUI_Init() to stop in an endless loop? I guess I am missing something very basic, a simple error I made while porting my project from discovery to final hardware, but I have no clue where to start looking for.
I have read the threads regarding MPU settings and HardFaults. But I am definitely not stuck in a HardFault, to me it looks like GUI_Init() never returns intentionally.
Thank you all for any hint.
Regards
Thomas