Gast
#3897249
Guten Tag, ich sammel gerade erste Erfahrung mit dem STM32F417. Ich versuche das Interrupt-gesteuerte Senden über U(S)ART2 hinzubekommen. Ich verwende EM::Blocks 2.30 mit GCC / g++. Da ich C++ programmieren möchte, habe ich unter "linker flags" "Use C++ libraries" angekreuzt. In meinem Programm initialisiere ich zuerst den GPIO-Port (GPIOD.5) an dem das Terminal hängt, danach initialisiere ich den NVIC, danach den eigentlichen USART. Danach schicke ich ein Byte per USART, das empfange ich auch korrekt am Computer. Im Debugger sehe ich, das direkt danach das TC-Bit in USART2->SR auf 1 geht, einen Takt später scheint der Debugger die Verbindung zu verlieren, wenn ich auf Pause drücke kann ich sehen, dass der Programmcounter in folgender Zeile steht: startup_stm32f4xx.S Zeile 286: def_irq_handler USART2_IRQHandler Disassembly an der Stelle ergibt einen Sprung auf die gleich Zeile, also eine klassische Entlosschleifen. Meine Schlussfolgerung: Der Interrupt wird korrekt ausgelöst und landet in diesem defaultHandler. Meine Frage: Warum? Warum landet der Controller nicht wenigstens im HardFault-Handler? Seltsamer weise kann ich in meiner Funktion USART2_IRQHandler keinen Brakepoint setzen, Debuggerfehler: Error: No line 113 in file "src/main.cpp". (Versuch auf das 2. nop einen Brakepoint zu setzen.) Hier ist der Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
Würde mich sehr freuen wenn mir jemand bei diesem Problem helfen kann. lg