Werte Internetgemeinde, seit geraumer Zeit befinde ich mich auf dem Weg, einen Timer Interrupt beim STM32F410B auszulösen. Ich habe die Initialisierung der Timer über STM32CubeMX generieren lassen. Meine IDE ist Eclipse mit der openSTM32 work bench (von openstm32.org) Debugger ist der ST-Link! ich möchte eine Interrupt nach einer gewissen Zeit auslösen, und in der ISR eine LED toggeln! Togglen der LED in der main klappt, d.h. der GPIO ist richtig konfiguriert. das Ganze möchte ich nun auch in der ISR machen entweder für TIM5 oder TIM9!!! Es hat sich leider herausgestellt, dass die ISR niemals aufgerufen wird! Und wenn ich, wie in folgendem Video beschieben den Timer über ( https://www.youtube.com/watch?v=nTOtXiJw1_Y ) HAL_TIM_Base_Start_IT(&htim9); starte komme ich nicht einmal mehr in die while(1) Schleife der main! Ist die Vorgehensweise überhaupt so sinnvoll? Wie bekomme ich es ganz stumpf hin, z.B. jeder Sekunde eine Timer ISR aufzurufen unter Verwendung der HAL Treiber? VG
HALtreiber unter Eclipse kannst du vergessen, das geht dank des 64bit Kernels nur eingeschränkt (wenn der µC auf 8 bit emuliert ist). Ausser, du setzt im make-file den Flag der reg32-HAL auf high, denn könnte es klappen. Gruß
Hier mal ein funktionierendes CubeMX Projekt für ein Nucleo Board. In die main muss nur HAL_GPIO_WritePin(Nucleo_LED_GPIO_Port,Nucleo_LED_Pin,GPIO_PIN_SET); HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_1); eingefügt werden. Die ISR muss so aussehen void TIM1_CC_IRQHandler(void) { /* USER CODE BEGIN TIM1_CC_IRQn 0 */ HAL_GPIO_TogglePin(Nucleo_LED_GPIO_Port,Nucleo_LED_Pin); /* USER CODE END TIM1_CC_IRQn 0 */ HAL_TIM_IRQHandler(&htim1); /* USER CODE BEGIN TIM1_CC_IRQn 1 */ /* USER CODE END TIM1_CC_IRQn 1 */ } In dem Video fehlt die Einstellung -Timer->Channel->Output Compare No Output In deiner main wird der Timer zwar initialisiert, aber nicht aktiviert: HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_1); Viel Spass beim Anpassen an deine Hardware. dasrotemopped.
Hallo dasrotemopped, Ich habe nun die Änderungen soweit vorgenommen. Leider verschwindet der nach dem ersten Durchlauf der While(1)-SChleife im Nirvana.... Also ich kann nicht genau sagen, wo gerade etwas geschieht.... in der Main und in der ISR jedenfalls nicht..... breakpoints in der while(1) werden jedenfalls nur bei Programmstart einmal erreicht, dann nie wieder!!! hmmh kann das mit der den Konflikten (Mehrfachbelegungen der Pins am STM32) liegen... siehe angefügtes ioc file ??? Viele Grüße
hat das einen Grund, den uC nur mit 16 MHz laufen zu lassen ? Ich habe in meinem Projekt den CPU Takt auf 64MHz gesetzt, Prescaler auf 64000, Counter auf 500, dann ergibt das eine Blinkrate von 1Hz. In deinem Projekt liegt die Blinkrate bei 1/8 Hz. Doppelt belegt ist da ja nichts im Projekt, schaut in Ordnung aus. Welchen Programmer benutzt du ? SW4STM32 ist eingestellt, klappt der Import in deine IDE ? Selbst entworfene Hardware oder ein Eval-Board ? Ich benutze CubeMX 4.14, du 4.15. Habe beim Nucleo-STM32F103 und CubeMX 4-15 bemerkt, das die Debugger Optionen falsch sind. Benutze doch mal 4-14. Ist nicht ungewöhnlich, das ST mal Bugs einbaut. Gruß, dasrotemopped.
Hier mal die Screenshots zu CubeMX. Wenn bei den Nucleo Boards so ein Fehler durchrutscht, dann lieber die 4-14 benutzen. Gruß, dasrotemopped.
OK hab rausgefunden, dass der der im "HardfaultHandler" landet!!! hmmh?
dasrotemopped schrieb: > Doppelt belegt ist da ja nichts im Projekt, schaut in Ordnung aus. > Welchen Programmer benutzt du ? > SW4STM32 ist eingestellt, klappt der Import in deine IDE ? > Selbst entworfene Hardware oder ein Eval-Board ? Ich nutze den ST-Link/V2 debugger! und es sieht so aus, dass ich die generierten Header und Source Files händisch in mein Eclipse openSTM32 work bench Project ziehe..... nutze ein eigenes PCB! --> UART und GPIOs habe ich schon mal getestet und laufen! läuft aber alles nur in der main, ohne Interrupts!
>Ich nutze den ST-Link/V2 debugger! Mit 20poligen Anschluss oder SWDIO/SWCLK/SWO ? >Header und Source Files händisch in mein Eclipse auch die Startup Routinen ?
dasrotemopped schrieb: >>Ich nutze den ST-Link/V2 debugger! > Mit 20poligen Anschluss oder SWDIO/SWCLK/SWO ? >>Header und Source Files händisch in mein Eclipse > auch die Startup Routinen ? ist mit SWDIO/SWCLK/SWO angeschlossen und startup glaube ich nicht..... das sind dann doch STM32F410RBTx_FLASH.ld und Makefile! oder wie?
"S"ehr "T"oller" "M"icrocontroller schrieb: > OK hab rausgefunden, dass der der im "HardfaultHandler" landet!!! Ein vernünftiger Debugger sollte Dir dann auch den restlichen Call Stack anzeigen, also wo der Fault ungefähr ausgelöst wurde...
>ist mit SWDIO/SWCLK/SWO angeschlossen im CubeMX Projekt ist ein TracePin aktiviert, passt also nicht auf deine Hardware >startup glaube ich nicht das ist die startup_stm32faaaxx.s die initialisiert den ARM Core (Stack, Heap, IRQ Handler, Debug Interface usw.) Wenn die nicht zu dem HAL Code und User Code exakt passt geht viel schief, ohne das der Compiler das merkt. Und die Software wird schnell zur Sissi, wenn die Hardware nicht so reagiert wie erwartet (HardFault/NMI). Ein CubeMX Projekt von einer Ausgabe-IDE manuell umzubiegen auf eine andere IDE erfordert viel Kenntnisse. Darum lasse ich da die Finger von. Die einen schimpfen dann auf die IDE, die anderen auf CubeMX. Aber was nicht passt, wird auch nicht passend gemacht(siehe Screenshot). So schön eine kostenlose IDE ist, IAR und Keil würden pleite gehen, wenn da nicht ein Vorteil existieren würde, deren Software zu benutzen. Gruß, dasrotemopped.
Liebes rotes Mopped, ja sicherlich wäre es geiler, die originale IDE, also Keil, zu nutzen. Ich wollte das ganze aber auch unter Linux am Laufen haben und außerdem hab ich mit Eclipse schon öfters "herumgespielt"..... Na egal auf jeden Fall geht jetzt der Timer Interrupt jetzt..... void TIM1_CC_IRQHandler(void) wird aufgerufen....... Ich habe das STM32CUBEMX Project einfach mal "ordentlich" in Eclipse importiert, gemäß der folgenden Beschreibung : http://www.openstm32.org/Importing+a+STCubeMX+generated+project schon hat'S geklappt.......... ja ja jetzt kann ich mich endlich mit den eigentlichen Aufgaben beschäftigen ;) Vielen Dank für die Unterstützung soweit!
gern geschehen. Manchmal braucht man ja nur mal einen kurzen Hinweis, wo was steht. Das I-Net weiss zwar alles, aber hat kein gutes Inhaltsverzeichnis ;) Habe Keil auch nur, weil die Arbeit mir ne Lizenz zur Verfügung stellt. SW4STM32 habe ich mir zu Hause installiert, sonst hätte ich von dem Import von CubeMX Projekten auch nix gewusst. Viel Spass beim Proggen, dasrotmeopped.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.