Forum: Mikrocontroller und Digitale Elektronik STM32 SPI Slave ohne HAL


von Oz z. (ozzy)


Lesenswert?

Hallo,

   ich möchte gerne einen SPI Slave auf meinem STM32 implementieren, 
allerdings ohne die HAL-Library. Allerdings habe ich hierfür keine 
Implementationen im Netz gefunden, die es ja aber sicher geben muss... 
Könnt Ihr mir da vielleicht weiterhelfen?

   Vielen Dank im Voraus!

von warumNurImmer (Gast)


Lesenswert?

hmm also nicht selber schreiben, aber die HAL auch nicht verwenden 
wollen?

Warum den nicht selber schreiben? So ein Treiberlein steht ja schnell 
mal...

von Alex D. (daum)


Lesenswert?

Lies zuerst einmal das Kapitel zum SPI im Referenz manual durch, dann 
solltest du das selber schaffen (wenn konkrete Fragen auftreten kannst 
du ja hier nochmal fragen). SPI ist nicht sehr schwierig, besonders wenn 
man es Schritt für Schritt macht, also am Anfang mit polling beginnt, 
nachher erst auf interrupt umbaut.

Wenn du es selber machst, statt aus dem Internet zu kopieren, lernst du 
auch viel mehr, wenn du nichts lernen willst, kannst du auch gleich HAL 
verwenden.

von Erklehr Behr (Gast)


Lesenswert?

Oz z. schrieb:
> ich möchte gerne einen SPI Slave auf meinem STM32 implementieren

Ganz normale SPI Master Vorlage verwenden und an wenigen
Stellen (zwei, drei?) die Init-Parameter auf Slave umstellen.

Und dann, wie Alex schon schrub:

Alex D. schrieb:
> also am Anfang mit polling beginnt,
> nachher erst auf interrupt umbaut.

von Oz z. (ozzy)


Lesenswert?

Moin,

   danke erst einmal für Eure Antworten; ich kann Eure Meinung auch 
teilweise nachvollziehen, allerdings bin ich auch der Meinung, dass man 
das Rad zum einen nicht immer wieder aufs Neue erfinden muss, und 
zweitens auch die Frage ist, auf welcher „Flughöhe“ man sich 
befindet/befinden möchte. Häufig sind solche Treiber nur Mittel zum 
Zweck, um die höheren Schichten (Algorithmen) verwenden zu können.

von Erklehr Behr (Gast)


Lesenswert?

Oz z. schrieb:
> allerdings bin ich auch der Meinung, dass man
> das Rad zum einen nicht immer wieder aufs Neue erfinden muss

Dann musst du halt solange warten bis dir jemand den Slave
schreibt und dir mundgerecht wie eine gebratene Taube in den
Mund fallen lässt.

von Erklehr Behr (Gast)


Lesenswert?

Oz z. schrieb:
> Häufig sind solche Treiber nur Mittel zum
> Zweck, um die höheren Schichten (Algorithmen) verwenden zu können.

Codierte Verweigerungshaltung....

Häufig steckt hinter solchen Aussagen nur der Umstand "ich bin
zu faul mir so etwas selbst zu schreiben, zehn Zeilen Code
sind mir zuviel" oder "ich bin einfach zu blöd mir das schnell
selbst hinzuschreiben".

von Frank K. (frank)


Lesenswert?

"Ohne HAL" bedeutet ja wohl nicht dass eine andere Lib zum Einsatz 
kommen darf...

https://github.com/libopencm3/libopencm3-examples

von Oz z. (ozzy)


Lesenswert?

@Erklehr Behr: nein, das heißt es nicht! Aber ich denke, wir sind uns 
einig, dass man guten, sauberen Code nicht einmal so schnell herunter 
schreibt! Und ich habe auch keine Lust, hier eine Grundsatzdiskussion 
vom Zaun zu brechen.

@Frank: vielen Dank für Deinen Link, das sehe ich mir gerne einmal an!

von Jakob (Gast)


Lesenswert?

Meine Erfahrung ist, dass man beim selbst schreiben sehr leicht schwer 
zu debuggende Fehler macht, z.B. irgendein Flag vergessen oder so. 
Vorhandenen Beispiel-Code ist da durchaus hilfreich, und sei es nur als 
Checkliste, welche Register/Flags man braucht (und in welcher 
Reihenfolge).

Runterschreiben nach Reference Manual ist auch leichter gesagt als 
getan, weil da so extrem viele obskure Features beschrieben sind und man 
einige Zeit braucht zu verstehen, welches Subset der Funktionalität man 
nun wirklich braucht und wie man das korrekt ansteuert. Da kann es sehr 
hilfreich sein, wenn man zu Beginn einen funktionierenden Beispiel-code 
hat. Dann kann man im Reference Manual gezielt mit den Registern 
anfangen, die auch im Beispiel verwendet werden und so relativ schnell 
die Grundfunktionalität der Hardware verstehen und einen eigenen Treiber 
schreiben.

Und noch ein praktischer Tip: Die Code-Suche bei Github kann sehr 
hilfreich sein (geht allerdings nur wenn man eingeloggt ist). Einfach 
mal nach ein paar relevanten Registernamen suchen und mit etwas Glück 
findet man ein Projekt, das die entsprechende Hardware verwendet und 
einen eigenen Treiber enthält.

von Peter D. (peda)


Lesenswert?

Oz z. schrieb:
> dass man guten, sauberen Code nicht einmal so schnell herunter
> schreibt!

Und auch nicht für lau findet.
Im Web darf jeder was schreiben. Welchen Erfahrungsstand er hat, sieht 
man nicht. Z. B. das Web strotzt nur so vor schlechten 
Entprellversuchen.

Wenn man eine professionelle Compilerlizenz kauft, hat man oft auch 
Zugriff auf solide Beispiele und Support.

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.