Skip to main content
MGand.1
Associate
Dec 16, 2019 2:53 PM UTC
Solved

Controller stalls at NVIC_EnableIRQ(CAN_TX_IRQn) after jump to application from a bootloader.

Hi,

I am using a CAN bootloader to update my application. But after flashing the application and jumping from the bootloader to the reset vector of the app, the program stalls after calling NVIC_EnableIRQ(CAN_TX_IRQn). Is there a problem that the bootloader already used the CAN peripheral?

The bootloader resets and stops the peripheral before the jump.

Controller is a STM32F303RE.

Before NVIC_EnableIRQ is called, the peripheral registers have the following values:

MCR = 0x0001004c

MSR = 0x00000c00

TSR = 0x1c000003

RF0R, RF1R = 0

IER = 0x00008f03

ESR = 0

BTR = 0x012d000f

Update:

I looks like the application calls the old interrupt routine address of the bootloader

0690X00000BufjIQAR.png

0690X00000BufjiQAB.png

 .text.TgtCAN1TXIsr
 0x08009be8 0xc VisualGDB/Debug/target.o
 0x08009be8 TgtCAN1TXIsr

This topic has been closed for replies.
Tesla DeLorean
Tesla DeLoreanBest answer
Guru
Dec 16, 2019 5:03 PM UTC

Make sure you correctly configure the Vector Table, via SCB->VTOR, typically in SystemInit()

Don't call from an interrupt/callback.

Have HardFault_Handler and ErrorHandler output useful / actionable information.

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..

5 replies

Tesla DeLorean
Tesla DeLoreanBest answer
Guru
Dec 16, 2019 5:03 PM UTC

Make sure you correctly configure the Vector Table, via SCB->VTOR, typically in SystemInit()

Don't call from an interrupt/callback.

Have HardFault_Handler and ErrorHandler output useful / actionable information.

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
MGand.1
MGand.1Author
Associate
Dec 17, 2019 7:06 AM UTC

Before the jump to the application the bootloader set stack pointer and the vtor pointer, after the start of the application the

SystemInit overrides with the old flash start value 0x08000000.

Ozone
Principal
Dec 17, 2019 7:12 AM UTC

> ... after the start of the application the SystemInit overrides with the old flash start value 0x08000000.

Then you might need to adapt your application / SystemInit.

Both bootloader and application are supposed to harmonize in this regard.