Skip to main content
MauFanGilaMedical
Associate III
April 30, 2025
Question

HardFault_Handler when enable LWIP and touchgfx

  • April 30, 2025
  • 8 replies
  • 1167 views

Hello guys.

 

I've bought Riverdi 12.1” board that mounts STM32H757XIH6.

 

I developed graphic part and I use uSD, and USB Mass-Storage without any problems.

 

I use FreeRTOS and FatFS.

 

Now it's time to use Ethernet, so I bought PoE - Riverdi, enabled LWIP library following instructions on the video How to use Ethernet on Riverdi STM32 Embedded Displays || PoE Add-on.

 

I set MX in this way:

MauFanGilaMedical_0-1746012830072.pngMauFanGilaMedical_1-1746012861994.png

 

MauFanGilaMedical_2-1746012895732.pngMauFanGilaMedical_3-1746012927438.png

The linker script

 

MauFanGilaMedical_4-1746012987404.png

ethernetif.c

MauFanGilaMedical_5-1746013035117.png

 

I compiled and I connect ethernet cable and it seems work poperly because if I ping I obtain right answer,

 

but! sometimes processor goes to HardFault

 

I've writed simple TCP server that accept connection on port 100 and send "Hello" every second.

 

MauFanGilaMedical_7-1746013397900.png

 

When I try to connect with TERA TERM it goes immediately on HardFault.

 

MauFanGilaMedical_8-1746013683113.png

 

Here the code of ethernet_input

 

MauFanGilaMedical_9-1746013734859.png

 

 

Can someone Help me ?

 

Thankyou in advance

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8 replies

TDK
Super User
April 30, 2025

Cuold be insufficient stack size.

Look at the ethhdr pointer and ensure it's valid. If it's not, set up a hardware watchpoint to see where and when it's changed.

"If you feel a post has answered your question, please click ""Accept as Solution""."
MauFanGilaMedical
Associate III
April 30, 2025

what do you intend ?  set up a hardware watchpoint to see where and when it's changed

how can I see whene it's changed ?

MauFanGilaMedical
Associate III
April 30, 2025

Yes @TDK I watch the address: is 0x28000045

 

MauFanGilaMedical_1-1746016800628.png

 

 

and ethhdr->type is 0x24001b64

 

MauFanGilaMedical_2-1746016856829.png

 

how to increase stack size for tcpip_thread ? maybe TCPIP_THREAD_STACKSIZE ?

 

MauFanGilaMedical_0-1746017312561.png

 

 

 

 

MauFanGilaMedical
Associate III
April 30, 2025

MauFanGilaMedical_0-1746018284243.png

 

it seems msg->msg.inp.p point to invalid address: 0x28 ... 

 

MauFanGilaMedical_1-1746018424563.png

 

No RAM @ 0x28...

MauFanGilaMedical_2-1746018478517.png

 

 

 

 

MauFanGilaMedical
Associate III
April 30, 2025

Another question that I want to higlight, counld be that I have not enabled D-Cache ?

 

MauFanGilaMedical_0-1746023204862.png

 

TDK
Super User
April 30, 2025

Here's how to set a watchpoint:

https://community.st.com/t5/stm32cubeide-mcus/how-to-add-the-watchpoint/m-p/310217/highlight/true#M16720

You want to watch for the pointer to change, so add &ethhdr as the expression.

"If you feel a post has answered your question, please click ""Accept as Solution""."
MauFanGilaMedical
Associate III
May 5, 2025

Watchpoint is disabled maybe ethhdr is a local variable 

 

MauFanGilaMedical_0-1746425125783.png

 

GaetanGodart
Technical Moderator
May 2, 2025

Hello @MauFanGilaMedical ,

 

Have you increase the stack size from STM32CubeMX as you show on one of your messages ?

Are you able to make the PoE (and ethernet in general) work without TouchGFX (or other implementations) ?

Can you check that the types on line 113 match, also check that ethhdr->type is properly initialized ?

Have you enabled your watchpoint ?

Not enabling D cache should not be an issue.

You could also ask for help on the Riverdi forum, maybe they have more informations.

 

Regards,

MauFanGilaMedical
Associate III
May 5, 2025

When I go to HardFault I shot the stack and see if one thread stack overlap the next but I don't see this situation

 

MauFanGilaMedical_1-1746430421121.png

 

MauFanGilaMedical_0-1746430380489.png

 

MauFanGilaMedical
Associate III
May 5, 2025

Today it goes to HardFault from __ISB or __DSB:

 

Stack for __DSB

 

MauFanGilaMedical_2-1746450766626.png

 

 

MauFanGilaMedical_5-1746450838659.png

 

 

MauFanGilaMedical_4-1746450812591.png

 

 

 

And stack for __ISB

 

MauFanGilaMedical_7-1746451154312.png

 

MauFanGilaMedical_8-1746451174105.png

If could be helpful the CFRS is IMPRECISERR

 

 

MauFanGilaMedical_9-1746454861812.pngMauFanGilaMedical_10-1746454877469.png

 

MauFanGilaMedical_11-1746455064228.png

 

 

MauFanGilaMedical
Associate III
May 12, 2025

I observe that memp_memory_RX_POOL_base is at 0x30000400 and its size is 18,38KB, so memp_memory_RX_POOL_base spans in 0x30000400..30004BCC.

 

Starting from this I set LWIP_RAM_HEAP_POINTER to 0x30005000 because I suspect that memp_memory_RX_POOL_base overlaps LWIP_RAM_HEAP_POINTER.

 

MauFanGilaMedical_0-1747043448244.png

 

Then I go to MPU and increase MPU Region 1 Size from 16K to 64K because it started from 0x30000400 and its size is 0x30005000-0x30000400+14KB

 

MauFanGilaMedical_1-1747043546431.png

 

Subsequently I increase INTERFACE_THREAD_STACK_SIZE from 350 to 1KB ..

 

MauFanGilaMedical_2-1747043744474.png

And I increase that stack of Server thread from 1KB to 10KB (even if I want to undersand how to reduce it to a minimum necessary size)

 

With this change the Server works without MCU crash... I observed one/two crashes and I'm still investigating.

 

I notice that when I send packets from PC to MCU sometimes MCU crashes