Ich kann mich dunkel erinnern, dass ich da auch mal geknoblet habe.
Das Problem war, dass bei HAL_TIM_PWM_Start.... theoretisch alle Kanäle
verodert werden können, aber praktisch musste jeder einzeln gestartet
werden, da es sonst nicht funktioniert hat.
OK, wenn ich alle Kanäle einzeln starte, kommt der TIM1_CC_IRQn
Interrupt. Der ADC läuft immer noch nicht. Ich denke, daß der auf den
Trigger-Interrupt wartet und der kommt nicht :-(
Gruß
hochsitzcola
hochsitzcola schrieb:> Bitte kein HAL oder CubeMx Bashing
Na ja, dann können dir so ziemlich alle Profis hier schon mal nicht
helfen, denn die benutzen sowas halt nicht. Das hat auch seinen Grund,
wie du es gerade erkennen dürftest...
Gehe doch mal in den Debug wie jeder normaler Entwickler, schau dir die
Register zur Laufzeit an und die Lösung deines Problems kommt in
greifbare Nähe.
Mehr kann man dir leider nicht anbieten.
pegel schrieb:> Mit injected habe ich mich nicht befasst.> Was ist der Unterschied?
Injected scheint es extra für die Anwendung in der BLDC Ansteuerung zu
geben. Die AD-Werte werden direkt in eigene Register geschrieben und
ggf. gleich ein Offset abgezogen. Das Ganze mit hoher Priorität.
Dreikommaeinsvier schrieb:> Na ja, dann können dir so ziemlich alle Profis hier schon mal nicht> helfen, denn die benutzen sowas halt nicht. Das hat auch seinen Grund,> wie du es gerade erkennen dürftest...
Ich habe ja nicht gesagt, daß ihr mir keine Tipps auf Registerebene
dürft. :-) Die Benutzung des HAL ist gewöhnungsbedürftig und es gibt
nicht viel Beispiele im Netz. Dieser Injected-Mode durch Timer1
getriggert scheint besonders exotisch zu sein.
Ich werde auf jeden Fall deinen Rat befolgen und mir die Registerinhalte
mal genauer anschauen...
Gruß
hochsitzcola
pegel schrieb:> ADC_SOFTWARE_START
Moin,
du hast für die ADC die Kombination von Normal und Injected angegeben.
Deshalb ist jetzt die Frage, ob das Injected nur funktioniert, wenn das
Normal schon läuft.
Ich würde Normal starten bzw. aus der Konfiguration nehmen um das zu
testen.
Schade, bei deinem Link ist die Initialisierung vom ADC nicht als Code
dargestellt...
Der Capture Compare Interrupt vom Timer 1 kommt ja, also könnte ich
damit auch die injected conversion wie im Beispiel aufrufen.
Ich bin bisher aber davon ausgegangen, das das automatisch geht, da ich
ja in der Injected Konfiguration als Trigger den Channel 4 Capture
Compare direkt anwählen kann....
Gruß
hochsitzcola
Update: den injected ADC per Softwarestart über den TIM1_CC_IRQn
Callback triggern funktioniert.
Direkt über JEXTSEL[2:0]:001: Timer 1 CC4 event funktioniert nicht :-(
Ich werde jetzt mal im OpenSTM32 Forum anfragen.
Gruß
hochsitzcola
Hm, ich bin in dem User Manual über den Hinweis gestolpert (Table3,
Seite 36)
> DMA is used to enable ADC injected conversion external trigger. Disabling is
performed by software
Das sagt mir gar nichts. Die erwähnten DMA Kanäle sind für ADC1 (Kanal1)
und UART (Kanal5) ?! Ich hab jetzt in 4 verschiedenen Foren angefragt,
keine Lösung in Sicht. Ich behelfe mir jetzt mit dem Timer CC Ch4
Callback und rufe den Injected ADC darüber auf...
Gruß
hochsitzcola
Hallo zusammen,
ich habe die gleiche Anwendung und bekomme es hin den injected channel
genau einmal auszulesen. Danach wird das JEOS/C Flag nie wieder gesetzt
obwohl ich die Conversion erneut starte. Da der Beitrag nciht ganz so
alt ist wollte ich mal fragen ob du in der zwischenzweit eine Lösung
gefunden hast.
Viele Grüße
leko
hochsitzcola schrieb:> Hm, ich bin in dem User Manual über den Hinweis gestolpert (Table3,> Seite 36)>> DMA is used to enable ADC injected conversion external trigger. Disabling is> performed by software>> Das sagt mir gar nichts. Die erwähnten DMA Kanäle sind für ADC1 (Kanal1)> und UART (Kanal5) ?! Ich hab jetzt in 4 verschiedenen Foren angefragt,> keine Lösung in Sicht. Ich behelfe mir jetzt mit dem Timer CC Ch4> Callback und rufe den Injected ADC darüber auf...>> Gruß> hochsitzcola
Hello,
Some time ago I made an short application to read simultaneously 2
channels of ADC1, using DMA.
In attachment is the "main.c" file
I hope this will help you.