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