Hallo,
ich habe einen Bootloader für CAN für den STM32 geschrieben und alles
funktioniert soweit. Mein Bootloader benutzt außer Systick keine
Interrupts.
Bevor ich aus dem Bootloader zur Application springe, setze ich brav den
Systick zurück.
1 | RCC_DeInit();
|
2 | SysTick->CTRL=0;
|
3 | SysTick->LOAD=0;
|
4 | SysTick->VAL=0;
|
in meiner Application benutze ich den Systick wieder um eine LDE blinken
zu lassen.
Das war meine Testumgebung und alles hat funktioniert. Froh über meinen
Triumpf habe ich mal eine andere Anwendung aufgespielt. Diese benutzte
auch lediglich den Systick und funktionierte auch. Sobald ich jetzt eine
Anwendung mit Interrupt Aufspiele funktionieren die Interrupts nicht.
Das Programm verhält sich wie als würde ich vergessen haben die ISR
einzufügen.
Natürtlich habe ich in der system_stm32f4.c den vectortabellenoffset
deklariert. Sollte auch funktioniert haben, denn der resethandler wird
ordnungsgemäß aufgerufen. Den benutze ich, um aus dem Programm wieder in
den Bootloader zu kommen.
Die Funktion __disableirq() im bootloader hilft leider auch nicht.
Danke schonmal!!!
PS: Wenn der Bootloader einwandfrei funktioniert, werde ich ihn hier
gerne zu Verfügung stellen. Er ist kompatibel mit dem CAN Bootloader von
de Robotergruppe Aachen, sodass mit der selben PC Seite sowohl AVR als
auch STMs programmiert werden können.