
Die Mikroelektronik ist dank des magischen Arduino ein modisches Hobby der letzten Jahre. Das Problem ist jedoch, dass DigitalWrite () bei gebührendem Interesse schnell wachsen kann, aber was als Nächstes zu tun ist, ist nicht ganz klar. Arduino-Entwickler haben große Anstrengungen unternommen, um die Eintrittsschwelle in ihr Ökosystem zu senken, aber draußen gibt es immer noch einen dunklen Wald von harten Schaltkreisen, die für einen Amateur unzugänglich sind.
Zum Beispiel Datenblätter. Es scheint, dass sie alles haben, es nehmen und benutzen. Aber nur ihre Autoren haben es sich eindeutig nicht zur Aufgabe gemacht, Mikrocontroller bekannt zu machen. manchmal scheint es, dass sie absichtlich obskure Begriffe und Abkürzungen missbrauchen, wenn sie einfache Dinge beschreiben, um die Uneingeweihten so weit wie möglich zu verwirren. Aber nicht alles ist so schlimm, wenn gewünscht, öffnet sich die Brust.
In diesem Artikel werde ich die Erfahrung der Kommunikation der Geisteswissenschaften mit Datenblättern für Hobbyzwecke teilen. Der Text richtet sich an Fans von Arduino-Hosen, die aus Arduino-Hosen herausgewachsen sind. Er bietet einen Einblick in die Funktionsweise von Mikrocontrollern.
Ich werde mit dem traditionellen beginnen
Blinkende LED am Arduino
Und sofort der Code:
void setup() { DDRB |= (1<<5); } void loop() { PINB = (1<<5); for (volatile uint32_t k=0; k<100000; k++); }
"Was ist das? - Fragen Sie den anspruchsvollen Leser. - Warum schreibst du etwas in das PINB-Eingangsregister? Er ist nur zum Lesen da! “ In der Tat behauptet die Arduino-Dokumentation , wie die meisten Schulungsartikel im Internet, dass dieses Register schreibgeschützt ist. Das habe ich mir selbst gedacht, bis ich das Datenblatt für Atmega328p erneut gelesen und diesen Artikel vorbereitet habe. Und da:

Dies ist eine relativ neue Funktionalität, sie war nicht auf Atmega8, nicht jeder weiß davon oder erwähnt sie aus Gründen der Abwärtskompatibilität nicht. Es ist jedoch durchaus geeignet, um die Idee zu demonstrieren, dass Datenblätter lesenswert sind, um alle Funktionen des Chips zu nutzen, auch die wenig bekannten. Und das ist nicht der einzige Grund.
Warum sonst Datenblätter lesen?
Normalerweise beginnen Arduino-Treiber, die genug mit LEDs und AnalogWrite'ami gespielt haben, alle Arten von Modulen und Chips mit der Karte zu verbinden, für die es bereits geschriebene Bibliotheken gibt. Früher oder später erscheint eine Bibliothek, die nicht so funktioniert, wie sie sollte. Dann beginnt der Amateur, es auszuwählen, um es zu reparieren, und dort ...
Und da etwas völlig Unverständliches vor sich geht, müssen Sie zu Google gehen, zahlreiche Tutorials lesen, Teile des geeigneten Codes von jemandem einlesen und schließlich Ihren eigenen Weg finden. Dies gibt ein starkes Erfolgserlebnis, aber tatsächlich erinnert der Prozess an die Erfindung eines Fahrrads durch Reverse Engineering eines Motorrads. Darüber hinaus nimmt das Verständnis, wie dieses Fahrrad funktioniert, nicht zu. Ich weiß, seit ich das schon eine ganze Weile selbst mache.
Wenn ich anstelle dieser faszinierenden Aktivität ein paar Tage damit verbracht hätte, die Dokumentation für Atmega328 zu studieren, hätte ich viel Zeit gespart. Am Ende ist es ein ziemlich einfacher Mikrocontroller.
Daher ist es notwendig, Datenblätter zumindest zu lesen, um sich vorzustellen, wie der Mikrocontroller im Allgemeinen angeordnet ist und was er kann. Und auch:
- um die Bibliotheken anderer Leute zu überprüfen und zu optimieren. Sie werden oft von denselben Liebhabern geschrieben, die das Fahrrad erfunden haben. oder im Gegenteil, die Autoren machen sie absichtlich zu übermäßigem Schutz vor dem Narren. Lassen Sie es dreimal größer und langsamer sein, aber es wird definitiv funktionieren;
- in der Lage zu sein, Chips in dem Projekt zu verwenden, an das niemand die Bibliothek geschrieben hat;
- Erleichterung der Migration von einer MK-Linie zu einer anderen;
- um endlich ihren alten Code zu optimieren, der nicht in Arduin passte;
- zu lernen, wie man einen Chip direkt über seine Register verwaltet, ohne sich die Mühe zu machen, das Gerät seiner Bibliotheken zu studieren, falls vorhanden.
Warum direkt in Register schreiben, wenn es HAL und LL gibt?
Wortschatz
HAL, Hardware Abstraction Layer - eine Bibliothek zur Steuerung eines Mikrocontrollers mit einem hohen Abstraktionsgrad. Wenn Sie die SPI1-Schnittstelle verwenden müssen, konfigurieren und aktivieren wir SPI1 einfach, ohne uns Gedanken darüber zu machen, welche Register für was verantwortlich sind.
LL, Low Level API - Eine Bibliothek mit Makros oder Strukturen mit Registeradressen, mit denen Sie namentlich darauf zugreifen können. DDRx, PORTx, PINx auf Atmega ist LL.
Streitigkeiten zu einem Thema "HAL, LL oder Register" treten regelmäßig in Kommentaren zu Habré auf. Ohne Zugang zu astralem Wissen zu beanspruchen, werde ich einfach meine Amateur-Erfahrungen und Gedanken teilen.
Mehr oder weniger mit Atmega sortiert und Artikel über das schöne STM32 gelesen, kaufte ich ein halbes Dutzend verschiedene Boards - und Discovery und „Blue Tablets“ und sogar nur Chips für meine hausgemachten Produkte. Alle von ihnen zwei Jahre lang in einer Kiste abgestaubt. Manchmal sagte ich mir: "Ich beherrsche STM an diesem Wochenende", startete CubeMX, erstellte ein Setup für SPI, sah sich die resultierende Textwand an, die reich an STM-Urheberrechten war, und entschied, dass es irgendwie zu viel war.

Um zu verstehen, was CubeMX hier geschrieben hat, können Sie natürlich. Gleichzeitig ist es unrealistisch, sich an alle Formulierungen zu erinnern, damit Sie sie später mit Ihren Händen schreiben können. Und debattiere es, wenn ich versehentlich vergesse, in Kuba ein Häkchen zu setzen, - hi.
Zwei Jahre vergingen, ich leckte immer noch an allen möglichen leckeren, aber nach meinem Verständnis unzugänglichen Chips im ST MCU Finder und stieß versehentlich auf einen wunderbaren Artikel , wenn auch über STM8. Und plötzlich wurde mir klar, dass ich die ganze Zeit an die offene Tür geklopft habe: Die Register für STM sind wie bei jedem anderen MK angeordnet, und der Cube ist optional für die Arbeit mit ihnen. Und so war es möglich? ..
HAL und speziell STM32CubeMX ist ein Tool für professionelle Ingenieure, die eng mit STM32-Chips zusammenarbeiten. Das Hauptmerkmal ist ein hohes Maß an Abstraktion, die Fähigkeit, schnell von einem MK zu einem anderen und sogar von einem Kern zu einem anderen zu migrieren und dabei innerhalb der STM32-Linie zu bleiben. Amateure haben selten solche Aufgaben - unsere Auswahl an MK beschränkt sich normalerweise auf die Reichweite von AliExpress und wir wechseln häufig zwischen radikal unterschiedlichen Chips - wir wechseln von Atmega zu STM, von STM zu ESP oder was ist neu für unsere chinesischen Freunde? HAL wird hier nicht helfen, und sein Studium wird viel Zeit kosten.
Es bleibt LL - aber davon zu Halbschrittregistern. Persönlich finde ich das Schreiben meiner Makros mit Registeradressen nützlich: Ich studiere das Datenblatt genauer, denke, dass ich es in Zukunft brauchen werde, und was definitiv nicht der Fall ist, ich strukturiere meine Programme besser und im Allgemeinen hilft das Überwinden, sich zu erinnern.
Darüber hinaus gibt es eine Nuance mit dem beliebten STM32F103 - dafür gibt es zwei inkompatible Versionen von LL, eine offizielle von STM, die zweite von Leaf Labs, die im STM32duino-Projekt verwendet werden. Wenn Sie eine Open-Source-Bibliothek schreiben (und ich hatte gerade eine solche Aufgabe ), müssen Sie entweder zwei Versionen erstellen oder direkt auf die Register zugreifen.
Schließlich vereinfacht die Ablehnung von LL meiner Meinung nach die Migration, insbesondere wenn Sie von Beginn der Projektarbeit an darauf setzen. Übertriebenes Beispiel: Schreiben Sie Arduins Blinzeln in Atmel Studio ohne LL:
#include <stdint.h> #define _REG(addr) (*(volatile uint8_t*)(addr)) #define DDR_B 0x24 #define OUT_B 0x25 int main(void) { volatile uint32_t k; _REG(DDR_B) |= (1<<5); while(1) { _REG(OUT_B) |= (1<<5); for (k=0; k<50000; k++); _REG(OUT_B) &= ~(1<<5); for (k=0; k<50000; k++); } }
Damit dieser Code mit STM8 (von ST Visual Desktop) auf einem chinesischen Schal eine LED blinkt, müssen zwei Adressen darin geändert werden:
#define DDR_B 0x5007 #define OUT_B 0x5005
Ja, ich verwende die Funktion zum Anschließen der LED an eine bestimmte Karte. Sie blinkt sehr langsam, aber es wird!
Was sind Datenblätter?
In Artikeln und Foren, sowohl in russischer als auch in englischer Sprache, bedeuten "Datenblätter" jede technische Dokumentation für Chips. Ich mache dasselbe in diesem Text. Formal sind sie nur eine Art solcher Dokumentation:
Datenblatt - TTX, taktisch technische Eigenschaften. Stellen Sie sicher, dass Sie elektronische Komponenten haben. Referenzinformationen sind nützlich, um sie griffbereit zu haben, aber es gibt nichts, was man sorgfältig lesen könnte. Einfachere Chips sind jedoch häufig auf Datenblätter beschränkt, um keine unnötigen Dokumente zu erstellen. In diesem Fall finden Sie hier das Referenzhandbuch .
Referenzhandbuch - das eigentliche Handbuch, ein gesundes Buch mit mehr als 1000 Seiten. Die Arbeit von allem, was in den Chip geschoben wird, ist detailliert bemalt. Das Hauptdokument für die Entwicklung des Mikrocontrollers. Im Gegensatz zum Datenblatt sind Anweisungen für eine Vielzahl von MKs geschrieben. Sie enthalten viele Informationen über die Peripherie, die in Ihrem spezifischen Modell nicht verfügbar sind.
Programmierhandbuch oder Befehlssatzhandbuch - Anweisungen für die eindeutigen Befehle des Mikrocontrollers. Entwickelt für diejenigen, die in Assembler programmieren. Die Autoren der Compiler verwenden es aktiv, um den Code zu optimieren, sodass wir ihn im Allgemeinen nicht benötigen. Ein Blick hierher ist jedoch hilfreich, um ein allgemeines Verständnis für einige spezifische Befehle wie das Verlassen des Interrupts sowie die aktive Verwendung des Debuggers zu erlangen.
Anwendungshinweis - Nützliche Tipps zur Lösung spezifischer Probleme, häufig anhand von Codebeispielen.
Errata Sheet - eine Beschreibung von Fällen von nicht standardmäßigem Chipverhalten mit etwaigen Bypass-Optionen.
Was ist in Datenblättern
Direkt im Datenblatt benötigen wir möglicherweise die folgenden Abschnitte:
Geräteübersicht - Auf der ersten Seite des Datenblattes wird kurz auf das Gerät eingegangen. Es ist sehr nützlich in Situationen, in denen Sie irgendwo einen Chip gefunden haben (Säge in einem Geschäft, Vypayali, eine Erwähnung gefunden) und verstehen möchten, was es ist.
Allgemeine Beschreibung - Eine detailliertere Beschreibung der Fähigkeiten der Chips aus der Leitung.
Pinbelegung - Pinbelegungsschemata für alle möglichen Chipgehäuse (welches Bein hat einen Stift).
Pin-Beschreibung - Eine Beschreibung des Zwecks und der Funktionen jedes Pins.
Speicherzuordnung - Wir benötigen kaum eine Adresszuordnung im Speicher, aber manchmal enthält sie auch eine Adressentabelle von Registerblöcken.
Registerzuordnung - Die Adressentabelle der Registerblöcke befindet sich in der Regel im Datenblatt und im Referenzhandbuch - nur Adressversätze .
Elektrische Eigenschaften - In diesem Abschnitt sind wir hauptsächlich an absoluten Maximalwerten interessiert, in denen die maximale Belastung des Chips aufgeführt ist. Im Gegensatz zum nicht zu tötenden Atmega328p können Sie bei den meisten MKs keine ernsthaften Lasten an die Pins anschließen, was für Arduino-Spieler zu einer unangenehmen Überraschung wird.
Paketinformationen - Zeichnungen von erschwinglichen Gehäusen, die beim Entwerfen Ihrer Baugruppen nützlich sind.
Das Referenzhandbuch besteht strukturell aus Abschnitten an der spezifischen Peripherie, die in der Überschrift angegeben sind. Jedes Kapitel kann in drei Teile unterteilt werden:
Übersicht , Einführung , Funktionen - eine Übersicht über die Funktionen der Peripherie;
Funktionsbeschreibung , Bedienungsanleitung oder nur der Hauptabschnitt - eine detaillierte Textbeschreibung der Prinzipien des Peripheriegeräts und seiner Verwendung;
Register - Beschreibung der Steuerregister. In einfachen Fällen wie GPIO oder SPI kann dies ausreichen, um Peripheriegeräte zu verwenden, aber häufig müssen Sie die vorherigen Teile noch lesen.
So lesen Sie Datenblätter
Datashites aus Gewohnheit erschrecken mit ihrem Volumen und einer Fülle unverständlicher Wörter. In der Tat ist nicht alles so beängstigend, wenn Sie ein paar Life-Hacks kennen.
Installieren Sie einen guten PDF-Reader . Datashits sind in der glorreichen Tradition von Papieranweisungen geschrieben. Es ist großartig, sie zu drucken, mit Plastiklesezeichen zu versehen und zu nähen. Hypertext in ihnen wird in Spurenmengen beobachtet. Glücklicherweise ist zumindest die Struktur des Dokuments mit einem Lesezeichen versehen, sodass ein guter Leser mit bequemer Navigation sehr wichtig ist.
Datashit ist nicht Straustrups Lehrbuch, Sie müssen nicht alles darin lesen . Wenn Sie den vorherigen Tipp verwendet haben, suchen Sie einfach den Abschnitt in der Lesezeichenleiste.
Datenblätter, insbesondere Referenzhandbücher , beschreiben möglicherweise nicht die Funktionen eines bestimmten Chips, sondern die gesamte Linie . Dies bedeutet, dass die Hälfte oder sogar zwei Drittel der Informationen nicht mit Ihrem Chip zusammenhängen. Überprüfen Sie vor dem Studium der TIM7-Register die allgemeine Beschreibung, falls vorhanden.
Es reicht aus, Englisch auf einem Grundniveau zu sprechen . Datashits bestehen zur Hälfte aus Begriffen, die dem durchschnittlichen Muttersprachler unbekannt sind, und zur Hälfte aus einfachen Verbindungsstrukturen. Es gibt immer noch schöne chinesische Datenblätter im chinesischen Englisch, wobei die Hälfte auch Begriffe sind und die zweite Hälfte eine zufällige Menge von Wörtern ist.
Wenn Sie auf ein unbekanntes Wort stoßen, versuchen Sie nicht, es mit dem Englisch-Russischen Wörterbuch zu übersetzen. Wenn Sie die Hysterese verwirrt, werden Sie durch die Übersetzung von „Hysterese“ nicht wärmer. Verwenden Sie Google, Stack Overflow, Wikipedia und Foren, in denen das erforderliche Konzept in einfachen Worten anhand von Beispielen erläutert wird .
Der beste Weg, um zu verstehen, was Sie lesen, ist das Einchecken in Aktion . Halten Sie daher das Ihnen vertraute Debug-Board bereit, vorzugsweise zwei, falls Sie dennoch etwas falsch verstanden und einen magischen Rauch gesehen haben.
Es ist eine gute Angewohnheit, ein Datenblatt zur Hand zu haben, wenn Sie das Tutorial einer anderen Person lesen oder die Bibliothek einer anderen Person studieren. Es ist möglich, dass Sie darin eine optimalere Lösung für Ihr Problem finden. Und umgekehrt - wenn Sie anhand des Datenblattes nicht verstehen können, wie das Register funktioniert, googeln Sie es: Höchstwahrscheinlich hat jemand bereits alles in einfachen Worten beschrieben oder einen verständlichen Code auf dem Github hinterlassen.
Wortschatz
Einige nützliche Wörter und Notationen, mit denen Sie sich schneller an Datenblätter gewöhnen können. Was in den letzten Tagen in Erinnerung geblieben ist, sind Ergänzungen und Korrekturen willkommen.
Strom
Vcc , Vdd - Plus, Leistung
Vss , Vee - "Minus", Boden
Strom - Strom
Spannung - Spannung
Strom abnehmen - "Masse" für eine externe Last arbeiten
Stromquelle - externe Last versorgen
hoher Senken- / Quellenstift - Stift mit erhöhter Lasttoleranz
IO
H, hoch - am Stift Vcc
L, Niedrig - am Vss-Pin
Hohe Impedanz , Hi-Z , schwebend - es gibt nichts auf dem Stift, "hoher Widerstand", es ist tatsächlich für die Außenwelt unsichtbar.
schwacher Pull-up , schwacher Pull-down - eingebauter Pull-up / Pull-down- Widerstand, ein ungefähres Analogon von 50 kOhm (siehe Datenblatt). Es wird zum Beispiel verwendet, um zu verhindern, dass der Eingangsstift in der Luft hängt und falsch positive Ergebnisse verursacht. Schwach - weil es einfach ist, ihn zu "töten".
Push-Pull- Pin-Ausgangsmodus, in dem mit Arduino zwischen High und Low umgeschaltet wird - normaler OUTPUT.
Open Drain - Bezeichnung des Ausgangsmodus, in dem der Pin entweder niedrig oder hochohmig / schwebend sein kann . Darüber hinaus handelt es sich fast immer nicht um einen „echten“ offenen Drain, sondern um Schutzdioden, Widerstände usw. Es ist einfach eine Bezeichnung für den Boden / Nichts-Modus.
echter offener Abfluss - aber dies ist bereits ein echter offener Abfluss: Der Stift führt direkt zum Boden, wenn er offen ist, oder ist in der Schwebe, wenn er geschlossen ist. Dies bedeutet, dass bei Bedarf eine Spannung größer als Vcc durchgelassen werden kann, das Maximum jedoch weiterhin im Datenblatt im Abschnitt Absolute Maximum Ratings / Voltage angegeben ist.
Schnittstellen
in Reihe - in Reihe geschaltet
Verketten - Sammeln Sie Chips in einer Kette über eine serielle Verbindung, um die Anzahl der Ausgänge zu erhöhen.
Shift - Shift bezeichnet normalerweise eine Verschiebung von Bits. Dementsprechend ein- und ausschalten - Daten Stück für Stück empfangen und senden.
Latch - Ein Ventil, das den Puffer abdeckt, während Bits durch ihn verschoben werden. Wenn die Übertragung abgeschlossen ist, öffnet sich das Ventil und die Bits beginnen zu arbeiten.
Zum Eintakten - Bitweise Übertragung durchführen, alle Bits an die gewünschten Stellen verschieben.
Doppelpuffer , Schattenregister , Vorladeregister - Bezeichnungen des Verlaufs, wenn das Register neue Daten akzeptieren soll, diese aber bis zu einem bestimmten Zeitpunkt beibehalten soll. Damit die PWM beispielsweise ordnungsgemäß funktioniert, sollten sich ihre Parameter (Arbeitszyklus, Frequenz) erst ändern, wenn der aktuelle Zyklus beendet ist. Es können jedoch bereits neue Parameter übertragen werden. Dementsprechend werden die aktuellen im Schattenregister gehalten , und die neuen fallen in das Vorspannungsregister und werden im entsprechenden Chipregister aufgezeichnet.
Jeder
Prescaler - Frequenzteiler
ein Bit setzen - setze das Bit auf 1
ein Bit löschen / zurücksetzen - das Bit auf 0 zurücksetzen ( zurücksetzen - STM-Datenblatt-Chip)
um ein Bit umzuschalten - ändern Sie den Bitwert auf das Gegenteil (siehe Beispiel am Anfang des Artikels)
Was weiter
Im Allgemeinen war hier ein praktischer Teil mit einer Demonstration von drei Projekten zu STM32 und STM8 geplant, die speziell für diesen Artikel unter Verwendung von Datenblättern mit Lampen, SPI, Timern, PWM und Interrupts erstellt wurden:

Da der Text jedoch zu viel ist, werden die Projekte an den zweiten Teil gesendet.
Die Fähigkeit, Datenblätter zu lesen, hilft Ihnen bei Ihrem Hobby, aber es ist unwahrscheinlich, dass die Live-Kommunikation mit anderen Enthusiasten in Foren und Chatrooms ersetzt wird. Für ihn ist es dennoch zunächst einmal, die englische Sprache zu straffen. Deshalb habe ich es zu Ende gelesen - ein Sonderpreis: zwei kostenlose Lektionen in Skyeng bei der ersten Zahlung mit dem HABR2
Code.