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?
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"
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.
Schau dir doch mal die Beispiele vom CubeMX an. Beispiel muss ja nicht genau dein Controller sein.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.