Kleine Einführung
Als ich einmal in die nächste gemietete Wohnung fuhr, stieß ich auf eine gewisse Unannehmlichkeit, die ziemlich ärgerlich war: Der Lichtschalter im Hauptraum befand sich hinter dem Wandschrank, der an die Wand geschraubt war, und seine Neuanordnung war deshalb unmöglich Es hat viel Zeit und Mühe gekostet. Ich wollte dieses Problem unbedingt lösen, und mir kam ein Gedanke: eine Fernbedienung zur Steuerung der Beleuchtung!
Mit der Idee, eine eigene Fernbedienung zur Steuerung des Lichts im Raum zu entwickeln, begann meine Leidenschaft für Elektronik, Mikrocontroller und verschiedene Funkgeräte.
Liste der Artikel:
- Erste Schritte STM32 studieren oder Licht intelligent verwalten
- Erste Schritte STM32: Bitoperationen
- Erste Schritte STM32: Was sind Register? Wie arbeite ich mit ihnen?
Danach begann ich, dieses Thema zu studieren, mich mit den Grundlagen der Elektronik und Beispielen für Geräte vertraut zu machen und zu lernen, wie Menschen solche Geräte implementieren. Nachdem ich nach Informationen gesucht hatte, wie ich mit dem Studium von Mikrocontrollern beginnen kann, fand ich heraus, was Arduino ist, womit sie essen und wie man mit ihnen arbeitet. Die einfache Lösung sah sehr attraktiv aus, da der Code meines Wissens ein- oder zweimal erstellt wird. Nachdem ich jedoch festgestellt hatte, dass ich nicht wusste, was innerhalb des Mikrocontrollers außerhalb des Rahmens von Arduino-Skizzen vor sich ging, entschied ich mich, nach einer interessanteren Option zu suchen, die ein gründliches Studium und Eintauchen in den Dschungel der Mikrocontroller-Technologie implizierte.
Das Unternehmen, in dem ich arbeite, verfügt über eine Entwicklungsabteilung. Ich habe mich entschlossen, die Ingenieure zu kontaktieren, um mich auf den richtigen Weg zu bringen und zu zeigen, wo ich mit der Lösung meines Problems beginnen kann. Ich war stark davon abgehalten, Arduino zu studieren, und hatte einen unbekannten und unverständlichen grünen Schal in der Hand, auf dem sich Inschriften, Briefe und verschiedene elektronische Komponenten befanden.
All dies schien mir in diesem Moment unverständlich kompliziert zu sein, und ich kam sogar zu einiger Verwirrung, aber ich würde mich nicht weigern, die Aufgabe umzusetzen. So lernte ich die STM32-Familie von Mikrocontrollern und das STM32F0-Discovery-Board kennen, nachdem ich studiert hatte, welches Gerät ich für die von mir benötigten Zwecke stapeln möchte.
Zu meiner großen Überraschung waren eine so große Community, Artikel, Beispiele und verschiedene Materialien zu STM nicht in der gleichen Menge vorhanden wie für Arduino. Wenn Sie suchen, gibt es natürlich viele Artikel "für Anfänger", die beschreiben, wie und wo Sie anfangen sollen. Aber in diesem Moment schien mir das alles sehr kompliziert zu sein, viele Details, die für den forschenden Verstand eines Anfängers interessant waren, wurden nicht erzählt. Obwohl viele Artikel als „Lernen für die Kleinsten“ charakterisiert wurden, war es selbst mit vorgefertigten Codebeispielen nicht immer möglich, mit ihrer Hilfe das gewünschte Ergebnis zu erzielen. Aus diesem Grund habe ich beschlossen, eine kurze Reihe von Artikeln zur Programmierung auf STM32 zu schreiben, um eine bestimmte Idee umzusetzen: ein Beleuchtungsbedienfeld im Raum.
Warum nicht AVR / Arduino?
Vorwegnahme von Aussagen, dass es für einen unerfahrenen Anfänger zu früh wäre, sich sofort mit dem Studium eines so komplexen MK wie STM32 zu befassen - ich werde Ihnen sagen, warum ich mich für diesen Weg entschieden habe, ohne die Atmel-Prozessorfamilie kennenzulernen und Arduino nicht einmal als Option in Betracht zu ziehen .
Erstens spielte das Preis-Funktions-Verhältnis eine entscheidende Rolle, der Unterschied ist sogar zwischen einem der billigsten und einfachsten MKs von ST und dem eher „fetten“ ATMega sichtbar:
Nachdem ich signifikante Unterschiede zwischen dem Preis und den Fähigkeiten von AVR und STM32 festgestellt hatte, entschied ich, dass ich AVR in meiner Entwicklung nicht verwenden werde =)
Zweitens habe ich zuvor selbst versucht, die Fähigkeiten zu bestimmen, die ich erhalten hätte, wenn ich das gewünschte Ergebnis erreicht hätte. Falls ich mich für Arduino entschieden habe, würde es ausreichen, die fertigen Bibliotheken zu kopieren, eine Skizze anzubringen und voila. Aber ein Verständnis dafür, wie digitale Busse funktionieren, wie ein Funksender funktioniert, wie alles konfiguriert und verwendet wird - in dieser Situation wäre ich nie gekommen. Für mich selbst habe ich den schwierigsten und schwierigsten Weg gewählt, damit ich auf dem Weg zum Ergebnis die maximale Erfahrung und das maximale Wissen bekomme.
Drittens kann jeder STM32 durch einen anderen STM32 ersetzt werden, jedoch mit besseren Funktionen. Darüber hinaus ohne den Schaltkreis zu ändern.
Viertens verwenden Menschen mit beruflicher Entwicklung eher 32-Bit-MKs, und meistens handelt es sich um Modelle von NXP, Texas Instruments und ST Microelectronics. Ja, und ich kann jederzeit zu meinen Ingenieuren aus der Entwicklungsabteilung gehen und herausfinden, wie ein bestimmtes Problem gelöst werden kann, und mich zu Fragen beraten lassen, die mich interessieren.
Warum sollten Sie STM32-Mikrocontroller mit einem Discovery-Board erkunden?
Wie Sie bereits verstanden haben, werden wir unsere Bekanntschaft und Untersuchung des STM32-Mikrocontrollers, liebe Leser, mit der Verwendung des Discovery-Boards beginnen. Warum Discovery und nicht sein eigenes Board?
- Auf jeder Discovery-Karte befindet sich ein eingebauter ST-LINK-Programmierer / Debugger, der über USB mit dem Computer verbunden ist und sowohl zum Programmieren des Mikrocontrollers auf der Karte als auch von externen Geräten durch Entfernen / Installieren der entsprechenden Jumper verwendet werden kann. Das heißt, ein Plus für alles - wir sparen auch Geld, indem wir eine Zwei-in-Eins-Lösung erhalten: einen Mikrocontroller und einen Programmierer.
- Discovery-Karten haben eine vollständige Verdrahtung aller Pins direkt vom Mikrocontroller zu den Pins der Platine. Der Einfachheit halber habe ich Discovery in dieselben zwei Prototyping-Boards gesteckt.
- 3. Auf der Platine befindet sich immer eine bestimmte Anzahl von Peripheriegeräten aller Art, z. B. Beschleunigungsmesser, Mikrofone, Displays, Sensoren und viele andere. Verschiedene Discovery-Boards haben unterschiedliche Body-Kit-Optionen. Wenn jemand interessiert ist, können Sie mehr auf der Website des Herstellers lesen .
Was brauchen wir für die Entwicklung neben dem Discovery Board?
Bei unserer Arbeit mit dem Discovery Board benötigen wir eine Reihe unersetzlicher Dinge, auf die wir nicht verzichten können:
- Leiterplatte, um zu sehen, wo, wo und was angeschlossen ist. Sie können die Schaltung auf der Seite Ihres Motherboard-Herstellers im Abschnitt "Schaltplan" finden. Sie können die Schemata herunterladen, indem Sie eine Seite weiter unten in dem im Bild angegebenen Block scrollen:
- Datenblatt zu unserem Mikrocontroller, damit Sie jederzeit die Pinbelegung, Spezifikationen, Parameter und andere notwendige Informationen für die Arbeit sehen können. In meinem Fall ist es STM32F051R8T6 . Der Datenblatt-Link befindet sich im Seitentitel:
- Wir benötigen auch das Referenzhandbuch für unseren Mikrocontroller. Dies ist ein Dokument, in dem Methoden und Ansätze für die Arbeit mit dem MK-Kern, seinem Taktblock, mit Peripheriegeräten usw. ausführlich beschrieben werden. Es enthält auch eine Beschreibung aller MK-Register, aller Optionen und Einstellungen von MK und Peripheriegeräten. Dies ist wahrscheinlich die wichtigste Datei, ohne die es sehr schwierig wäre herauszufinden, wie und was im MK funktioniert. Sie können die Datei über den Link auf der Mikrocontrollerseite herunterladen:
- Und schließlich müssen wir eine Entwicklungsumgebung einrichten, in der wir Programme für unseren MK erstellen und unsere Programme ruhig kompilieren und flashen können. Zu einer Zeit habe ich fast alle gängigen IDEs ausprobiert und mich für Keil uVision 5 entschieden. Meiner Meinung nach schien mir diese Entwicklungsumgebung am bequemsten und am einfachsten zu erlernen. Der eingebaute Debugger, vorgefertigte und einfach zu verbindende Bibliotheken auf niedriger Ebene, eine Vielzahl von Beispielen und eine bequem organisierte Arbeitsoberfläche sowie der IDE-Bereich waren die entscheidenden Faktoren, die meine Wahl beeinflussten. Sie können diese IDE von der offiziellen Website herunterladen, eine einfache Registrierung ist jedoch erforderlich :. Es gibt wirklich eine kleine Einschränkung für die Größe der heruntergeladenen Firmware in 32kB seitdem Diese IDE wird bezahlt. Aber das wird uns mehr als genug sein. Wir brauchen MDK-Arm:
Beginnen wir mit der Ersteinrichtung und Vorbereitung der IDE für die Arbeit!
Nachdem Sie die Installationsdatei unserer IDE heruntergeladen haben, können Sie mit der Installation fortfahren. Befolgen Sie die Anweisungen des Installationsprogramms, um den Installationsvorgang abzuschließen. Nachdem alle für den Betrieb erforderlichen Dateien kopiert wurden, wird ein Fenster für das Software-Installationsprogramm zum Entwickeln des
Pack-Installationsprogramms angezeigt. Dieses Installationsprogramm enthält Bibliotheken auf niedriger Ebene, Middleware und Beispiele für Programme, die regelmäßig aktualisiert und aktualisiert werden.
Um mit unserem Board arbeiten zu können, müssen wir eine Reihe von Paketen installieren, die für die Arbeit erforderlich sind, und wir müssen einen Mikrocontroller finden, mit dem wir arbeiten werden. Sie können auch die Suche oben im Fenster verwenden. Nachdem wir unser MK gefunden haben, klicken Sie in der zweiten Hälfte des Fensters darauf und wir müssen die folgende Liste von Bibliotheken installieren:
- Keil :: STM32F0xx_DFP ist ein komplettes Softwarepaket für eine bestimmte Familie von Mikrocontrollern, einschließlich Handbüchern, Datenblättern, SVD-Dateien und Bibliotheken des Herstellers.
- ARM :: CMSIS ist ein Paket des Cortex Microcontroller Software Interface Standard, das einen vollständigen Satz von Bibliotheken von ARM zur Unterstützung des Cortex-Kerns enthält.
- Keil :: ARM_Compiler ist der neueste Compiler für ARM.
Nach der Installation der erforderlichen Pakete können Sie mit der Konfiguration der IDE und unseres Debuggers / Programmierers fortfahren. Dazu müssen wir das Hauptfenster von Keil öffnen und ein neues Projekt erstellen.
Gehen Sie dazu zum Menü
Projekt -> Neues uVision-Projekt und wählen Sie den Ordner aus,
in dem wir unser Projekt speichern
möchten .
Nachdem Keil uns gefragt hat, welches MK im Projekt verwendet wird. Wählen Sie das gewünschte MK aus und klicken Sie auf
OK .
Und es erscheint wieder ein uns bereits bekanntes Fenster, in dem wir die interessierenden Module mit dem Projekt verbinden können. Für unser Projekt benötigen wir zwei Module:
- Der Kern der CMSIS-Bibliothek , in dem Einstellungen, Registeradressen und vieles mehr deklariert werden, was für die Arbeit unseres MK notwendig ist.
- Startup-Datei , die für die Initialisierung von MK beim Start, die Deklaration von Vektoren und Interrupt-Handlern und vieles mehr verantwortlich ist.
Wenn alle Abhängigkeiten des Plug-Ins erfüllt sind, signalisiert uns der Manager dies grün:
Nachdem wir auf
OK geklickt haben, können wir mit der Erstellung unseres Projekts beginnen.
Um die Projektparameter und unseren Programmierer zu konfigurieren, klicken Sie mit der rechten Maustaste auf
Ziel 1 , um das entsprechende Menü zu öffnen.
Stellen Sie im Hauptmenü des Projekts den
Xtal- Parameter auf
8,0 MHz ein . Dieser Parameter ist für die Betriebsfrequenz des Quarzoszillators unseres MK verantwortlich:
Als nächstes konfigurieren wir unseren Programmierer / Debugger. Klicken Sie im selben Fenster auf die Registerkarte
Debug, wählen Sie den Parameter
ST-Link Debugger im Feld
Verwenden aus und gehen Sie zu den Einstellungen:
In den Einstellungen sollte das Modell unseres ST-Link auf der Platine installiert sein, die Seriennummer, die Version von HW und IDCODE MK, die wir flashen werden:
Der Einfachheit halber können Sie den Parameter konfigurieren, der dafür verantwortlich ist, dass der MK nach dem Blinken automatisch zurückgesetzt wird. Aktivieren Sie dazu das Feld
Zurücksetzen und Ausführen .
Danach müssen Sie eine weitere Option konfigurieren, mit der wir russischsprachige Kommentare zum Code unserer Projekte schreiben können. Wir klicken auf die Schaltfläche
Konfiguration und wählen im daraufhin
angezeigten Menü im Feld
Codierung die
Option Russisches Windows-1251 aus.
Das ist alles. Unsere IDE und unser Programmierer sind bereit zu gehen!
Keil verfügt über einen praktischen Projektnavigator, in dem wir die Projektstruktur, die für die Arbeit erforderlichen Referenzmaterialien, einschließlich derjenigen, die wir bereits zuvor auf unseren Computer heruntergeladen haben (Erkennungsschema, Datenblatt, Referenzhandbuch), anzeigen können Im Projekt verwendete Funktionen und Vorlagen zum schnellen Einfügen verschiedener Sprachkonstrukte einer Programmiersprache.
Benennen Sie den Ordner in der Projektstruktur von
Quellgruppe 1 in
App / Benutzer um , um
anzuzeigen , dass sich die Benutzerprogrammdateien in diesem Ordner befinden:
Fügen Sie die Hauptprogrammdatei über den Projektnavigator hinzu, indem Sie den Befehl
Neues Element zur Gruppe hinzufügen „App / Benutzer“ ausführen.
Sie müssen
C-Datei (.c) aus der Liste auswählen und ihr den Namen
main.c zuweisen :
Die erstellte Datei wird automatisch zur Projektstruktur hinzugefügt und im Hauptprogrammfenster geöffnet.
Nun können wir beginnen, unser Programm zu erstellen.
Zunächst müssen Sie das Header-Dokument unserer Mikrocontroller-Familie mit unserer ausführbaren Datei verbinden. Fügen Sie der Datei
main.c die folgenden Zeilen
hinzu . Mit diesem Programm blinken unsere LEDs abwechselnd:
/* */
#include "stm32f0xx.h"
/* */
int main(void)
{
/* GPIO */
RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
/* PC8 PC9 Output*/
GPIOC ->MODER = 0x50000;
/* Output type Push-Pull */
GPIOC->OTYPER = 0;
/* Low */
GPIOC->OSPEEDR = 0;
while(1)
{
/* PC8, PC9 */
GPIOC->ODR = 0x100;
for (int i=0; i<500000; i++){} //
/* PC9, PC8 */
GPIOC->ODR = 0x200;
for (int i=0; i<500000; i++){} //
}
}
, , . :
Build ( F7) , , :
Load ( F8) :
, .
! STM32 !
, , , Discovery. )
:
- STM32 -
- STM32:
- STM32: ? ?