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.