Wechsel von 8-Bit-AVR zu ARM – wie mache ich den ersten Schritt?

Ich schreibe jetzt seit mehreren Jahren Code für AVRs und es scheint, als würden meine Bedürfnisse nach einem leistungsfähigeren Prozessor verlangen. Da Atmel Studio die IDE ist, die ich bereits verwende, und mein Debugger auch mit ARM-MCUs funktioniert, schien es ein Kinderspiel, mit einem Atmel-Gerät zu arbeiten. Die Probleme begannen, als ich versuchte, tatsächlich zu starten und Code zu schreiben. AVRs haben eine endlose Menge an Tutorials in Foren wie avrfreaks.net, aber die Atmel ARM MCUs nicht. Um die Sache noch schlimmer zu machen, bietet Atmel fast ausschließlich Code an, der mit seinem ASF-Software-Framework geschrieben wurde, was bedeutet, dass ich, wenn ich es verwenden möchte, einen ziemlich hohen Ansatz verfolgen muss, den ich beim Codieren nicht mag, so wie ich es bin nicht ganz bewusst, was unter der Haube vor sich geht.

Meine Frage ist: Wenn jemand einen ähnlichen Weg gegangen ist, was war der richtige Ort, um anzufangen und zu lernen, wie man diese M3-MCUs ohne ASF verwendet?

Bei der Verwendung eines Atmel oder PIC habe ich nie die vom Hersteller bereitgestellten Funktionsbibliotheken verwendet. Bei einem ARM verwenden die meisten Leute jedoch die Bibliotheken. Ich weiß nichts über ASF, aber wenn es CMSIS-konform ist, lässt sich der Code viel einfacher auf andere ARM-Controller portieren. Auch andere ARM-Entwickler werden den Programmierstil erkennen ... Ich habe angefangen, den Controller der STM32F-Serie zu verwenden, und habe es nie bereut. ST stellt seine „Standard Peripheral Library“ zur Verfügung, die CMSIS-konform ist.
Sie verbringen viel mehr Code damit, Peripheriegeräte und ihre Uhren einzurichten, zu aktivieren und zu konfigurieren, aber sobald Sie dies getan haben, sind sie einfach zu verwenden
@bitsmack Ich habe versucht, Atmel ARM-basiert als meine erste 32-Bit-Plattform zu lernen, und war überwältigt. Dann bin ich über stm32 gestolpert und habe es nie bereut. Auch diese Datenblätter finde ich verständlicher. Ich bin kein Fan ihrer Systemwork-Bench-IDE, aber ich mag Keil.

Antworten (1)

Niemand zwingt Sie, eine Peripheriebibliothek (ASF) zu verwenden, Sie können sehr gut direkt codieren, indem Sie Bits umschalten, ziemlich ähnlich wie bei AVRs. Die ASF enthält wahrscheinlich eine Datei, die alle Registerdefinitionen enthält, so dass Sie manuell codieren können, wenn Sie möchten.

Ich habe auch festgestellt, dass die Peripheriebibliothek (allerdings für STM32) zu Beginn nicht einfach zu verwenden war, aber sobald Sie verstehen, wie sie funktioniert, müssen Sie sich nicht mehr um die Eigenheiten Ihres Geräts auf niedriger Ebene kümmern, sodass Ihr Code mehr ist portabel und schneller zu entwickeln. Ich muss zugeben, dass ich es bevorzuge, direkt mit Registern zu codieren, aber es gibt einen Grund, warum ARM eine Art Standard (CMSIS) für Peripheriebibliotheken bereitstellt, und zwar aus Gründen der Benutzerfreundlichkeit: Wenn Sie einen ARM kennen, kennen Sie die meisten von ihnen. weil die periphere Bibliothek die meisten Unterschiede hinter eine Abstraktionsschicht hüllt. Sie sind besser dran, eine nicht so steile Lernkurve mit der für Ihren Chip bereitgestellten Peripheriebibliothek zu machen (es gibt unzählige Beispiele im Internet, die Peripheriebibliotheken verwenden), als die Registerkonfiguration zu verwenden, da Sie am Ende nur sehr wenige Beispiele auf der Internet.

Beginnen Sie mit einem kleinen Projekt und versuchen Sie dann, Peripheriegeräte mithilfe der Bibliothek zu verwenden. Wenn Sie es wirklich nicht verwenden möchten, werden Sie wahrscheinlich auf sich allein gestellt sein, aber Sie können trotzdem in der ASF nachsehen, wie sie Dinge implementiert haben, und das Rad neu erfinden, wenn Sie möchten. Ihr Anruf.

Niemand zwingt mich, ASF zu verwenden, das stimmt in dem Sinne, dass mir niemand eine Waffe an den Kopf hält, aber es scheint das exklusive Lesematerial zu sein, das ich von Atmel bekommen kann. Ich verstehe die Notwendigkeit, den Codierungsprozess aufgrund der erhöhten Komplexität der Geräte zu vereinfachen, aber der Mangel an Informationen darüber, was untergeht, hat seinen Anteil oder seine Nachteile. Ich habe zum Beispiel versucht, den ADC zu verwenden, bin der App gefolgt. beachten und am Ende passiert nichts (Code kompiliert / keine Aktualisierung der Variablen). Ich weiß nicht warum und fühle mich hilflos.
@ user34920 hast du die uhr zum adc eingeschaltet? Nicht daran zu denken, die Peripheriegeräte zu takten, ist mein häufigster Fehler.
@ScottSeidman - sysclk_enable_peripheral_clock() verwenden? Ich weiß nicht, wie ich die Parameterliste finden soll. Muss der ADC auch über das PMC aktiviert werden?
Jawohl. Ich kenne Ihre Familie nicht, aber die richtige Uhr im richtigen Bus muss aktiviert werden. Ich weiß nicht, wie man den Adc auf dem PMC aktiviert, aber wahrscheinlich basierend auf meiner begrenzten stm32-Erfahrung.
Beginnen Sie mit einem funktionierenden Beispiel und spielen Sie damit herum.
@ user34920 Ich denke, Sie haben meinen Standpunkt gut verstanden: Niemand droht Ihnen, ASF zu verwenden, aber es wird Ihnen schwer fallen, ein Nicht-ASF-Beispiel zu finden. Es liegt an Ihnen zu entscheiden, ob Sie es vorziehen, den Schmerz zu verstehen, wie man die Peripherie direkt mit Hilfe von Registern verwendet, ganz alleine verstehen zu müssen, oder das ASF verwenden zu müssen und die innere Funktionsweise nicht mit der gleichen Intuition zu verstehen. So oder so, es gibt eine steile Lernkurve. In einer solchen Situation ziehen die meisten Menschen in Betracht, die bevorzugte Methode zu verwenden, anstatt das zu tun, was sie gerne tun würden ...
@ user34920 Ich war im selben Boot wie Sie und wollte sogar nur Atmel Smart MCus verwenden, aber jetzt verwende ich fast immer Stm32, weil ich das gesamte Lernmaterial für Atmel mit ASF hasste. Schauen Sie sich einen Kurs auf udemy mit dem Titel Mastering Microcontroller with Embedded Driver Development an. Im Grunde lehrt er Sie, wie Sie Ihre eigenen Treiber für Gipo, i2c usw. auf 32-Bit-Stm32 schreiben, indem Sie nur die Register verwenden. Und sobald Sie verstanden haben, dass Sie Code für jede Familie und jeden Anbieter schreiben können, weil es immer die gleichen grundlegenden Dinge sind. ganz zu schweigen davon, dass ein stm32-Board 2 Dollar für 72 MHz kostet und der Programmierer 5 Dollar kostet.
@ user34920 Ich liebe Atmel Studio auch und benutze es immer noch für AVR-Sachen, aber Stm32 ist auch großartig, bleiben Sie nicht an einer IDE oder einem Anbieter hängen, wie eine Art Fanboy, seien Sie ein Egineer, der alle Tools bei sich verwenden kann Entsorgung. Wenn überhaupt, nutzen Sie den udemy-Kurs als Sprungbrett, um Atmel ARM zu lernen, es kostet nur 10 Dollar ... (nicht mein Kurs oder so), aber ich empfehle es immer, weil ich aus diesem Kurs mehr gelernt habe als aus jedem halbherzigen Online-Tutorial. Es geht nichts über eine gut strukturierte und geordnete Reihe von Videos, aus denen man lernen kann. Wenn Sie Fragen haben, schreiben Sie mir eine Nachricht. Amaya.6987 bei gmail