Forum: Mikrocontroller und Digitale Elektronik STM32F334 - ADC und Low Level Library


von Unwissender STM32-Programmierer (Gast)


Angehängte Dateien:

Lesenswert?

Mahlzeit allerseits

Folgendes: Ich möchte mit einem STM32F334 die ADC-Kanäle 1 und 3 (ADC1) 
und die Kanäle 2 und 4 (AC2) auslesen und über die Debugschnittstelle 
ausgeben.
Für einen einfachen Hardwaretest.

Ich will das etwa einmal in der Sekunde tun. Timer7 liefert dafür 
entsprechend ein Interruptevent. In der ISR des Tim7 möchte ich jeden 
Kanal auslesen und ausgeben.

Und ich wollte an dieser Stelle gerne mal die Low Level Library von ST 
ausprobieren. Ich hab vor Jahren mal mit der HAL rumgespielt, fand aber 
den Overhead dabei doch abstoßend. Außerdem habe ich noch nie mit den 
ADCs beim STM32 zu tun gehabt.

Jetzt habe ich mir in CubeMX etwas zusammengeklickt, was nach meinem 
derzeitigen Verständnis des Reference Manuals halbwegs passen sollte.

Ich habe allerdings keine Idee, wie ich da jetzt weiterkomme. Es gibt 
zwar die Methode LL_ADC_REG_ReadConversionData12(*ADC_TypeDef ADC), ich 
sehe aber nicht wie die mir weiterhilft. Allerlei Kürzel, die mir trotz 
Reference Manual Lesen nicht sehr viel sagen, aber nichts was z.b. nach 
ChannelSelect oder so aussieht.

Das die ADCs selbständig eine Sequenz aus Kanälen abfahren können weiß 
ich, aber einerseits würde ich es für den ersten Gehversuch etwas 
simpler halten und mir die Werte aus den ADCs direkt abholen. Die 
Sequenzen sind, soweit ich das bisher sehe, eher etwas dafür wenn man 
den ADC kontinuierlich werkeln lassen will. Liege ich da richtig?
Ich hätte auch erwartet das man die Sequenz in CubeMX festlegen kann, 
aber das scheint seltsamerweise nicht der Fall zu sein.

Im Anhang sind zwei Screenshots dessen, was ich zum ADC in CubeMX 
eingestellt habe. Das Projekt hab ich auch generiert, die 
IRQ-Handlerfunktion des Tim7 ist auch da. Ansonsten ist der Code noch 
weitgehend jungfräulich.

Kann mir jemand helfen, mein Unwissen zu verdrängen?

von Unwissender STM32-Programmierer (Gast)


Lesenswert?

Schade, hat das etwa noch nie jemand gemacht?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Unwissender STM32-Programmierer schrieb im Beitrag #6258486:
> Schade, hat das etwa noch nie jemand gemacht?

Nein, denn ich zB nutze HAL und LL nicht, aber hab schon mit dem ADC 
gearbeitet.
Kennst du die CMSIS Definitionen?
Dann kannste direkt auf Registern arbeiten und dir Libs schreiben.
Den ADC per Timer anstoßen und dann per DMA abholen ist garnicht mal so 
schwer.

Das automatische abfahren der Kanäle ist auch nicht schwer, sondern auch 
nur eine Reihenfolge in einem Register vorsehen.
Willst du später mal schneller samplen oder wieso willste jeweils 2 
Kanäle an 2 ADC haben statt 4 Kanäle an einem ADC?

Was meinst du mit "über Debug ausgeben"?
Willst du das über den SWO Pin machen?
Dann hab ich was fertiges für dich: 
Beitrag "ARM Cortex-M3/4/7 Faulthandler"

von Wühlhase (Gast)


Lesenswert?

Direkt auf den Registern habe ich schonmal mit dem F4 gearbeitet (so 
kenne ich es auch von den AVRs), allerdings war das recht mühselig 
weshalb ich CubeMX mal ausprobieren wollte. Mit CMSIS habe ich mich in 
der Tat noch gar nicht beschäftigt.


Mw E. schrieb:
> Das automatische abfahren der Kanäle ist auch nicht schwer, sondern auch
> nur eine Reihenfolge in einem Register vorsehen.

Also meinst du, ich muß doch nochmal eine Sequenz händisch im Code 
einbauen?


Mw E. schrieb:
> Willst du später mal schneller samplen oder wieso willste jeweils 2
> Kanäle an 2 ADC haben statt 4 Kanäle an einem ADC?

Wie gesagt: es geht eigentlich nur um ein kleines Testprogramm. Vor den 
ADCs hängt noch etwas Verstärkerkram, ich will eigentlich nur testen ob 
die Hardware arbeitet wie erwartet.


Mw E. schrieb:
> Was meinst du mit "über Debug ausgeben"?

Nun...im Embedded Studio (Segger, JLink) kann man die printf-Funktion 
aufrufen, und im Debugmodus zeigt die IDE einem die Inhalte dann in 
einem kleinen Fenster an. Irgendwo hab ich aml gehört, daß das über den 
SLink auch gehen soll.
Also ja...SWO-Pin.

von Test (Gast)


Lesenswert?

Schau dir doch mal die Beispiele vom CubeMX an. Beispiel muss ja nicht 
genau dein Controller sein.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Eine kleine Info Vorweg: Nur ein Nickname pro Fred gilt hier im Forum ;)

Wühlhase schrieb:
> Direkt auf den Registern habe ich schonmal mit dem F4 gearbeitet (so
> kenne ich es auch von den AVRs), allerdings war das recht mühselig
> weshalb ich CubeMX mal ausprobieren wollte. Mit CMSIS habe ich mich in
> der Tat noch gar nicht beschäftigt.

Der HAL hat eben den Overhead (haste ja schon bemerkt), der LL ist 
nichts weiter als Funktionen um Registerzugriffe drumrumgebastelt.
Ich kann dir aber nicht sagen wie du im CubeMX sone Sequenz anlegst, den 
MX nutze ich nur um zu gucken wo welche Funktion an den Pins rauskommt.

Der CMSIS ist nichts weiter als Registerdefinitionen.
Somit kannste dann direkt TIM1->CR |= blahkeks schreiben.
Damit man die nicht selber tippen muss.

Wühlhase schrieb:
> Also meinst du, ich muß doch nochmal eine Sequenz händisch im Code
> einbauen?

Ich empfehls dir zumindest.
Guck dir im Refman mal die ADC_SQR 1-3 Register an.
Einmal sagst du dem ADC wieviele Channels du samplen willst und dann 
schreibste rein in welcher Reihenfolge.
Das wars dann auch schon.

Wühlhase schrieb:
> Wie gesagt: es geht eigentlich nur um ein kleines Testprogramm. Vor den
> ADCs hängt noch etwas Verstärkerkram, ich will eigentlich nur testen ob
> die Hardware arbeitet wie erwartet.

Ja dann brauchts kein DMA.
Per Timer den ADC anstoßen und dann in der Hauptschleife pollen bis der 
ADC fertig ist und dann an den PC senden.

Wühlhase schrieb:
> Nun...im Embedded Studio (Segger, JLink) kann man die printf-Funktion
> aufrufen, und im Debugmodus zeigt die IDE einem die Inhalte dann in
> einem kleinen Fenster an. Irgendwo hab ich aml gehört, daß das über den
> SLink auch gehen soll.
> Also ja...SWO-Pin.

SWO ist allgemeingültig, im ST Link Utility gibts dazu den SWO Viewer.
Code mit printf Nutzung hab ich dir ja verlinkt aus meinem anderen Fred.

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
Noch kein Account? Hier anmelden.