Der einfachste Start in STM durch "einen Ort"

Wahrscheinlich ist die Zeit der Religionskriege von AVR gegen STM bereits vorbei, aber nein, nein, ja, es gibt Ausbrüche von Zusammenstößen zwischen den beiden Lagern. Fast jede Veröffentlichung über AVR-Kunsthandwerk wird definitiv einen Kommentar enthalten wie "Ja, wie viel Sie Ihrer Großmutter scheißen können, es ist höchste Zeit, auf STM umzusteigen", dann die Variationen zum Thema Preis, Anzahl der Beine und Timer. Wenn der STMshcher weiter fortgeschritten ist, gibt es sicherlich einen Hinweis darauf, dass der AVR keinen DMA enthält und nicht, daher sollte der AVR sterben. Warum ein einfaches Blink-Voltmeter-Thermometer DMA, ein Berg von 16-Bit-Timern, 100 Beinen und einem 12-Bit-ADC, erklärt normalerweise niemand. Warum brauchen wir einen solchen Harvester in einem Gerät, das Tiny13 leicht herausnehmen kann und das gleichzeitig nicht einmal auf ein Drittel seiner Ressourcen geladen ist, wird niemand verstehen. Sie müssen nur zu STM32 wechseln, und das war's. Für hier.

Und ich muss sagen, die Leute haben ein Verlangen nach Neuheit. Aber kann ich es wirklich versuchen? Was ist, wenn es dir gefällt? Hier ist nur das Referenzhandbuch für das beliebte STM32F103C8T6, auf dem das massivste 1126-seitige Blue-Tablet basiert. Irgendwie hat es keinen „Schnellstart“. Sogar ein separates Dienstprogramm, das von den Ältesten „Kalokub“ so gehasst wird, und das muss untersucht werden, was ist was? Ja, und nachdem er sich mit Cube befasst hat, ist es unwahrscheinlich, dass er in 5 Minuten beginnt. Das von ihm erzeugte Fußtuch ist nicht die am besten zugängliche Lektüre für die Nacht. Es geht nur darum, in die Stirn zu gelangen, über die nicht jeder diskutieren kann.

Zahlreiche Artikel, ähnlich wie dieser, über den schnellen und einfachen Start in STM verdienen eine gesonderte Diskussion. Bei all diesen Artikeln war ich zunächst durch einen Umstand sehr verwirrt. Nirgendwo gibt es eine detaillierte Erklärung dessen, was wir hier tatsächlich schreiben. Ein paar Screenshots, wie man ein Projekt erstellt, dann sofort eine Codewand, machen Sie es so! Und was ist da, warum ist es, warum ist es so, woher all diese scheinbar verständlichen Worte kommen, niemand vertieft sich darin, weil die Kräfte beim Schreiben eines Handbuchs zur Installation von Cale und Kuba und beim Starten des Projekts erschöpft waren. Erst nach einiger Zeit, individuell für jeden, versteht man, was passiert und warum. Im Gegenzug schlage ich einen Weg vor, nicht wie alle anderen von vorne zu beginnen, sondern vom Ende. Jetzt machen wir das Gegenteil, konfigurieren den Controller nicht, schreiben Code und debütieren ihn, sondern fahren sofort mit dem Debuggen fort.und zeichnen Sie unsere Aktionen in Form von Code auf.

Daher installieren wir Keil als kostenlose Umgebung (bis zu 32 KB Code). Wir werden diese Aktion nicht beschreiben, sie befindet sich im Internet und die schrittweise Anleitung des Installateurs muss von der Person beherrscht werden, die zu STM geht. Wir starten das Projekt: Project-New uVision Project, erstellen einen Ordner und eine Projektdatei. Das Controller-Auswahlfenster wird geöffnet, geben Sie 103C8 in die Suche ein und stimmen Sie dem einzigen ausgewählten Modell zu.

Als nächstes gelangen wir zum Bibliotheksauswahlfenster:



Hier setzen wir drei Morgen: CMSIS-CORE, Device-Startup und Device-GPIO. Dieses Set reicht völlig aus, um ein Bein zu hüpfen und die LED zu beleuchten. Dann müssen Sie noch konfigurieren, Sie können nichts davon bekommen. Alt + F7 öffnet das Einstellungsfenster unter Projektoptionen für Ziel. Auf der Registerkarte "Ausgabe" müssen Sie das Kontrollkästchen "HEX-Datei erstellen" aktivieren, um eine Firmware-Datei zu erstellen, die wir auf den Controller hochladen. Als nächstes wählen wir auf der Registerkarte "Debuggen" ST-Link aus, wodurch die Firmware und das Debüt heruntergeladen werden:



Über die Schaltfläche "Einstellungen" neben dem Auswahlfenster des Programmierers gelangen wir zum Fenster "Cortex-M-Zieltreiber-Setup", in dem sich " Flash Download "Setzen Sie eine Morgendämmerung" Zurücksetzen und Ausführen ".

Klicken Sie in der Projektstruktur mit der rechten Maustaste auf den Ordner „Quellgruppe 1“. Erstellen Sie im daraufhin geöffneten Assistenten die Datei main.c, in die wir in Kürze den Code schreiben werden. Klicken Sie in der geöffneten Datei main.c mit der rechten Maustaste auf die erste und wichtigste Aufnahme:



Fügen Sie den Code hinzu, der aus main und endlos besteht, während:

#include "stm32f10x.h"                  // Device header
int main(){
	while(1){
	}
}

Seltsamerweise ist dies alles für den Moment, dies ist ein vorgefertigtes und verständliches Programm, das korrekt kompiliert und in die Steuerung geladen wird. Wir drücken F7 und sehen, dass die Firmware erfolgreich zusammengestellt wurde, es gibt keine Fehler oder Warnungen.



Von diesem Moment an ist der Controller für uns vollständig zugänglich. Wir können ihn unter der Debug-Zeile eingeben und in alle Richtungen drehen, und er wird reagieren.

Die Tasten Strg + F5 führen uns zum Debuggen, und mit der Schaltfläche „System Viewer Windows“ können Sie die Fenster zum Steuern der Registerregister und zum Steuern der Beine des GPIO starten.



Außerdem schlage ich vor, dass Sie das Referenzhandbuch weiterhin verwenden, insbesondere da Sie es nicht einmal herunterladen müssen. Es ist verfügbar, indem Sie im Menü „Ansicht“ auf die Registerkarte „Bücher“ klicken:



Jetzt schlage ich vor, die folgenden Argumente zu verwenden. Aus der Pinbelegung auf dem Blue Tablet ist ersichtlich, dass die LED am Zweig von Port 13 hängt. Zahlreiche Internetressourcen und Diskussionen erwähnen immer, dass Sie etwas aktivieren müssen, bevor Sie etwas in STM tun, andernfalls stellen Sie die Uhr ein. Ohne weiteres schreiben wir in das Suchfeld des PDF-Readers, was wir brauchen, nämlich Port C zu aktivieren: "PORT C CLOCK ENABLE". Wir



kommen zu folgendem Bild: Daraus können wir schließen, dass die Taktung von Port C im IOPCEN-Register aktiviert ist. Mit diesem Wissen wechseln wir im Debug-Modus zur Registerkarte RCC und geben diesen Namen in die Suchleiste ein:



Markieren Sie das erforderliche Kontrollkästchen mit einem Häkchen, und ab diesem Moment betrachten wir Port C als aktiviert.

Wenn wir uns nun an den langmütigen AVR erinnern, werden wir nach der Einstellung des tatsächlichen Pins suchen. Damit es funktioniert, muss erklärt werden, was genau wir davon wollen. Und wir wollen mit Fuß Nummer 13 von Port C springen, dafür müssen wir den Betriebsmodus einstellen. In der Suchleiste im Referenzhandbuch fahren wir in der „Port-Bit-Konfiguration“, die unseren Wunsch zum Ausdruck bringt, zu lesen, wo die Beineinstellungen versteckt sind. Die Suche führt uns zu einer Tabelle, aus der folgt,



dass zum Zuweisen eines Beins als Ausgang die Register MODE und CNF konfiguriert werden müssen: Aus Tabelle Nr. 20 geht hervor, dass zum Zuweisen eines Beins als Push-Pull-Ausgang die Register CNF0 und CNF1 sowie der Paarzustand zurückgesetzt werden müssen MODE0 und MODE1 sind in Tabelle Nr. 21 beschrieben. Ich werde die obere Option wählen, bis zu 10 MHz, MODE0 = 1, MODE1 = 0. Dies werde ich im GPIOC-Fenster für die Register CNF13 und MODE13 tun



Jetzt haben wir die Uhr und den Betriebsmodus des Ports konfiguriert. Es ist Zeit, genau herauszufinden, wie man ein Bein springt. Auf Englisch wird gesetzt, dass das Port-Bit als „Port-Bit gesetzt“ geschrieben ist, und wir werden im Handbuch nach diesem Satz suchen: Die



Suche führt uns zu einer Seite mit einer Tabelle, die deutlich zeigt, dass das BSRR-Register, bestehend aus BS- und BR-Paaren, für das Setzen des Status des Port-Beins verantwortlich ist , Bit gesetzt bzw. Bit zurückgesetzt. Wir finden diese Register im GPIOC-Fenster im Debug-Modus und genießen die Steuerung von Bein Nummer 13 direkt, indem wir Dohlen mit der Maus in die entsprechenden Kontrollkästchen stecken:



Eine LED auf der blauen Pillenplatte hängt zwischen dem Bein und dem VCC und steuert diese zurück zum Registernamen. Das Bit-Set (BS13-Register) löscht es und das Bit-Reset (BR13-Register) zündet es. Dies sind Register atomarer Operationen, die nach dem Aktivieren des Kontrollkästchens zurückgesetzt werden. Es ist möglich, den Fuß über das ODR-Register zu steuern (Abschnitt 9.2.4 Port-Ausgangsdatenregister (GPIOx_ODR) im Referenzhandbuch). Es zeigt deutlich, wozu die Installation und das Zurücksetzen der Dohle führt.



Eine grüne und dimmende grüne LED zeigt an, dass alles richtig funktioniert. Es bleibt nur, dies alles in Form von Code in die main.c. zu schreiben. Hier erscheinen genau die Rosinen, die diese Methode zum Erfassen des STM-Controllers durch Debug von den anderen unterscheiden, mit denen das gesamte Internet übersät ist. Ich schlage vor, nur das, was wir im Debug-Fenster sehen, in Code umzuschreiben. Beispiel:



Stellen Sie den Port-Betriebsmodus ein und aktivieren Sie die Taktung.



Sie schalteten das Hafenbein ein, warteten, schalteten es aus und so weiter:

#include "stm32f10x.h"                  // Device header

int main(){
	RCC->APB2ENR=0x00000010;			//  
	GPIOC->CRH=0x44144444;			//   Push-Pull  10MHz
	int i;								//     / 
	while(1){
		GPIOC->ODR=0x00002000;		//  LED,      
		i=2000000;					//    
		while (i) i--;					// 
		GPIOC->ODR=0x00000000;		//  LED
		i=2000000;					//  
		while (i) i--;					
	}
}


Natürlich ist diese Methode alles andere als die beste und nicht korrekt, aber meiner Meinung nach die verständlichste und einfachste. Darüber hinaus führt er in die Arbeit mit einem Datenblatt (Referenzhandbuch) ein und macht keine Angst, wie das Lesen von Mana und das Schreiben mehrseitiger Fußtücher mit Code für Blink. Ja, es gibt keine Abstraktionsebenen, viel wurde übersehen, aber ich denke, Sie können dies für den elementaren Start verzeihen. Mana lesen und richtig mit Registern arbeiten ist jetzt, jetzt blinkt die LED und wir verstehen im Grunde, wie und was wir getan haben und vor allem, woher all diese Abkürzungen kamen. Wenn mir diese Art des Studierens von STM schon einmal gezeigt worden wäre, hätte ich vielleicht nicht mehr als 9000 verschiedene Programmierer für AVR gesammelt, in denen es kein Debugging gab, sondern mich sofort mit dem Cortex befasst. In AVR gibt es zwar kein verständliches und zugängliches Debug, aber es ist noch zu früh, um Tiny13 zu vergessen. Sie nimmt ihre Aufgaben auf.

All Articles