Showing results for 
Search instead for 
Did you mean: 

STM32H7 corrupt program counter already in Reset_Handler

Associate II

Hello All,

I use the STM32H743ZI MCUs on self designed boards. Most boards run without problems with the developed firmware. But some boards ( -were ok before- ) suddenly show a strange behavior. The STM32H7 seems to reset continuously at first sight. 

For test purposes I wrote a simple LED blink program where one LED is toggled.

I use STM32CubeMX (version 6.1.0), STM32CubeIDE (version: 1.5.0), STM32CubeH7 Firmware Package (V1.8.0 / 29-May-2020), STM32CubeProgrammer (v2.6.0-RC3), ST-LINK FW : V2J37M26, HAL.

Also this LED program does not work on the suspicious boards. Instead of the LED toggling cleanly, there is rather a kind of flickering. This points again to a continuous resetting.

While debugging I noticed that already in the startup file something goes wrong. I try to describe the behavior:

  • Program counter starts in the Reset_Handler
  • Stack pointer is loaded
  • Asm cmd: bl SystemInit (branch to the function SystemInit()) (Picture1)
  • ! Does not jump to the function SystemInit()
  • ! But jumps into the IQR- Handler of the selected Timbase Source (e.g. SysTick Handler or TIM6_DAC_IRQHandler) (Picture2)

After that the program jumps around in some HAL_ functions and ends up in the Reset_Handler again.

This behavior can be observed on three boards. On the other boards the program counter jumps normally into the SystemInit() function and everything behaves normally. If the SystemInit() function is replaced, the same behavior occurs.

Concerning hardware:

The power supplies (VBAT, VDD, VSS, VCAP) seem to be ok. BOOT0 is connected with a 1K to GND. BOOT1 is not present(?). The NRST input is cleanly pulled high (3.3V).

I am attaching two screenshots of the program running. The first picture shows the pc in reset_handler. Sp, lr and pc registers appear normal. If you go a step in debug mode, the pc jumps to a wrong position.

Also I add the Project "BlinkTest".

Has anyone of you ever had such a behavior? Or can someone give me a hint where to look for the error? I run already out of ideas.

Thanks for your feedback