Ich werkel gerade mit einem STM32L053 in Verbindung mit libopencm3 und ich dachte (nachdem es blinkt, I2c und USART geht) ich hätte es halbwegs im Griff und doch ist es Pustekuchen. Ich wollte nun SPI in Betrieb nehmen und muß mit Erschrecken feststellen, dass es mit libopencm3 und STM32L0 keine implementierten SPI-Funktionen gibt. Okay, dachte ich mir: Datenblätter STM32F0 und L0 verglichen und die Unterschiede anpassen => geht nicht. Die Änderungen quer durch die lib sind so umfangreich, dass man die nur sehr schwerlich posten kann, deshalb schlicht meine Frage: Hat das hier schon jemand gemacht, eine SPI-Funktionalität für STM32L0 in Verbindung mit libopencm3? Würde dieser jemand mir evtl. seine Funktionen zur Verfügung stellen? (im Moment bin ich am Überlegen, ob ich den SPI-Teil komplett in bare-metall machen sollte und mich durch alle Registeradressen durchkämpfen, aber auch das ist ein irrer Wust).
Ach so, ja: PS: wer Schreib- und/oder Grammatikfehler findet, darf diese unentgeldlich zu seiner eigenen Belustigung behalten und mit diesen anfangen was immer er/sie möchte !
Die SPI-Schnittstelle ist zwischen F0 und L0 tatsächlich verschieden. Erfahrungen mit dem L0 habe ich mit libopencm3 bisher noch keine. Nach einem Blick ins Datenblatt sieht das für mich folgendermaßen aus: - F0, F3, F7 und L4 haben identische Registermaps - F4 und L0 haben identische Registermaps Von daher würde ich einfach mal die Implementierung aus der Schnittstelle des F4 "klauen", d.h. die spi.h aus include/libopencm3/stm32/f4 und die spi.c aus lib/stm32/f4 in das jeweilige Verzeichnis des L0 kopieren, in include/libopencm3/stm32/spi.h noch ein #elif für den L0 einfügen und im Makefile in lib/stm32/l0 noch die objects für SPI (nach Vorlage aus F4) einfügen.
Die STM32 Register - gerade für SPI - sind so gut wie gar nicht komplexer als jene eines Atmegas. Bitmasken sind auch definiert. Ich brauche ganze 3 (drei) Zeilen, um bei einem STM32F4 das SPI mit Registern zu parametrieren. Faustregel: Sehr viel dieser Register einfach auf 0 lassen. Einfach mal versuchen.
Ich kann mich Nils nur anschließen. SPI ist wirklich kein Hexenwerk. Es gibt zum einen ein bisschen Beispielcode im Handbuch und zum anderen gibt es für F0 und L0 auch noch die "STM32 snippets", was ebenfalls Beispiele direkt auf Registerebene sind: http://www.st.com/en/embedded-software/stm32snippets.html. Direktdownload für den L0: http://www.st.com/resource/en/firmware/stm32snippetsl0.zip
... ich habs hinbekommen. Prinzipiell ist alles einfach, wenns mal geht. Aus mir nicht erfindlichen Gründen läufts auf PB3 bis PB5... und auf PA nicht...
Was denn hinbekommen? libopencm3 oder direkter Registerzugriff? Ist es ein STM32L053C6/8 bzw R6/8? Ich nehme mal an du meinst SPI1 an PB3, PB4 und PB5 bzw. PA5, PA6, PA7.
Ich habe die libopencm3 Bibliothek erweitert, auf Basis der STM32F0 Sourcen und ein paar Register umbenannt. Leider scheint es bei L0 nicht mehr möglich zu sein, die Bits eines Datenframes zu bestimmen, es sind nun entweder 8 oder 16 Datenbits. Außerdem happert es noch mit einem Register, welches erkennt, ob ein Frame bereits gesendet ist oder nicht (SPI_CR_BSY Flag). Und ja, ich meinte PB3, PB4, BP5. Warum es mit PA5, PA6 und PA7 nicht klappt weiß ich noch nicht, vllt. liegts auch an der Beschaltung vom mir verwendeten Discovery-Board. Außerdem hab ich noch einen Bug bei der Systeminitialisierung behoben: Die "Corespannung" muß, bevor an den RCC-Einstellung etwas geändert wird, auf 1,8V angehoben werden, damit der max. Systemtakt von 32MHz erreichbar ist. Fürs erste gebe ich mich so wie es ist zufrieden, SPI-Displays laufen zufriedenstellend. (Ja, ich war so verrückt, nachdem ich mit dem E-Paper Display gespielt habe, dieses vom Discovery zu entfernen. Eigentlich wollte ich ein universelles Modul aus diesem Display machen, aber leider ist mir das Teil beim abheben von der Discoveryplatine zerbrochen. Der Kleber war dann zu hartnäckig. Jetzt ist anstelle des Displays ein kleines Steckbrett und ich habe das somit zu einem Experimentierboard "umgefrickelt")
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.