Günstige STM32-Karte + Arduino IDE UPD 17.08.2017

Bild

Möchten Sie Ihre Arduino-Projekte aktualisieren? Lassen Sie sie schneller arbeiten, machen Sie Messungen und Anpassungen genauer und fügen Sie Fehler hinzu (sie sind bei neuen Geräten unvermeidlich). Dann ist dieser Artikel für Sie.

Das Arduino-Thema fängt immer mehr die Köpfe der Menschheit ein, aber früher oder später sehen wir uns mit der Tatsache konfrontiert, dass uns etwas fehlt, zum Beispiel Budget / Größen / Port- Pins / Bit-Kapazität / Leistung ... Wie ein weiser Mann sagte : „Wer will, sucht nach Möglichkeiten Wer nicht will, sucht nach Gründen. “

Gute Leute verstehen das und beginnen langsam, STM32 an das Arduino-Thema anzuhängen , da die 8-Bit-AVR-Mikrocontroller, auf denen viele Arduino-Boards basieren, die Aufgaben nicht immer bewältigen können.

Eine Zusammenfassung dieses Artikels im Videoformat:



Okay, weniger Texte und näher am Thema. In diesem Artikel werde ich eine billige Debugging- Karte betrachten, die auf dem Mikrocontroller STM32F103C8T6 basiert :

Bild

Vergleichen wir zunächst die Hauptparameter der STM32- Karte und ihr Preisanalog - Arduino Nano V3.0:

  • Betriebsfrequenz 72 MHz gegenüber 16 für Arduino;
  • Die Größe des Flash-Speichers beträgt 64 KB gegenüber 32 KB.
  • RAM, es ist RAM (wo die Variablen gespeichert sind), der STM32 hat bis zu 20 KB, der Arduinka hat nur 2;
  • Schneller 12-Bit-ADC, während Arduino-Karten, die AVR-Mikrocontroller verwenden (dies ist normalerweise die Mehrheit), 10-Bit verwenden. Dies bedeutet, dass im Fall von STM32 die Funktion analogRead (*) ist; gibt 0..4095 gegenüber 0..1023 zurück, was im ersten Fall zu genaueren Messungen führt;
  • 16- , 8- Arduino , , analogWrite(*);pwmWrite(*); 0..65535, 0..255. , , ;
  • USB, Arduino 2 ;
  • — 2 3.6( 2 AA ), 2.7...5 ;
  • — 1.9 1.8().

Natürlich übertrifft die STM32-basierte Debugging-Karte den Arduino Nano in jeder Hinsicht, abgesehen vom Preis, aber 10 Cent sind ein guter Preis für großartige Leistung, aber über die Peripheriegeräte, mit denen der STM32 gefüllt ist, bin ich völlig still darüber, was DMA wert ist oder integrierte Echtzeituhren im Mikrocontroller.

Bild

All dies macht dieses Board in allem äußerst attraktiv, außer in einer Sache - für einen Anfänger wie mich scheint das STM32-Thema zu zeitaufwändig zu sein, es gibt ganze Websites, die sich der Programmierung dieser Mikrocontroller widmen. Wenn Sie jedoch STM32 mit der Arduino IDE befreundet haben, sinkt die Eintrittsschwelle auf ein extrem niedriges Niveau. Obwohl, wie sie sagen, "In jedem Fass Honig ist eine Fliege in der Salbe", aber mehr dazu weiter unten.

Bereiten wir das Board für die Arbeit mit der Arduino IDE vor. Als erstes muss ein spezieller Bootloader auf den Mikrocontroller hochgeladen werden, mit dem Sie die Karte über Hardware-USB und direkt aus der Entwicklungsumgebung flashen können. Bewegen Sie dazu den oberen Jumper (auch bekannt als „BOOT0“) auf Position „1“:

Bild

Wofür sind die Jumper BOOT0 und BOOT1 gedacht?
, STM32 , (system memory), , USB to UART , ST-Link V2.

image


Als nächstes benötigen wir einen Adapter von USB zu UART. Es ist zu beachten, dass STM32 eine 3,3-V-Logik ist und die Kompatibilität mit 5 V nicht garantiert ist. Daher wird empfohlen, USB zu UART zu verwenden, mit dem Betriebsmodi mit 3,3 / 5-V-Logik ausgewählt werden können. Ich habe einen billigen Adapter verwendet, der auf CH340G basiert:

Bild
* Wie Sie sehen, hat sich der Hersteller nicht mit einer Flussmittelwäsche umgedreht , dies hat natürlich keinen Einfluss auf die Arbeit.

Ich habe die Karte wie folgt an den USB-UART-Adapter angeschlossen:

G <-> GND;
5 V 5 V;
PA10 TXD;
PA9 <-> RXD.

Bild
* PA10 / PA9 auf der Karte ist einfach als A10 / A9 signiert - diese Ports sind die erste USART-Hardware, es gibt 3 davon auf der Karte, es gibt auch 2 Hardware-I2Cs und 2 SPIs.

Der Einfachheit halber habe ich die Platine mit 5 V betrieben. Bei einer Stromversorgung von 3,3 V befindet sich ein Pin „3.3“ auf der Platine. Achtung, 5 V können den Mikrocontroller leicht deaktivieren. Achten Sie daher auf die Verbindung.

Laden Sie den Flash Loader Demonstrator herunter, installieren Sie ihn und führen Sie ihn aus (verfügbar im Archiv für den Artikel):

Bild

Wählen Sie die COM-Portnummer unseres Adapters aus, in meinem Fall COM43, und klicken Sie dann auf "Weiter":

Bild

Da ich einen neuen Mikrocontroller habe, saß die Fliege immer noch nichtniemand hat etwas darauf geschrieben (außer dem Hersteller selbst), dann gibt es standardmäßig einen Leseschutz. Das Programm warnt uns, dass der Flash-Speicher gelöscht wird, wenn Sie auf die Schaltfläche "Schutz entfernen" klicken, dh wenn es eine Art Firmware gab - Sie wird in Rente gehen. In meinem Fall gibt es dort nichts Nützliches, also drücke ich mutig. Dann sehe ich Folgendes:

Bild

Klicken Sie auf „OK“:

Bild

Da meine Debugging-Karte auf dem STM32F103 C8- Mikrocontroller basiert - es gibt 64 KB Flash-Speicher, gibt es auch einen STM32F103 CB- Mikrocontroller, auf dem doppelt so viel Flash vorhanden ist.

Klicken Sie dann auf "Weiter":

Bild

Wieder auf "Weiter". Das folgende Fenster wird

Bild

angezeigt : Wählen Sie "Auf Gerät herunterladen" und klicken Sie auf "...":

Bild

Ändern Sie den Dateityp in * .bin und öffnen Sie die Datei "generic_boot20_pc13.bin" (ebenfalls im Archiv vorhanden), die aus dem STM32duino-Bootloader- Projekt entnommen werden kann .

Dann klicken wir auf die Schaltfläche "Weiter". Nach der Bootloader-Firmware sehen wir grünes Licht:

Bild

Dann müssen wir für die Arduino IDE-Entwicklungsumgebung einen speziellen STM32-Kernel herunterladen (dieser befindet sich auch im Archiv für den Artikel). Hier gibt es eine Nuance: Zum Zeitpunkt des Schreibens funktioniert der Kernel nicht mit Versionen der Entwicklungsumgebung über 1.6.5 . Ich habe 1.6.5-r5, das ich hier heruntergeladen habe .
Der Kernel wurde getestet, um mit der Arduino IDE Version 1.6.9 zu arbeiten .

Entpacken Sie als Nächstes den Inhalt unter Eigene Dateien \ Arduino \ Hardware:

Bild

In meinem Fall sieht der vollständige Pfad folgendermaßen aus: "C: \ Benutzer \ RSK \ Dokumente \ Arduino \ Hardware".

Natürlich kann das System das System des Geräts nicht bestimmen, daher müssen Sie die Treiber weiterhin auf der Karte installieren. Wir gehen in den Ordner "Eigene Dateien \ Arduino \ Hardware \ Arduino_STM32 \ Treiber \ Win" (oder "Treiber \ Win", im Fall eines Archivs zum Artikel) und führen die Datei "install_drivers.bat" als Administrator aus:

Bild

Danach den obersten Jumper (das das "BOOT0"), setzen Sie es auf Position "0" und verbinden Sie die Karte über ein Micro-USB-Kabel mit dem Computer:

Bild

Es sollte im Geräte-Manager entweder als "Maple DFU" oder "Maple Serial (COM *)" definiert werden:

Bild

Es ist nicht klar, warum nach der ersten Verbindung Die Karte ist auf verschiedenen Computern unterschiedlich definiert, aber nicht der Punkt, wir fahren mit der Konfiguration der Arduino IDE fort.

Wir starten die Entwicklungsumgebung und dann Tools ->

Bild

Board -> Boards Manager: Hier müssen Sie den Kernel für das Arduino Due Board installieren. Wählen Sie die neueste Version aus und klicken Sie auf „Installieren“:

Bild

Dann auf Tools -> Board -> „Generic STM32F103C“, dann auf Variante: „STM32F103C8 (20 KB RAM. 64 KB Flash)“, Upload-Methode: „STM32duino Bootloader“, Port-Board-COM-Portnummer Im Allgemeinen ist alles wie im Screenshot:

Bild

Alles, das Board ist bereit für Firmware und Programmierung in der Arduino IDE-Entwicklungsumgebung. Lassen Sie uns eine Skizze aus den Beispielen nähen, die in den Kernel „eingenäht“ sind. Gehen Sie zu Datei -> Ordner mit Skizzen -> Hardware -> Arduino_STM32 -> STM32F1 -> Bibliotheken -> A_STM32_Beispiele -> Digital -> Blinken:

Bild

Klassisch „Hallo Welt“ in der Welt der Mikrocontroller. Wir ändern PB1 auf PC13, da die LED auf der Platinemit diesem Port verbunden:

Bild
* Übrigens leuchtet es am PC13-Bein schwach auf.

Wir klicken auf die Schaltfläche "Herunterladen". Nach der Firmware zeigt die Entwicklungsumgebung Folgendes an:

Bild

"Fertig! Zurücksetzen von
USB zum Zurückschalten in den Laufzeitmodus
Fehler beim Zurücksetzen nach dem Download: usb_reset: Gerät konnte nicht zurückgesetzt werden, Win-Fehler: Die angegebene Datei wurde nicht gefunden. "

Aber die Firmware wurde dann erfolgreich geladen, obwohl dies nicht immer der Fall ist. Manchmal gibt die Arduino IDE andere Meldungen aus.

Das DFU-Gerät konnte nicht gefunden werden
, :

image

«dfu-util — © 2007-2008 by OpenMoko Inc.
Couldn't find the DFU device: [1EAF:0003]
This program is Free Software and has ABSOLUTELY NO WARRANTY»

, .


Suche nach DFU-Gerät [1EAF: 0003] ...
:

image

«Searching for DFU device [1EAF:0003]…
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming...»

, . Arduino Pro Mini.


Und nun zu der "Fliege in der Salbe", über die ich am Anfang des Artikels geschrieben habe, ist es aus irgendeinem Grund nicht immer möglich, das Board in der Entwicklungsumgebung zu flashen, noch mehr, es wird nicht immer vom Computer bestimmt. Ich habe dies wie folgt für mich entschieden, bevor ich die Firmware herunterlade (bevor ich auf die Schaltfläche "Herunterladen" klicke), auf der Karte auf "Zurücksetzen" klicke und nach der Firmware die Karte neu starte. In diesem Fall beträgt der Prozentsatz der Wahrscheinlichkeit, dass das Brett genäht wird, 99%. Es ist unklar, warum es so funktioniert, aber eine Tatsache. Ich denke, dass früher oder später dieser Pfosten korrigiert wird und alles bei Bedarf automatisch neu gestartet wird. Und um dies schneller zu beheben, muss die Community dieses wunderbaren STM32-Debugboards wachsen. Teilen Sie diesen Artikel also mit Freunden, insbesondere mit Programmiererfreunden.

Über die Pinbelegung:

Klickbar
, ( ):

image
() www.stm32duino.com/viewtopic.php?p=11137

, :

digitalWrite(PB0, LOW);
analogWrite(PA8, 65535);pwmWrite(PA8, 65535);
analogRead(PA0);
LiquidCrystal lcd(PB0, PA7, PA6, PA5, PA4, PA3);


docs.leaflabs.com/docs.leaflabs.com/index.html Arduino IDE, .

, :
Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c\board.cpp

, :
  • , analogWrite();pwmWrite(); — PB0, PA7, PA6, PA3, PA2, PA1, PA0, PB7, PB6, PA10, PA9, PA8, , ;
  • , analogRead(); — PB0, PA7, PA6, PA5, PA4, PA3, PA2, PA1, PA0.


. , 1.9 .

, PA12/PA11 D+/D- USB, , , 2- , .


Die Leiterplatte:



Nun, zum Schluss:

Bild

Hallo geektimes.ru
//https://github.com/mk90/LiquidCrystalRus

//STM32  !

#include <LiquidCrystalRus.h>

LiquidCrystalRus lcd(PB9, PB8, PB7, PB6, PB5, PB4);

void setup() {
  lcd.begin(16, 2);
  lcd.print("");
  lcd.setCursor(0, 1);
  lcd.print("geektimes.ru");
}

void loop() {
  lcd.setCursor(14, 1);
  lcd.print(millis() / 1000);
}



Links:
Archiv zum Artikel ;
Portal eines Freundes von Roger Clark, der sich der Portierung von STM32 widmet , Fragen / Vorschläge / Danke, alles da;
https://github.com/rogerclarkmelbourne/Arduino_STM32 ;
http://docs.leaflabs.com/docs.leaflabs.com/index.html - dieses Projekt hat Roger als Grundlage genommen, daher gibt es viele nützliche Dinge, allerdings auf Englisch;
Arduino IDE Version 1.6.5-r5 kann hier heruntergeladen werden .
Mein Artikel überschneidet sich bis zu einem gewissen Grad mit dem Freund " STM32 vs Arduino " @RaJa ;
Datenblatt auf STM32F103C8T6 ;
Alle meine Veröffentlichungen zu Geektimes .

UPD 15.07.2016
Der Kernel wurde getestet, um mit der Arduino IDE Version 1.6.9 zu arbeiten:
geektimes.ru/post/277928/#comment_9532576

PS
Was sonst noch vergessen
:

image

, .

, microUSB :

image

, , .

Source: https://habr.com/ru/post/de395577/


All Articles