Uart - VSCode mit STM32F103 ("BluePill")

Quellen

grauonline.de : ARDUINO GOES STM32

Übersicht

Das Stm32F103Board stellt dem Benutzer unter VSCode drei UARTs zur Verfügung:
  •  STM32-UART1: Serial1
  •  STM32-UART2: Serial2
  •  STM32-UART3: Serial3

Hardware

Pin-Layout des STM32F103Boards:
Pin-Belegung STM32F103Board

Die UARTs sind standardmässig folgenden Pins zugeordnet:

UART     Software     Pin TxD     Pin RxD     Note            
UART1 Serial1 PA9 PA10 Serial1
UART2 Serial2 PA2 PA3 Serial2
UART3 Serial PB10 PB11 Serial3

Bemerkung : Der von STMicroelectronics vorgesehene und notwendige Standard-USB-Treiber
besitzt unter VSCode leider (noch) keine Funktionalität und Uart0 bleibt daher unberücksichtigt.
(Download von Original STM-Seite:   STM32 Virtual COM Port Driver ).
(Lokale Download-Alternative:   en.stsw-stm32102.zip )

Eine typische technische Umsetzung von den LVTTL-IO-Pegeln des MicroControllers
zu USB-Signalen findet über einen UART-USB-Converter statt.
Der USB-Ausgang des UART-USB-Converters wird über ein USB-Daten-Kabel
(USB2MiniAB - USB2StandardA) mit dem einem PC verbunden.
Ausgenommen ist dabei der SerialUSB-Port:
hier wird zur PC-Verbindung ein USB-Daten-Kabel (USB2MicroAB - USB2StandardA) benötigt:

Verschaltung von vier UARTs beim STM32F103Board

Software

Unter der Software "VisualStudioCode" (kürzer "VSCode") wählt der Benutzer den korrekten
Prozessor STM32F103C8T6 bei der Einrichtung eines neuen Projekts aus:

VSCode mit STM32F103Board - Neues Projekt

VSCode mit STM32F103Board - main.cpp

Im "DeviceManger" unter "Port (COM & LPT)" erkennt der Benutzer alle real
verfügbaren seriellen UART-Schnittstellen:

DeviceManager mit COM-Ports

Leider steht die UART USBSerial dem Benutzer unter VSCode aktuell nicht
zur Verfügung, daher kann der Benutzer nur auf folgende drei UARTs zugreifen:

  •  3x UART-USB-Converter: COM30, COM31, COM32

Beispiel "STM32F103 mit UART0, UART1, UART2 und UART3 im Terminalbetrieb"
zeigt den Protokoll-Mitschnitt des Transmits aller drei UART-Schnittstellen im PC:

STM32F103 mit UART1, UART2 und UART3 im Terminalbetrieb

Den zugehörigen Quelltext für das STM32F103Board zeigt das Listing:

       
  //
  #include 
  #include 
  //
  //----------------------
  //  Define
  //----------------------
  const int PIN_LEDSYSTEM   = PC13;
  const int PERIOD_BLINK    = 133;   // [ms]
  // Uart1 - A
  const int PIN_UART1_TXD   = PA9;
  const int PIN_UART1_RXD   = PA10;
  // Uart2 - B
  const int PIN_UART2_TXD   = PA2;
  const int PIN_UART2_RXD   = PA3;
  // Uart3 - C
  const int PIN_UART3_TXD   = PB10;
  const int PIN_UART3_RXD   = PB11;
  //
  HardwareSerial Serial1(PIN_UART1_RXD, PIN_UART1_TXD);
  // NC HardwareSerial Serial2(PIN_UART2_RXD, PIN_UART2_TXD);
  HardwareSerial Serial3(PIN_UART3_RXD, PIN_UART3_TXD);
  //
  #define UartUSB Serial
  #define UartPCA Serial1
  #define UartPCB Serial2
  #define UartPCC Serial3
  //
  //----------------------
  //  Global
  //----------------------
  int CounterDebug = 0;
  //
  //----------------------
  //  Main - Setup
  //----------------------
  void setup(void)
  {
    pinMode(PIN_LEDSYSTEM, OUTPUT);
    //
    UartPCA.begin(115200, SERIAL_8N1);
    UartPCB.begin(115200, SERIAL_8N1);
    UartPCC.begin(115200, SERIAL_8N1);
    delay(333);
    //
    UartPCA.println("\r\n*** Esp32Uart-1-PCA ***");
    UartPCB.println("\r\n*** Esp32Uart-2-PCB ***");
    UartPCC.println("\r\n*** Esp32Uart-3-PCC ***");
  }
  //
  //----------------------
  //  Main - Loop
  //----------------------
  void loop(void) 
  {
    digitalWrite(PIN_LEDSYSTEM, HIGH);
    delay(PERIOD_BLINK);
    digitalWrite(PIN_LEDSYSTEM, LOW);
    delay(PERIOD_BLINK);
    //
    CounterDebug++;
    //
    UartPCA.print("Esp32Uart-1-PCA> ");
    UartPCA.println(CounterDebug);
    //
    UartPCB.print("Esp32Uart-2-PCB> ");
    UartPCB.println(CounterDebug);  
    //
    UartPCC.print("Esp32Uart-3-PCC> ");
    UartPCC.println(CounterDebug);  
  }
        

Download des Listings: 2206042044_VSStm32F103Uart_01V01.zip


WebSites    Module    Elektronik    Uart