Forum: Mikrocontroller und Digitale Elektronik UART auf Linux


von Robert B. (robertoneu_95)


Lesenswert?

Hallo, ich habe mal eine Frage bezüglich UART und Linux.
Habe mich entschieden, mich mehr mit Linux zu beschäftigen. Seid bitte 
gnädig, weil ich noch Anfänger bin was Linux betrifft.

Hab ein STM32-Mikrocontroller und versuchen nun, dass dieser Controller 
mit meinem Rechner (Linux) kommuniziert. Die Kommunikation läuft über 
die UART-Schnittstelle. Um die Ausgabe zu sehen, habe ich mir auf den 
Rechner "Minicom" installiert. Der STM32f091 ist per USB an meinem 
Rechner angeschlossen.

Online findet man eine Menge an Literatur für die Konfiguration des 
Minicoms. Meine Serielle Anschluss läuft über den Port /dev/ttyACM0 und 
Bps sind 115200 8N1. Diese Konfigurationen habe ich vorgenommen, mehr 
nicht.

Leider bekomme ich die Ausgabe 'K' nicht auf meinem Rechner (Terminal) 
angezeigt. Unter Windows mit "Realterm" hat alles geklappt. Kennst sich 
vielleicht jemand mit Linux aus und kann mir helfen.

Bin für jeden Tipp sehr Dankbar.

Grüße
Robert

von MaWin (Gast)


Lesenswert?

Robert B. schrieb:
> Minicom

Ich verwende lieber picocom.
Das ist viel kleiner, handlicher und einfacher.
Die Manpage von picocom ist auch recht übersichtlich und verständlich.

von Jemand (Gast)


Lesenswert?

Versuche Flow Control in minicom abzustellen. Wenn das aktiv ist, es 
aber nicht unterstützt wird, passiert gerne gar nichts.

von pegel (Gast)


Lesenswert?

Benutzer hat richtigen Rechte? Gruppe dialout?

Bin Fan von cutecom, schön graphisch.

von Olaf (Gast)


Lesenswert?

Die Rechte wird er schon haben weil Minicom sonst meckern wuerde
das man den Port nicht aufmachen kann. Es wird wirklich daran liegen
das man den Hardwarehandshake abschalten muss.

Olaf

von Robert B. (robertoneu_95)



Lesenswert?

Danke für die schnelle Antwort.

Mein Flow Control für die Hardware und Software sind deaktiviert. Ich 
zeige euch mal paar Bilder. Auf Bild 2 (Bildschirmfoto von 2022-07-27 
17-16-58)müsse ja meine Ausgabe erscheine, oder?

: Bearbeitet durch User
von NichtWichtig (Gast)


Lesenswert?

Sende mal mehr als nur ein 'K', gerne auch mit CR/LF

von Wendels B. (wendelsberg)


Lesenswert?

Robert B. schrieb:
> Die Kommunikation läuft über
> die UART-Schnittstelle.
...
> Meine Serielle Anschluss läuft über den Port /dev/ttyACM0

/dev/ttyACM0 ist keine UART, die heissen /dev/ttyS...

Falls ttyACM0 ein Seriell-USB-Wandler ist, muss dieser korrekt 
unterstuetzt sein, was aber schon lange kein Problem sein sollte.
Zum Test kannst Du das Minicom mit Rootrechten starten, entweder mit 
"su" und Rootpasswort oder mit vorangestelltem "sudo" und Deinem 
Benutzerpasswort.

Wenn es dann klappt, ist die Ursache ein Rechteproblem.

von Robert B. (robertoneu_95)


Lesenswert?

> Zum Test kannst Du das Minicom mit Rootrechten starten, entweder mit
> "su" und Rootpasswort oder mit vorangestelltem "sudo" und Deinem
> Benutzerpasswort.

Hab Minicom mit Rootrechten gestartet, habe aber die gleichen Probleme. 
Werde mal mehr ausgeben lassen als nur ein 'K'. Mal gucken, ob das 
funktioniert.

: Bearbeitet durch User
von Olaf (Gast)


Lesenswert?

> /dev/ttyACM0 ist keine UART, die heissen /dev/ttyS...

Das kann je nach Linuxversion unterschiedlich sein. Bei mir heisst das
zum Beispiel /dev/ttyUSB0

Am besten mal den USB-RS232 Adapter oder die sonstige Hardware anstecken
und sich unmittelbar darauf das Ende von /var/log/messages anschauen.
Dann sieht man wie der Treiber das Device benennt.

> Werde mal mehr ausgeben lassen als nur ein 'K'. Mal gucken, ob das
> funktioniert.

Wenn ich garnicht mehr weiterweiss dann verbinde ich erstmal TxD und RxD 
vom Port direkt ohne meine eigene Hardware. Danach musst du in Minicom 
sehen koennen was du tipps. Ohne Bruecke siehst du nichts weil locales 
Echo per default aus ist.

Olaf

von Robert B. (robertoneu_95)


Lesenswert?

Meine Algorithmus gibt mir folgende Ausgabe in der Console:

-----------------------------------------------------------------------

STMicroelectronics ST-LINK GDB server. Version 7.0.0
Copyright (c) 2022, STMicroelectronics. All rights reserved.

Starting server with the following options:
        Persistent Mode            : Disabled
        Logging Level              : 1
        Listen Port Number         : 61234
        Status Refresh Delay       : 15s
        Verbose Mode               : Disabled
        SWD Debug                  : Enabled
        InitWhile                  : Enabled

Waiting for debugger connection...
Debugger connected
Waiting for debugger connection...
Debugger connected
Waiting for debugger connection...
      -------------------------------------------------------------------
                        STM32CubeProgrammer v2.11.0-RC1
      -------------------------------------------------------------------



Log output file:   /tmp/STM32CubeProgrammer_WeTggc.log
ST-LINK SN  : 066DFF484956827867171711
ST-LINK FW  : V2J40M27
Board       : NUCLEO-F091RC
Voltage     : 3,25V
SWD freq    : 4000 KHz
Connect mode: Under Reset
Reset mode  : Hardware reset
Device ID   : 0x442
Revision ID : Rev 1.0
Device name : STM32F09x/F030xC
Flash size  : 256 KBytes
Device type : MCU
Device CPU  : Cortex-M0
BL Version  : --



Memory Programming ...
Opening and parsing file: ST-LINK_GDB_server_vFS8ad.srec
  File          : ST-LINK_GDB_server_vFS8ad.srec
  Size          : 5,62 KB
  Address       : 0x08000000


Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 2]
Download in Progress:


File download complete
Time elapsed during download operation: 00:00:00.342



Verifying ...




Download verified successfully


Shutting down...
Exit.

------------------------------------------------------------------------ 
----

Das "Exit" weist doch darauf, dass mein Programm beendet wurde, oder?

von PittyJ (Gast)


Lesenswert?

Ich verwende seit Jahren nur noch putty. Täglich in Betrieb für die 
Debug-Ausgaben meiner STMs.

Gibts auch über 'apt-get ...'

Das läuft sowohl auf X86-Linux, als auch auf dem Raspi.
Es gehen sowohl natives Uart, als auch die Usb-Serielladapter.

von Ralph S. (jjflash)


Lesenswert?

Olaf schrieb:
> Das kann je nach Linuxversion unterschiedlich sein. Bei mir heisst das
> zum Beispiel /dev/ttyUSB0

Das hängt nicht vom Linux ab, sondern von der Art des USB2UART Chips. 
Ein CH340 wird sich beispielsweise als /dev/ttyUSBx anmelden.

Eine mittels CDC realisierte serielle Schnittstelle wird sich mit 
/dev/ttyACMx anmelden (beispielsweise die Verwendung von CDC mittels dem 
USB auf STM32 Controllern oder auch die FTDI Chips).

von NichtWichtig (Gast)


Lesenswert?

Also ist unklar ob der STM überhaupt sendet?

Scope dran hängen und messen.

von TomA (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Robert.

Habe da mal etwas über dieses Thema geschrieben. Was dich interessiert 
findest du im Kapitel 6 im Allgemeinen, und 6.1 im speziellen. Den Rest 
am Besten nicht beachten.

Viel Erfolg. Tom

von VollHonk (Gast)


Lesenswert?

Das Teil anstecken, dmesg aufrufen und die Serielle erkennen.
Btw. Wenn man z.B. /dev/ttyUSB0 verwendet, aber diese nichtz vorhanden 
ist, kann man die nicht öffnen (bei cutecom wird gleich der Fehler 
angezeigt und auch alle verfügbaren rs232)
Du muss in der Gruppe dialout sein, dann klappt das mit den linken, aehm 
rechten.

von 2⁵ (Gast)


Lesenswert?

Ich verwende gerne screen. Aufruf z.B. für den CH340 USB/Seriell Wandler
screen /dev/ttyUSB0 115200

von 2⁵ (Gast)


Lesenswert?

NichtWichtig schrieb:
> Also ist unklar ob der STM überhaupt sendet?

Klingt jetzt nicht so:

Robert B. schrieb:
> Unter Windows mit "Realterm" hat alles geklappt.

von NichtWichtig (Gast)


Lesenswert?

2⁵ schrieb:
> NichtWichtig schrieb:
>> Also ist unklar ob der STM überhaupt sendet?
>
> Klingt jetzt nicht so:
>
> Robert B. schrieb:
>> Unter Windows mit "Realterm" hat alles geklappt.

Hatte ich auch so gedacht, aber dann kam sein Beitrag von 18:15

Keine Ahnung was sein µC da ab Spannung ein liefert.

Womöglich stolpert er über was ganz Anderes.

von Zeno (Gast)


Lesenswert?

Wendels B. schrieb:
> /dev/ttyACM0 ist keine UART
Doch unter RasPi schon.

von Stefan F. (Gast)


Lesenswert?

Dass das Device /dev/ttyACM0 heisst ist völlig normal und richtig. Da 
hier keine physikalische serielle Schnittstelle involviert ist, spielen 
Baudrate, und Anzahl der Daten-Bits und Stopp-Bits keine Rolle.

Ein simples "cat /dev/ttyACM0" sollte schon funktionieren.

Wie sieht die Ausgabe von "sudo dmesg" unmittelbar nach den Anstecken 
des USB Kabels aus? Nur die letzten Zeilen, die sich auf das USB Gerät 
beziehen, sind von Interesse.

Windows und Linux verhalten sich insbesondere bei der Initialisierung 
der Schnittstelle unterschiedlich. Eventuell liegt ein Fehler auf dem 
Mikrocontroller verwendeten Bibliothek vor. Welche hast du verwendet?

Bei Linux gibt es die Besonderheit, dass /dev/ttyACM* Device 
standardmäßig eine Login Konsole bekommen (/dev/ttyUSB* jedoch nicht). 
Diese Konsole sendet eine Eingabeaufforderung und jedes empfangene 
Zeichen (als Echo) an den Mikrocontroller.

Dann gibt es da noch den standardmäßig installierten Modemmanager (auch 
Windows hatte so etwas ähnliches) für Plug&Play, der beim Anstecken 
testet ob es sich um ein Modem handelt. In diesem Fall empfängt der 
Mikrocontroller AT-Befehle, auf die Modems antworten würden.

Vielleicht reagiert dein Programm auf dem Mikrocontroller empfindlich 
darauf. Man kann diese Sonderlocken von Linux natürlich weg 
konfigurieren, aber erstmal würde ich analysieren, was die 
Problemursache ist.

Wo kommt denn das vermisste 'K' her? Zeige mal deinen Quelltext.

von Markus W. (dl8mby)


Lesenswert?

vor dem Anstecken des USB2RS232 Adapters

journalctl -f (als root) aufrufen, damit man alle Meldungen
sieht, sonst bekommt man nur seine eigenen zu Gesicht.

Sieht dan z.B. so aus:
1
Jul 28 09:33:00 linux-kwm1 kernel: usb 1-1: new full-speed USB device number 7 using xhci_hcd
2
Jul 28 09:33:00 linux-kwm1 kernel: usb 1-1: New USB device found, idVendor=067b, idProduct=2303, bcdDevice= 3.00
3
Jul 28 09:33:00 linux-kwm1 kernel: usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
4
Jul 28 09:33:00 linux-kwm1 kernel: usb 1-1: Product: USB-Serial Controller
5
Jul 28 09:33:00 linux-kwm1 kernel: usb 1-1: Manufacturer: Prolific Technology Inc.
6
Jul 28 09:33:00 linux-kwm1 kernel: pl2303 1-1:1.0: pl2303 converter detected
7
Jul 28 09:33:00 linux-kwm1 kernel: usb 1-1: pl2303 converter now attached to ttyUSB0

die Zeile
New USB device found, idVendor=067b, idProduct=2303
und eventuell schauen ob bereits ein device in dev Verzeichnis
eingebunden wurde.
In diesem Fall  /dev/ttyUSB0
Wenn Du sowas zu sehen bekommst, dann wurde der Treiber eingebunden
und Du kannst loslegen, wenn nicht musst Du eine udev-Regel in
/etc/udev/rules.d z.B. in der Form 99-mein-adapter.rules anlegen.

Dan die erzeugte Regel mit dem u.g. Kommando laden.
udevadm control --reload

Dabei in einem anderen root Fenster mit journalctl -f beobachten,
ob beim Laden Deiner neuen Regel Fehler auftauchen.

Regel-Dateien für udev sehen wie folgt aus:
>cat 99-flashforge.rules
#Flashfrog Dreamer - 3D-Prn
SUBSYSTEM=="usb",SUBSYSTEMS=="usb",DRIVERS=="usb",ATTRS{idVendor}=="0315 
",ATTRS{idProduct}=="0001",MODE="0666"


ATTRS{idVendor} und ATTRS{idProduct} musst Du entsprechend der Ausgabe 
von
journalctl beim Anstecken des USB2RS232 Adaptern entnehmen.

Viel Erfolg
Markus

von Pete K. (pete77)


Lesenswert?

Robert B. schrieb:
> Leider bekomme ich die Ausgabe 'K' nicht auf meinem Rechner (Terminal)
> angezeigt.

Woher weisst Du, dass K gesendet wurde? Mir fehlen hier Debug-Ausgaben 
und auch das STM-Programmlisting. Werden evtl. Fehlerrückgaben der 
aufgerufenen Funktionen ausgewertet?

von Martin H. (horo)


Lesenswert?

Bitte auch den relevanten Ausschnitt (STMicroelectronics Virtual COM 
Port) aus "lsusb -v" zeigen (Aufruf als User möglich), mein NanoVNA-H 
auf ttyACM0 ergibt dies:
1
...
2
Bus 002 Device 028: ID 0483:5740 STMicroelectronics Virtual COM Port
3
Couldn't open device, some information will be missing
4
Device Descriptor:
5
  bLength                18
6
  bDescriptorType         1
7
  bcdUSB               1.10
8
  bDeviceClass            2 Communications
9
  bDeviceSubClass         0 
10
  bDeviceProtocol         0 
11
  bMaxPacketSize0        64
12
  idVendor           0x0483 STMicroelectronics
13
  idProduct          0x5740 Virtual COM Port
14
  bcdDevice            2.00
15
  iManufacturer           1 STMicroelectronics
16
  iProduct                2 ChibiOS/RT Virtual COM Port
17
  iSerial                 3 400
18
  bNumConfigurations      1
19
  Configuration Descriptor:
20
    bLength                 9
21
    bDescriptorType         2
22
    wTotalLength       0x0043
23
    bNumInterfaces          2
24
    bConfigurationValue     1
25
    iConfiguration          0 
26
    bmAttributes         0xc0
27
      Self Powered
28
    MaxPower              100mA
29
    Interface Descriptor:
30
      bLength                 9
31
      bDescriptorType         4
32
      bInterfaceNumber        0
33
      bAlternateSetting       0
34
      bNumEndpoints           1
35
      bInterfaceClass         2 Communications
36
      bInterfaceSubClass      2 Abstract (modem)
37
      bInterfaceProtocol      0 
38
      iInterface              0 
39
...

Hierbei sind die bInterface...-Zeilen interessant, manche 
Implementierungen verwenden andere Werte für bInterfaceProtocol (=1: ich 
bin ein Modem mit AT-Kommandos), dann greift zunächst der ModemManager 
zu und verschluckt eventuell Zeichen - siehe 
https://github.com/DiSlord/NanoVNA-D/issues/11

Vielleicht kommt dann auch minicom durcheinander, das auch eine Menge 
von Modem-Handling automatisch abhandeln kann. Daher ist der Vorschlag 
oben hilfreich, es mit einem anderen Terminal-Programm, z.B. putty zu 
probieren.

Beitrag #7142025 wurde von einem Moderator gelöscht.
Beitrag #7142032 wurde von einem Moderator gelöscht.
Beitrag #7142204 wurde von einem Moderator gelöscht.
Beitrag #7142254 wurde von einem Moderator gelöscht.
Beitrag #7142422 wurde von einem Moderator gelöscht.
von Robert B. (robertoneu_95)


Angehängte Dateien:

Lesenswert?

Hallo liebe Forum-Mitglieder,

ich musste leider heute länger arbeiten und hatte deswegen kaum Zeit 
mich zu melden bzw. eure Antworten in Ruhe zu lesen.

Erstmal vielen lieben Dank für eure zahlreichen Hilfestellungen.

Also ich habe den Befehl "sudo dmesg" unmittelbar nachdem ich das STM32 
Board mit dem PC verbunden hab ausgeführt. Das Bild 
(Bildschirmfoto_von_2022-07-28_19-41-12.png ) habe ich hochgeladen. 
Außerdem habe ich mein Code, wie erwünscht mit hochgeladen.

Und ja, ich habe es auf Windows getestet und es hat geklappt, aber der 
Code ist nicht der selbe, weil ich den neu geschrieben habe. Es ist 
nicht ausgeschlossen, dass ich dort ein Fehler habe. Muss mal mit dem 
Oszi ran.

Die Ausgabe für "lsusb -v" ist folgende:

    iConfiguration          0
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0004  1x 4 bytes
        bInterval              12
------------------------------------------------------------------------ 
-----

Wirklich erstaunlich, was für tolle Tipps ich hier bekommen habe. Muss 
die mal jetzt nach und nach Abarbeiten.

Vielen lieben Dank.

Grüße
Robert

: Bearbeitet durch User
von TomA (Gast)


Lesenswert?

Hallo Robert B.

Entschuldige bitte die Unterstellung. Jetzt habe ich gelernt nicht zu 
verallgemeinern.

Nichts für ungut. Tom

von Martin H. (horo)


Lesenswert?

Robert B. schrieb:
> Die Ausgabe für "lsusb -v" ist folgende:
>
>        bInterfaceClass         9 Hub
>        bInterfaceSubClass      0
>        bInterfaceProtocol      0 Full speed (or root) hub
>        iInterface              0

Das ist aber nicht die Info zur gesuchten Schnittstelle, sondern ein 
Hub, vermutlich intern - lsusb listet alle (internen wie externen) 
USB-Geräte auf, eingrenzen könntest Du es mit

lsusb -v -d 0483:

Das liefert nur die relevanten Informationen zum Hersteller STM, die 
Meldung "Couldn't open device, some information will be missing" ist ok.
Interessant sind die ersten ca. 30 Zeile mit Angaben zum Interface 
Descriptor des Modems.

    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         2 Communications
      bInterfaceSubClass      2 Abstract (modem)
      bInterfaceProtocol      0
      iInterface              0

von Thomas W. (Gast)


Lesenswert?

Robert B. schrieb:

> Leider bekomme ich die Ausgabe 'K' nicht auf meinem Rechner (Terminal)
> angezeigt. Unter Windows mit "Realterm" hat alles geklappt. Kennst sich
> vielleicht jemand mit Linux aus und kann mir helfen.

Wenn Dein Programm jenes aus 
Beitrag "Re: UART auf Linux" ist, dann ist es 
nicht ungewoehnlich, dass kein "K" ausgegeben wird:
1
int main(void)
2
{
3
  uar2_tx_init();
4
  while(1)
5
  {
6
    uart2_write('Y');
7
  }
8
}

Die Y's, bis zum bitteren Ende erwarte ich. Ich sehe keine K.

Gruesse

Th.

von Robert B. (robertoneu_95)


Lesenswert?

Ja, dann eben ein 'Y' hatte das auf Windows mit 'K' gehabt. Deswegen...

von Thomas W. (Gast)


Lesenswert?

Ein X fuer ein U vormachen ... Roemische Zahlen...

Pruefe bitte erstmal, ob Deine "Windows"-Version die Initialisierung des 
USARTs anders macht als Deine "Linux"-Version. Denn bei der Komplexitaet 
dieses Programmes sollte es keine Probleme geben. Es sieht eher wie ein 
red Hering aus.

Unabhaengig von allem empfehle ich Dir die Software STM32CubeMX 
(verfuegbar fuer Windows, linux und Apple) von ST. Damit kannst Du den 
Setup des Prozessors wirklich einfach machen (z.B. bei Dir fehlt glaube 
ich die Frequenzeinstellung, ob das Konsequenzen hat: kA).

STM32CubeIDE ist eine IDE die auf Eclipse basiert: It grows on you. Ist 
vom Hersteller unterstuetzt und ist nicht so schlecht (wenn man sich 
dran gewoehnt hat). Und wenn Du ein NUCLEO-F091RC Board hast kannst Du 
wirklich sofort debuggen (Breakpoints et al)

Gruesse

Th.

von Robert B. (robertoneu_95)


Lesenswert?

Hi Thomas,

ich verwende den STM32CubeIDE, nur nutze ich halt die HAL-Bib. nicht.

Werde aber wie du schon sagst, mein Code nochmal durchgehen. Kann sein, 
dass ich irgendwo ein blöden Fehler gemacht habe. Außerdem habe ich hier 
zahlreiche Hilfestellungen, an die ich mich auch nochmal ran machen 
werden.

Die Frequenzeinstellung habe ich mit 16MHz.

Gruß
Robert

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Robert B. schrieb:
> Also ich habe den Befehl "sudo dmesg" unmittelbar nachdem ich das STM32
> Board mit dem PC verbunden hab ausgeführt.
> Das Bild habe ich hochgeladen.

Sieht soweit gut aus.

> Die Ausgabe für "lsusb -v" ist folgende: ...
>     bInterfaceClass         9 Hub
>     bInterfaceSubClass      0
>     bInterfaceProtocol      0 Full speed (or root) hub

Das ist aber nicht dein Mikrocontroller. Ist das alles, wurde nur dieser 
Hub angezeigt, obwohl dmesg zuvor bestätigt hat, dass dein 
Mikrocontroller erkannt wurde?

Vielleicht wurde dein Mikrocontroller wieder abgemeldet, vielleicht weil 
er sich aufgehängt hat. Führe nochmal den dmesg Befehl aus und suche 
nach Fehlermeldungen (nach dem erfolgreichen Anstecken und dem 
Verschwinden) die sich auf USB beziehen.

von Harry L. (mysth)


Angehängte Dateien:

Lesenswert?

Robert B. schrieb:
> ich verwende den STM32CubeIDE, nur nutze ich halt die HAL-Bib. nicht.

Was ist eine "HAL-Bib"?
Klingt wie der Titel eines Kinderbuch.

1. ist HAL keine Bibliothek sondern ein Wrapper-Framework.
2. typisch "super-schlauer Anfänger", der sowieso alles besser kann als 
die ST-Ingenieure...
3. es liegt garantiert nicht am USB

Wenn dir HAL zu kompliziert erscheint, bist du mit STM32 einfach falsch 
aufgestellt.

Das Problem liegt mit an Sicherheit grenzender Wahrscheinlichkeit an 
deinem Code.

Ich hab dir einen funktionierenden Code für die serielle Schnittstelle 
angehängt.

von Robert B. (robertoneu_95)


Lesenswert?

Der Port PA2 soll bei mir als UART_TX fungieren. Und das tut er auch, 
weil ich an dem Port ein Motor dran hab und der läuft jetzt durchgehend. 
Somit kann ich ausschließen, dass mein Code Fehler hat.

von Harry L. (mysth)


Lesenswert?

Robert B. schrieb:
> Somit kann ich ausschließen, dass mein Code Fehler hat.

Mach dich nicht lächerlich!
Das schliest garnichts aus!

von Robert B. (robertoneu_95)


Lesenswert?

Harry L. schrieb:

> 2. typisch "super-schlauer Anfänger", der sowieso alles besser kann als
> die ST-Ingenieure...
> Wenn dir HAL zu kompliziert erscheint, bist du mit STM32 einfach falsch
> aufgestellt.

Ich nutze die HAL-Library nicht, weil ich finde das sie zu viel Arbeit 
abnimmt. Und da ich gerne verstehen möchte was ich mache, habe ich 
beschlossen Bare-Metal zu programmieren. In dem ich viel mit dem 
Datenblatt mich auseinander setzen muss.

>
> Ich hab dir einen funktionierenden Code für die serielle Schnittstelle
> angehängt.

Ok, danke. Ich werde es mir mal angucken.

von Harry L. (mysth)


Lesenswert?

Robert B. schrieb:
> Ich nutze die HAL-Library nicht, weil ich finde das sie zu viel Arbeit
> abnimmt.

Das hier ist ein Elektronik- und kein Masochisten-Forum.

von Robert B. (robertoneu_95)


Lesenswert?

Harry L. wie gesagt, vielen Danke für deine Hilfestellung.

von Jobst M. (jobstens-de)


Lesenswert?

minicom funktioniert sowohl mit hardware-UARTS (ttySx (8250 kompatibel) 
oder ttyAMAx (UART in ARM Controllern - z.B. RasPi)) als auch mit 
USB-UARTs (ttyUSBx oder ttyACMx)

Zur ersten Konfiguration am besten minicom -s versuchen.

Und vielleicht auch erstmal als root versuchen. Sollte es daran liegen, 
ist es ein Rechteproblem.

Gruß
Jobst

von mIstA (Gast)


Lesenswert?

Robert B. schrieb:
> Der Port PA2 soll bei mir als UART_TX fungieren. Und das tut
> er auch,
> weil ich an dem Port ein Motor dran hab und der läuft jetzt
> durchgehend.
> Somit kann ich ausschließen, dass mein Code Fehler hat.

Nachdem Dein Code aber keinerlei Anstalten macht einen Motor 
anzusteuern, sagt ein laufender Motor im Besten Fall nichts über Deinen 
Code und seine Probleme aus.

von Robert B. (robertoneu_95)


Lesenswert?

Ja, das stimmt. Ich meinte damit, ob mein Port PA2 überhaupt aktiviert 
wird und das wird er. Aber ich habe mein Code gerade auf Windows nochmal 
getestet und er funktioniert leider nicht. Bin aber am durchdrehen, weil 
ich es mir nicht erklären kann, wo der Fehler liegen soll.

Ein Möglichkeit wäre, dass die "alternate function" falsch definiert 
ist.
Ich war der Meinung, dass AFR[0] => Low register und AFR[1] => High 
register ist. Laut Datenblatt ist es mit (GPIOx_AFRL) definiert, das 
wird aber vom Compiler nicht erkannt. Im File "stm32f0xx.h" wird es 
AFR[2] => Low register definiert.

Leider funktioniert es immer noch nicht.

Will es jetzt erst Mal auf Windows zum laufen bringen und dann teste ich 
es auf Linux.

Wird eine lange Nacht.

Grüße
Robert

: Bearbeitet durch User
von Andreas B. (bitverdreher)


Lesenswert?

Robert B. schrieb:
> Will es jetzt erst Mal auf Windows zum laufen bringen und dann teste ich
> es auf Linux.

Jetzt hast Du (halt auf die harte Tour) gelernt, dass man niemals 
mehrere Dinge gleichzeitig aendert.

von Robert B. (robertoneu_95)


Lesenswert?

Das stimmt.

von Hobby (Gast)


Lesenswert?

Um Dein UART unter Linux zu testen, baust Du einfach eine Brücke 
zwischen RX und TX ein. Im Terminal drauf achten, dass der Echo 
abgeschaltet ist. Wenn Du auf jeden Tastendruck eine Antwort bekommst, 
funktioniert auf Linuxseite alles.

von Stefan F. (Gast)


Lesenswert?

Hobby schrieb:
> Um Dein UART unter Linux zu testen, baust Du einfach eine Brücke
> zwischen RX und TX ein.

Das geht nicht, denn er hat keine physische UART Schnittstelle. Es ist 
nur eine virtuelle über USB, und die endet im STM32 Mikrocontroller.

von NichtWichtig (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Hobby schrieb:
>> Um Dein UART unter Linux zu testen, baust Du einfach eine Brücke
>> zwischen RX und TX ein.
>
> Das geht nicht, denn er hat keine physische UART Schnittstelle. Es ist
> nur eine virtuelle über USB, und die endet im STM32 Mikrocontroller.

Sicher? Ich denke nicht.

Siehe posting #1

Hab ein STM32-Mikrocontroller und versuchen nun, dass dieser Controller
mit meinem Rechner (Linux) kommuniziert. Die Kommunikation läuft über
die UART-Schnittstelle. Um die Ausgabe zu sehen, habe ich mir auf den
Rechner "Minicom" installiert. Der STM32f091 ist per USB an meinem
Rechner angeschlossen.

von Stefan F. (Gast)


Lesenswert?

NichtWichtig schrieb:
> Siehe posting #1

ist nicht eindeutig, aber der Screenshot in 
Beitrag "Re: UART auf Linux" ist es.

von Harry L. (mysth)


Lesenswert?

Stefan ⛄ F. schrieb:
> NichtWichtig schrieb:
>> Siehe posting #1
>
> ist nicht eindeutig, aber der Screenshot in
> Beitrag "Re: UART auf Linux" ist es.

Er nutzt offenbar enen ST-Link V2.1 auf einem ST-Board, und der hat 
extra Pins um RX/TX zu brücken.

Bei der vollkommen planlosen Vorgehensweise des TO kann man aber sowieso 
nicht helfen...

von NichtWichtig (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> NichtWichtig schrieb:
>> Siehe posting #1
>
> ist nicht eindeutig, aber der Screenshot in
> Beitrag "Re: UART auf Linux" ist es.

Eindeutig für was?

Da sind devices aufgelistet, nicht mehr und nicht weniger.

Wer da mit wem verbunden ist wird daraus nicht deutlich.

Das er neben der seriellen Verbindung zeitgleich noch per STLink zur 
Laufzeit seine selbst gedengelte Software in den µC läd macht es nicht 
einfacher.

Sooo schlecht ist CubeMX/HAL garnicht, da wäre schon längst was am 
Laufen gewesen und böte Stoff zum Studieren.

von Stefan F. (Gast)


Lesenswert?

Harry L. schrieb:
> Er nutzt offenbar enen ST-Link V2.1 auf einem ST-Board, und der hat
> extra Pins um RX/TX zu brücken.

Du hast mich überzeugt.

ttyACM0 gehört zu seinem ST-Link Adapter. Also hat er den wohl 
(hoffentlich) mit Rx und Tx seines Mikrocontrollers verbunden.

Unklar ist mir dann aber
> Der STM32f091 ist per USB an meinem Rechner angeschlossen.

Welche Rolle spielt denn nun dessen USB Schnittstelle?

von Harry L. (mysth)


Lesenswert?

Stefan ⛄ F. schrieb:
> Unklar ist mir dann aber
>> Der STM32f091 ist per USB an meinem Rechner angeschlossen.
>
> Welche Rolle spielt denn nun dessen USB Schnittstelle?

Gar keine - der TO kennt den Unterschied nicht.

von Robert B. (robertoneu_95)


Lesenswert?

Nur zu Info.

Hab mir ein neues Board gekauft und es funktioniert nun alles.

Vielen Dank, für sie zahlreichen Hilfestellungen.

VG
Robert

: Bearbeitet durch User
von Keks F. (keksliebhaber)


Lesenswert?

Hallo,

hat das Board evtl. einen anderen Chipsatz, oder ist der Kernel 
inzwischen geupdated worden?

Es gab einen Bug im Linux-Kernel, der manche Chipsätze betraf. Ich 
dachte zuerst meine Arduino-Klone wären kaputt, oder es lag an Arduino 
IDE. Unter Windows funktionierte es.
Es lag tatsächlich am Kernel, der einen Patch brauchte. Ich kann nachher 
mal gucken, ob ich den Kernel Bugreport noch finden kann. Die Situation 
ist ein Jahr her.

von Robert B. (robertoneu_95)


Lesenswert?

Hallo Keks F.,

bitte entschuldige die späte Rückmeldung, aber ich war beruflich 
unterwegs.
Also, es nach einem Update hat sich viel an meinem Betriebssystem 
(Linux) getan. Werde es mal die Tage nochmal versuchen und gebe dir 
Bescheid.

Vielen Dank erstmal.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.