Uart - ArduinoIDE mit STM32F103 ("BluePill")

Quellen

grauonline.de : ARDUINO GOES STM32

Übersicht

Das Stm32F103Board stellt dem Benutzer unter der ArduinoIDE vier UARTs bereit:
  •  STM32-UART0: Serial (SerialUSB)
  •  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            
UART0 Serial USBDM-PA11 USBDP-PA12 Serial (USB)
UART1 Serial1 PA9 PA10 Serial1
UART2 Serial2 PA2 PA3 Serial2
UART3 Serial PB10 PB11 Serial3

WICHTIG : Der von STMicroelectronics vorgesehene und notwendige Standard-USB-Treiber
kann hier heruntergeladen werden:   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 "ArduinoIDE" stellt der Benutzer den korrekten Prozessor STM32F103C ein:

ArduinoIDE mit ESP32(-UnoBoard)

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

DeviceManager mit COM-Ports

In diesem Beispiel stehen vier UARTs:
  •  1x ESP32-USB: COM20
  •  3x UART-USB-Converter: COM30, COM31, COM32
für den ESP32 zur Datenübertragung bereit. Die STM32-USB-Schnittstelle unterliegt
nach korrekter Treiber-Installation keinerlei Beschränkung für die Programmierung.

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

STM32F103 mit UART0, UART1, UART2 und UART3 im Terminalbetrieb

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

       
  //
  #include 
  //
  //----------------------
  //  Define
  //----------------------
  const int PIN_LEDSYSTEM   = PC13;
  const int PERIOD_BLINK    = 333;   // [ms]
  // Uart0 - USB
  const int PIN_UART0_USBDP = PA12;
  const int PIN_UART0_USBFM = PA11;
  // 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;
  //
  #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);
    //
    UartUSB.begin(115200, SERIAL_8N1);
    UartPCA.begin(115200, SERIAL_8N1);
    UartPCB.begin(115200, SERIAL_8N1);
    UartPCC.begin(115200, SERIAL_8N1);
    delay(333);
    //
    UartUSB.println("\r\n*** Esp32Uart-0-USB ***");
    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++;
    UartUSB.print("Esp32Uart-0-USB> ");
    UartUSB.println(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: 2206031100_Stm32F103C8T6Uart_01V01.zip


WebSites    Module    Elektronik    Uart