STM32F1 Interfaceboard

#Einleitung

Dieses Projekt ist dazu da, um einen µC als hardware interface zum PC zu haben, um damit einfache und direkte Steuerungen zu ermöglichen.

  • Digital Input/Output
  • Analog Input
  • Read Unique ID (vom Hersteller vergebene Seriennummer)
  • Chip Temperatur (leider ungenau)
  • SPI Master (serial peripheral interface mit 8bit/16bit/32bit transmissions)
  • 1 Wire RGB LED (WS2812 / APA 106 / Neopixel)

Der STM32 als solches, wurde ja schon bei Einstieg STM32F103 vorgestellt. Das hier vorgestellte Board ist sehr günstig zu haben (teilweise < 3 Euro, früher sogar unter 2 Euro).

#MiniSTM32 (blue pill)

Board mit 2x USB_to_UART
  • µC STM32F103C8T6 (64kB Flash, 20KB RAM, 72MHz)
  • 2 Quarze: 8 Mhz (für HSE) und 32 KHz (für RTC)
  • 2 LEDs (eine für power, eine geht an Pin C13)
  • SD-Karten Slot (SPI-Modus)
  • 2 Jumper (Boot0 und Boot1)
  • USB Buchse
  • SWD Anschluss
  • 1 Taste für reset

Weitere infos: https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill.html

Es wird eine Serielle (auch RS232 oder UART) Verbindung mit 3.3V TTL Spannungslevel gebraucht. Beide oben zu sehenden RS232/UART Adapter liefern das.

#Hardware vorbereiten

Hardware vorbereiten

Bevor das Board verwendet werden kann, muss die Firmware auf den Mikrocontroller geflasht werden. Das geht am schnellsten mit SWD und einem Programmer.
Einfacher und ohne extra Hardware gehts aber auch, dafür muss der interne Bootloader verwendet werden.

Es werden 4 Verbindungen gebraucht:

  1. GND
  2. 3.3V oder 5V
    (ich empfehle die 5V zu nehmen, dann versorgt sich das Board über seinen eigenen Spannungsregler. Man könnte auch die 3.3V vom UART Adapter nehmen, aber damit wird dessen Spannungsregler unnötig stark belastet)
  3. Rx an A9
  4. Tx an A10

Außerdem müssen die Jumper so eingestellt werden, das beim Verbinden der Mikrocontroller im Bootloader startet, wie auf dem Bild zu sehen.
Dann muss man nur noch wissen, welcher COM Port für den Adapter zugwiesen wurde.

Als nächstes muss das "Serial Tool" gestartet werden.

#Serial Tool (flash Firmware)

UART Modus (Serial Tool)
  1. Nach dem starten den COM Port einstellen. Die Software listet nur Ports auf, die geöffnet werden konnten.
    (Die Baudrate kann zwar hier auch eingestellt werden, das ist dann aber eher was für fortgeschrittene.) Dann mit "Open" den Port für die Kommunikation öffnen.
  2. Auf das Tab "FlashLoader" wechseln.
  3. Auf "Run single flash sequence..." klicken und warten.

Idealerweise läuft es komplett durch, jeder zwischenschritt ist nach dem beschrieben, was er dort macht.
Beim "Step 6" zum Beispiel, wird eine Datei erzeugt, die "DownloadedBinary.bin" heisst. Dann werden so viele Bytes von dem µC Chip gelesen, wie die zuvor raufgeladene Firmware hatte. Dann wird der Speicher mit der Firmware Datei byte weise mit dem verglichen, was vom Chip herruntergeladen wurde.
Sollten alle Bytes übereinstimmen, ist damit sichergestellt, das die komplette Firmware erfolgreich übertragen wurde.

Die Firmware wird dann gestartet. Mit dem Tab "Direct" -> "GPIO_Version_PinRemap" und "Read all board Informations" kann direkt los probiert werden.
Nur wenn am USB keine konfig vom PC ausgeführt wurde, werden daten die in die UART1 rein kommen, ausgewertet und interpretiert. In der "SerialTool-STM32Mini.exe.config" kann man Settings wie "COM8" voreinstellen.

Achtung:
Solange der Boot0 auf high ist, wird der µC immer in den Bootloader starten. Damit er aber direkt die Firmware ausführt, sollte der Jumper auf dem Bild links wieder nach unten (auf low) gestellt werden.

#Hid Tool (USB modus)

USB Modus (Hid Tool)

Das HidTool selbst benutzt viele Usercontrols, die auch beim SerialTool verwendet wurden. Aber es gibt auch ein paar Besonderheiten:

  • Wärend beim SerialTool jedes µC-Board seinen eigenen COM Port braucht, können beim HidTool mehrere Boards abwechselnd benutzt werden.
  • µC Boards können nach ID (eindeutig) oder nach Typ (init Config, mehrfach) ausgewählt werden.
  • UART1 ist beim SerialTool zum flashen der Firmware und zur Kommunikation. Beim HidTool ist es ein zusätzlicher serieller Port, der von der Software wie ein Terminal benutzt werden kann.
  • Beim HidTool ist der Zugriff nicht blockierend, es ist möglich, das 2 oder mehrere Tools auf das gleiche Board zugreifen. Dass kann zu Problemen führen, wenn gleichzeitig Zugriffe stattfinden (da gibts dann Fehlermeldungen und Timeouts). Aber es hat auch den Vorteil, das man bei einem Fenster was digital umschaltet, oder per SPI sendet, während im anderen Fenster ein paar Analogwerte automatisch ausgelesen werden.

HID (human interface device) ist ein USB Modus, der auch für Maus und Tastatur verwendet wird und ohne extra Treiber funktioniert.
Daher kann man an irgend einem Windows PC (ab Win XP) das Board ran stecken und braucht nur noch das Tool starten.

Funktioniert nur, wenn die Firmware drauf ist und das Board nicht in den Bootloader startet.
Manchmal funktioniert die USB verbindung nicht beim ersten mal, Windows meldet dann "USB Gerät nicht erkannt", dann einfach kurz raus ziehen und wieder rein stecken.

#UART1 mit USB-HID

Beide Tools an einem Board

Hier ein kleiner Test, wo beide Tools auf das gleiche µC Board verwendet werden.
Wie man sehen kann, wird der UART1 des Boards von beiden Seiten bedient.
Das SerialTool ist in diesem Fall nicht weiter benutzbar. Denn nur wenn keine USB Verbindung erkannt wurde, werden Daten die über UART1 rein kommen interpretiert.
Mit aktiver USB Verbindung, werden Daten einfach an den PC weitergeleitet (egal, ob ein HidTool läuft um die Daten zu empfangen).
Als USB Verbindung zählt ein vom PC konfigurierter HID Zugang.
Wenn man nur ein USB Ladegerät anschließst, kann man das SerialTool ohne Probleme verwenden.

Es werden im HidTool alle gefundenen Boards aufgelistet, alle haben die gleiche VID(0xCAFE) und PID(0x5EED). Eine Verbindung kann zu jeweils einem Board pro Fenster hergestellt werden. In der "HidTool-STM32Mini.exe.config" kann zwischen 3 automatischen Verbindungsarten gewählt werden.

  • "SelectHidAnyDevice" -> nimmt das erste Board, das gefunden wird. Sinvoll wenn man nur eins hat.
  • "SelectHidByInitType" -> nimmt das erste Board, bei dem der InitType passt.
  • "SelectHidBySerial" -> nimmt nur das Board, bei dem die Seriennummer passt.

InitType und Seriennummer werden an den USB Descriptor übergeben, sie sind also im System verfügbar, sobald Windows das Hid Device konfiguriert hat.

#InitType (start setup)

Damit unterschiedliche Startzustände ohne verschiedene Firmware versionen erreicht werden, wurden 3 Pins so eingestellt, dass sie beim starten abgefragt werden. So kann man von außen mit entsprechender Belegung 8 verschiedene Startzustände (InitType) erreichen. Der eine Pin ist der Boot1, die anderen 2 sind C14 und C15, die beide den RTC betreiben.

InitType 1 bis 8
  • InitType 1 Input mode(RTC, input)
  • InitType 2 In2 (unused, input)
  • InitType 3 In3 (unused, input)
  • InitType 4 In4 (unused, input)
  • InitType 5 Output mode (RTC, SPI Master)
  • InitType 6 Motion mode (für bis zu 3 Schrittmotoren)
  • InitType 7 NI Card mode (USB-8451 ersatz, experiementell)
  • InitType 8 Out8 (unused, input)

Gilt für Firmware Version: 1.0.4

Für alle gilt außerdem:
Uart1 (A9,A10) auf 115200 baud
Uart3 (B10,B11) auf 38400 baud (für Flir Wärmebildkameras)
RGB LED (B8)
USB (A11,A12)

RTC (real time clock):
nur wenn C14 und C15 offen sind (InitType 1 oder 5) ist der aktiv.
Dann wird die LED (am C13) jede Sekunde umgeschaltet. Außerdem wird eine 32bit Variable jede Sekunde nach oben gezählt.
Das sind 4294967295 Sekunden, also 136.1925 Jahre... auf jeden fall lang genug.

#Version 1.0.4

Das erste Release hat noch einige "Verbesserungspotentiale", aber es bietet schon viele Einsatzmöglichkeiten.
Die I2C funktionen sind zum Beispiel noch nicht Verfügbar, aber am Pin schonmal vorgesehen.

API (MiniStm32JoeC_CoreLibrary.dll):
Ich habe möglichst viele Funktionen in eine API Library gepackt. Für das Auslesen und modifizieren der Pins gibt es ein Usercontrol, für das Lesen der ADC pins ebenfalls und auch für die SPI Master funktionen. Dadurch können beide Tools auf viele Funktionen gleichermaßen zugreifen. Vor ein paar Jahren waren beide Tools noch eigenständig.
Die API Library kann auch für eigene Projekte verwendet werden.

desktopapplication source 104 (ZIP, 543.52 KB)

Enthält die Projektdatei (Visual Studio) für die beiden Tools und die gemeinsame API.

ministm32joec fullbundle v104 (ZIP, 5.82 MB)

Hier sind HidTool und SerialTool als ausfürbaren Programme, die Firmware für 1.0.4 und eine Pinbelegungs Excel. Außerdem sind Treiber für die oben zu sehenden USB-Seriell Adapter dabei.

#SensedMaster

SensedMaster

Der SensedMaster ist eine besondere Variante des InitType_5, bei den die Chipselects und SPI Steuerleitungen zusätzlich mit analogen Inputs verbunden sind.
Es gibt eine extra "Scan Funktion" um die Signallevel der Leitungen zu prüfen. Dabei wird der SPI Pin umgeschaltet, kurz darauf wird der dazu gehörige (auf dem Board verbundene) Analoge Eingang gelesen und gespeichert.

Für jeden Pin-Scan werden 4 Analoge werte geliefert. Daran kann man dann ablesen, wie gut oder schlecht der entsprechende Signalpegel erreicht wurde.

Signal Scan Funktion (für jeden SPI Pin):

  1. Speichern des aktuellen PinModus (ob Output/Input)
  2. Pin auf Digital Output Low, dann Analogwert lesen
  3. Pin auf Digital Input mit PullDown Widerstand, dann Analogwert lesen
  4. Pin auf Digital Output High, dann Analogwert lesen
  5. Pin auf Digital Input mit PullUp Widerstand, dann Analogwert lesen
  6. Pin wieder auf startzustand zurück stellen

Signal Check

Die 4 Ergebnisse pro Pin werden in der Tabelle aufgelistet.

Sie zeigen wie gut ein digitaler High / Low Pegel erreicht werden kann.
Wenn die ersten 2 ihre Pegel nicht erreichen, wird die SPI Kommunikation möglicherweise nicht funktionieren.

Wenn nur die zweiten 2 Pegel nicht passen, kann es sein das zusätzliche Pullup/Down Widerstände in der Schaltung sind... oder das irgend eine Pappnase mit den Fingern auf dem Board rum grabbelt!
Jedenfalls ist die warscheinlichkeit deutlich höher, das die Kommunikation funktioniert.

Mit dieser Scan funktion kann man Kurzschlüsse gut erkennen. Das Beispiel unten entstand durch eine Pinzette, die einen der Pins mit GND kurzschloss. Als Folge kann der Low Pegel gut erreicht werden, der High Pegel aber nicht.


Zuletzt geändert am: Sep 30 2022 um 9:47 AM

© by joe-c, 2023. All Rights Reserved. Built with Typemill.