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