Forum: Mikrocontroller und Digitale Elektronik STM32 - Konflikt mit I2C


von Philipp L. (viech)


Angehängte Dateien:

Lesenswert?

Hallo liebe Community,

ich erstelle aktuell mein erstes Projekt mit dem STM32.
Vorher habe ich immer die Atmega`s genutzt, möchte mich aber 
weiterbilden.

Dabei sind mir nun folgende 2 Fragen aufgefallen:

1: Konflikte mit I2C
Ich habe diverse Pins mit diversen Funktionen belegt und im 
STM32-CubeIDE wird mir ein Konflikt mit einem der beiden genutzten I2C 
Schnittstellen angezeigt (siehe Anhang).

Alle dort gezeigten "Konfliktbedingungen" sind so korrekt:
- PB5 = Input
- PB6 = output
- PA14 = SWCLK
- TIM2-CH2 = PWM

Ich frage mich nun, wo ich diese Abhängigkeiten nachlesen kann.

Weiterhin verschwinden alle Konfliktnachrichten, sobald ich nur den PB5 
auf PB4 umlege. Alle anderen "Konfliktbelegungen" sind aber doch 
eigentlich weiterhin vorhanden, stören ihn dann aber scheinbar nicht 
mehr ?

Aktuell ist das für mich noch eine Belegung nach "try and error" mit 
umlegen bis im CubeIde keine Konflikte mehr erscheinen, das kann ja aber 
nicht die Lösung sein.

Kann mir jemand dieses Verhalten/Abhängigkeiten erklären ?

2: JTAG pins gelb

Eine weitere Frage wäre noch die JTAG Schnittstelle.
Rechts in der I/O Übersicht sind die pins noch gelb, muss ich die 
Schnittstelle noch irgendwo aktivieren?
Ich frage, da die Timer-pins auch erst von gelb auf grün wechselten, 
nachdem ich den Timer konfiguriert hatte.

Links (z.B. bei Connectivity) sehe ich allerdings kein JTAG.


Vielen Dank mal wieder !!!

: Bearbeitet durch User
von Uwe (Gast)


Lesenswert?

Philipp L. schrieb:
> Ich frage mich nun, wo ich diese Abhängigkeiten nachlesen kann.

Du wirst begeistert sein, was du so alles im meist 1000-Seiten langen 
Datenblatt finden wirst. Oftmals werden Funktionsblöcke oder 
Anwendungsbereiche in Application-Notes ausgelagert und liefern dir noch 
mehr spannenden Lesestoff 😉

Beitrag #7316560 wurde von einem Moderator gelöscht.
von K. H. (hegy)


Angehängte Dateien:

Lesenswert?

Philipp L. schrieb:
> Ich frage mich nun, wo ich diese Abhängigkeiten nachlesen kann.

Du meinst sicher die alternative Funktion der Pinne, oder?
Steht im Datasheet. Sehnse oben in den Bildchen zum STM32F4xx.
Ich habe mich dabei mal an die Pins PB5 und PB6 gehalten.

Philipp L. schrieb:
> Eine weitere Frage wäre noch die JTAG Schnittstelle.

Brauchst du den JTAG überhaupt?

: Bearbeitet durch User
von Philipp L. (viech)


Lesenswert?

K. H. schrieb:
> Du meinst sicher die alternative Funktion der Pinne, oder?

Die Listen mit den alternativen Funktionen kenne ich.

Ich meine die Abhängigkeiten.
warum gibt es ein I2C Konflikt (die Fehlermeldung/Screenshot) aus meiner 
Frage mit:
PB5 = Input
PB6 = output
PA14 = SWCLK
TIM2-CH2 = PWM

Was hat I2C auf PB7&PB8 mit den oberen von mir mit anderen genutzten 
Funktionen der anderen pins zu tun.
Warum gibt es die beschriebene Konfliktmeldungen?


Man darf scheinbar PB5 nicht mit einem Input belegen, wenn auf PB7&PB8 
I2C liegt.
Es muss doch irgendwo dokumentiert sein, was ich alles nicht belegen 
darf wenn auf PB7&PB8 I2C liegt.


Uwe schrieb:
> Du wirst begeistert sein, was du so alles im meist 1000-Seiten langen
> Datenblatt finden wirst.

Natürlich habe das im DB referenzierte "reference manual" RM0434 und 
DS11929.

Ich finde diese Konfliktabhängigkeiten aber leider nicht.

Das ist wie gesagt mein erstes STM32 Projekt und von den Atmegas kenne 
ich keine Pin-Konflikte.

von Stefan F. (Gast)



Lesenswert?

Philipp L. schrieb:

Zum SWD/JTAG:

> Links (z.B. bei Connectivity) sehe ich allerdings kein JTAG.

Schau mal unter SYS nach.

Die Cube IDE erstellt standardmäßig Code, welcher SWD und JTAG 
deaktiviert. Wahrscheinlich willst du aber eine der beiden 
Schnittstellen aktiviert lassen, um dein Programm zu debuggen. Falls du 
unsicher bist, aktiviere nur SWD.

Zum I2C:

Philipp L. schrieb:
> Man darf scheinbar PB5 nicht mit einem Input belegen, wenn auf PB7&PB8
> I2C liegt. Es muss doch irgendwo dokumentiert sein, was ich alles
> nicht belegen darf wenn auf PB7&PB8 I2C liegt.
> Ich frage mich nun, wo ich diese Abhängigkeiten nachlesen kann.

Bei ST immer im Datasheet des Mikrocontrollers, welches man stets 
zusammen mit dem Reference Manual lesen muss. Eigentlich ist das 
Reference Manual die Haupt-Doku, aber im Datasheet stehen die 
spezifischen Details der unterschiedlichen Chips aus der jeweiligen 
Serie. Die elektrischen Daten, Anzahl der Pins und deren 
Mehrfach-Belegung variiert nämlich innerhalb der Serie.

Dokumente zum Mikrocontroller:
https://www.st.com/en/microcontrollers-microprocessors/stm32wb55vg.html#documentation

Dokumente zum Modul:
https://www.st.com/en/microcontrollers-microprocessors/stm32wb5mmg.html#documentation

Auf beiden Seiten ist der Link zum jeweiligen Datasheet ganz oben links 
in rosa. Weitere Dokumente findest du weiter unten auf den Seiten.

2023-01-15_13-56.png ist ein Screenshot vom Datenblatt des 
Mikrocontrollers. Es zeigt die Pinbelegung der drei unterschiedlichen 
Gehäusegrößen. Du hast konkret den STM32WB55VGY, das ist die 100 Pin 
Version. Ich denke das ist die Tabelle, die du gesucht hast.

Beim Verstehen der Dokumente von ST besteht die Kunst darin, die 
wichtigen Infos zu finden und miteinander zu kombinieren. Diesbezüglich 
sind die Dokumente von ST völlig anders strukturiert als die von Atmel. 
ST schreibt fast nichts zweimal hin und spart auch an Querverweisen. 
Beim Lesen von diesen Dokumenten benutze ich sehr oft die Volltextsuche.

Schau dir in den Screenshots an, wie ich anhand der Volltextsuche zuerst 
im Datenblatt, dann weiter im Reference Manual, die Belegung von PB5 
untersucht habe. PB5 hat die alternative Funktion I2C1_SMBA. SMBA sagt 
mir nichts, also schaue ich, was es dazu zu finden gibt. Offenbar hat 
SMBA mit einer optionalen Funktion von I2C1 zu tun, die du nicht 
verwendest, also ist PB5 in Ordnung (denke ich).

Ähnlich geht es mir mit allen anderen Pins, die in der Fehlermeldung 
genannt werden. In der grauen Box mit der Fehlermeldung meckert er 
lauter Pins an, die unten in den "GPIO Settings" vom I2C1 gar nicht 
benutzt werden. Es ist mir nicht gelungen, heraus zu finden, wo diese 
Fehlermeldungen her kommen.

> Ich finde diese Konfliktabhängigkeiten aber leider nicht.

Ich auch nicht. Da es offenbar nicht dokumentiert ist, und ich solchen 
Sonderlocken bei STM32 bisher auch noch nicht begegnet bin, scheint es 
sich um einen Bug in der IDE zu handeln.

Kannst du mal deine *.ioc Datei posten, damit ich dein Problem 
reproduzieren kann und damit ich alle relevanten Einstellungen sehen 
kann?

Philipp L. schrieb:
> von den Atmegas kenne ich keine Pin-Konflikte.

Die gibt es da ebenso. Zum Beispiel kannst du den bei einem Arduino 
Nano/Uno Board die Pins PD0 und PD1 nicht als general purpose output 
benutzen, wenn der UART eingeschaltet ist. Nur hast du da keine IDE, die 
dir das so schön bunt in der Form anzeigt, wie es die Cube IDE tut. Im 
Arduino Umfeld nutzt man da eher die bunten Pin-Diagramme wie dieses: 
https://www.researchgate.net/profile/Mohammed-Therib/publication/312372376/figure/fig10/AS:450882367168521@1484510141868/Atmel-MCU-ATmega328-and-the-Arduino-pin-out.png

von K. H. (hegy)


Angehängte Dateien:

Lesenswert?

Philipp L. schrieb:
> warum gibt es ein I2C Konflikt (die Fehlermeldung/Screenshot) aus meiner
> Frage mit:
> PB5 = Input
ist, soweit ich das sehe, nicht nach außen geführt, weil der Pin sich 
einen Pin am Connector mit PB15 und PA9 teilt, wobei PB15 nach außen 
verbunden ist mit einer Lötbrücke (Unterseite, SB9 = close). Mit einer 
Lötbrücke müsstest du das ändern, s. Bildchen 2 oben. PB5 ist 
defaultmäßig nicht nach außen geführt und nur auf dem Board verbunden 
mit der blauen LED.

Ich schätze, du hat mit CubeMX als Board das STM32W55 Nucleo Board 
angeklickt und damit weiß CubeMX durch das Layout vom Board, dass deine 
Konfiguration problematisch ist. PB5 wird daher wohl immer als Output 
angesehen, weil da eben die blaue User-LED angeschlossen ist.

> PB6 = output
ist defaultmäßig über Lötbrücke SB17 (close) nach außen geführt, sollte 
also kein Problem machen. Alternativ kann der Pin auch über die 
Lötbrücke SB16 (open) nach außen geführt werden. Dann müsste der Pin 
aber mit SB14 (close) von PA1 getrennt werden.

> PA14 = SWCLK
geht ohne Umwege an den Pinheader CN7.15.

> TIM2-CH2 = PWM
Ist das ein Pin oder eine Funktion des PA14? Weil im grauen Kasten "I2C 
Conflict with" steht zu PA14:
> PA14 mapped with SYS_JTCK-SWCLK or/and TIM2 : Channel2 PWM Generation CH2
so lese ich das.

Philipp L. schrieb:
> Was hat I2C auf PB7&PB8 mit den oberen von mir mit anderen genutzten
> Funktionen der anderen pins zu tun.
> Warum gibt es die beschriebene Konfliktmeldungen?

Kann ich so nix zu sagen. Es ist aber wichtig, wenn du das Nucleo-Board 
benutzt, dass du bei der Pinbelegung dir den Schaltplan dazu nimmst, s. 
PB5, LED <-> GPIO-Input, das passt nicht wirklich, selbiges, wenn du 
einen Portpin, der an einem Taster angeschlossen ist, als GPIO-Output 
konfigurierst.
Name vom Schaltplan:  en.MB1355-WB55RGV-C02_schematic.pdf 
(möglicherweise veraltet, was ...C02... angeht o. ä.)

: Bearbeitet durch User
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.