Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Programmierung der wichtigsten Peripherie-Komponenten des STM32F4xx-Chips Digitale und analoge I/O-Ports (GPIOs), Timer und Counter, serielle Schnittstellen (USARTs/UARTs, SPI und I2C), ADCs und DACs, Direct Memory Access (DMA) Zahlreiche praktische Anwendungsbeispiele Dieses Buch bietet einen umfassenden Praxiseinstieg in die Softwareentwicklung für Embedded Systems mit der ARM-Mikrocontrollerfamilie STM32F4xx der Firma STMicroelectronics (STM). Für die Programmierung wird die Sprache C eingesetzt. Der Autor behandelt die wichtigsten Peripherie-Komponenten, dazu gehören digitale und analoge I/O-Ports (GPIOs), Timer und Counter, serielle Schnittstellen (USARTs/UARTs, SPI und I2C), ADCs und DACs, RTC (Echtzeit-Uhr) sowie Direct Memory Access (DMA). Anhand einfacher Beispiele zeigt der Autor den praktischen Einsatz dieser Komponenten. Hierzu zählen die Abfrage von Uhrzeit und Datum von einer externen RTC (über I2C) sowie deren Anzeige über SPI auf einfachen Displays. Im Verlauf des Buchs entsteht so eine Bibliothek, deren Funktionen für eigene Projekte auf einfache Weise eingesetzt werden können. Die Beispiele werden auf dem Evaluierungsboard NUCLEO-64 mit dem STM32F446 unter Einsatz der STM32CubeIDE-Entwicklungsumgebung entwickelt und getestet. Grundlegende Kenntnisse der Programmiersprache C werden vorausgesetzt. Alle Beispiele folgen dem MISRA-C-Standard, dessen Anwendung in der Automobilindustrie vorgeschrieben ist. Dieser wird in einem separaten Kapitel vorgestellt und sorgt für gut verständlichen und somit leicht zu pflegenden Code. Der Fokus liegt auf der »baremetal«-Programmierung, was den Umstieg auf Mikrocontroller anderer Hersteller erleichtert. Auf den Einsatz der HAL-Bibliothek wird ausdrücklich verzichtet. Aus dem Inhalt: Typische GPIO-Anwendungen (Input/Output/Alternative Funktionen) Timer: Systick/Basic/General Purpose/Advanced Control Timer PWM: Dimmen von LEDs mit Timern A/D- und D/A-Wandlung Serielle Kommunikation mit UARTs/USARTs/I2C/SPI Porterweiterung mit I2C (PCF8574)/Ansteuerung von LC-Displays 7-Segment-Anzeigen über SPI (MAX7219) Einsatz einer externen Echtzeituhr (RTC) DS3231 über I2C
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 471
Veröffentlichungsjahr: 2022
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Ralf Jesse
Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN 978-3-7475-0454-3 2. Auflage 2022
www.mitp.de E-Mail: [email protected] Telefon: +49 7953 / 7189 - 079 Telefax: +49 7953 / 7189 - 082
© 2022 mitp Verlags GmbH & Co. KG
Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen.
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.
Lektorat: Sabine Schulz Sprachkorrektorat: Petra Heubach-Erdmann Coverbild: © Edelweiss / stock.adobe.comelectronic publication: III-satz, Husby, www.drei-satz.de
Dieses Ebook verwendet das ePub-Format und ist optimiert für die Nutzung mit dem iBooks-reader auf dem iPad von Apple. Bei der Verwendung anderer Reader kann es zu Darstellungsproblemen kommen.
Der Verlag räumt Ihnen mit dem Kauf des ebooks das Recht ein, die Inhalte im Rahmen des geltenden Urheberrechts zu nutzen. Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheherrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und Einspeicherung und Verarbeitung in elektronischen Systemen.
Der Verlag schützt seine ebooks vor Missbrauch des Urheberrechts durch ein digitales Rechtemanagement. Bei Kauf im Webshop des Verlages werden die ebooks mit einem nicht sichtbaren digitalen Wasserzeichen individuell pro Nutzer signiert.
Bei Kauf in anderen ebook-Webshops erfolgt die Signatur durch die Shopbetreiber. Angaben zu diesem DRM finden Sie auf den Seiten der jeweiligen Anbieter.
Viel früher als erwartet war die erste Auflage dieses erst Ende Februar 2021 erschienenen Buches ausverkauft. Die normale Vorgehensweise wäre nun, das Buch einfach nachzudrucken und in unveränderter Form fortzuführen, da sich in derart kurzer Zeit nicht viel geändert hat/geändert haben kann. Ein vorrangiges Ziel beim Schreiben dieses Buches war aber – neben der Vermittlung der Kenntnisse zur Programmierung der STM32F4-Mikrocontroller – die Entwicklung einer Funktionssammlung in Form einer Bibliothek, die einerseits unabhängig von einem bestimmten Hersteller ist und die Sie andererseits in die Lage versetzen soll, die »Bare Metal«-Programmierung der STM32F4-Mikrocontrollerfamilie – also die Programmierung auf Registerebene – zu verstehen, sie in eigenen Projekten einzusetzen und, falls erforderlich, auf Mikrocontroller anderer Hersteller portieren zu können.
In den letzten Monaten ist diese Funktionssammlung – ursprünglich hatte ich sie einfach nur MCAL genannt, inzwischen nenne ich sie alternativ auch MCAL-STM – erheblich umfangreicher geworden. Umfasste sie in ihrer ursprünglichen Version nur 82 Funktionen, so stehen Ihnen inzwischen mehr als 240 Funktionen zur Verfügung, und ein Ende der Weiterentwicklung ist nicht absehbar! Die durchgeführten Erweiterungen führten dazu, dass viele Funktionen geändert, harmonisiert und optimiert wurden, damit sie leichter und intuitiver anwendbar sind. Dies hat dann naturgemäß zur Folge, dass ich die ursprünglichen MCAL-STM-Beispiele an die neuen Gegebenheiten anpassen musste: Mit der aktuellen Version der MCAL-STM werden die für die erste Auflage entwickelten Beispiel-Projekte überwiegend nicht mehr funktionieren.
Hierzu möchte ich Ihnen ein paar Beispiele nennen:
Um den Bustakt von Peripheriekomponenten zu aktivieren, habe ich in der ursprünglichen Version der MCAL die entsprechenden Funktionen in den meisten Fällen mit xxxInitXxx(...) bezeichnet, wobei »xxx« für eine beliebige Peripheriekomponente steht (also z.B. gpioInitGPIO(...)). Allerdings dienen diese Funktionen nur zur Aktivierung des Bustakts der jeweiligen Komponente: Für die Initialisierung – hierunter verstehe ich die Konfiguration für den gewünschten Einsatz – werden andere Funktionen verwendet. Als Folge der Optimierung wird der Bustakt der Komponenten nun in der Form xxxSelectXxx(), also z.B. mit gpioSelectGPIO(), aktiviert. Die Timer-Funktion zum Aktivieren des Bustakts heißt nun entsprechend timerSelectTimer(), die von UARTs/USARTs somit usartSelectUsart().
Bei den Timern wurden Input-Capture-/Output-Compare-Funktionen ursprünglich in einer gemeinsamen Funktion behandelt. Da sich die Anzahl der verfügbaren Input-Capture-/Output-Compare-Kanäle der einzelnen Timer unterscheidet (sie liegt zwischen null und vier), hätte alleine die Behandlung der möglichen Kanal-Kombinationen acht Fallunterscheidungen erfordert. Zusätzlich müsste die Funktion aber auch prüfen, ob der ausgewählte Timer überhaupt geeignet ist, was weitere Fallunterscheidungen erfordert hätte. Ich habe mich daher letztendlich dazu entschlossen, die Input-Capture-Funktionen völlig von den Output-Compare-Funktionen zu trennen. So entstanden aus ursprünglich einer timerSetCapCompMode()-Funktion im Verlauf beispielsweise die Funktionen timerSetInputCaptureMode() bzw. timerSetOutputCompareMode().
Die GPIO-Funktionen gpioGetPinState() und gpioGetPortVal() habe ich inzwischen stark überarbeitet. Haben sie ursprünglich die gewünschten Ergebnisse in einer Variablen gespeichert, auf die über einen Pointer zugegriffen werden musste, habe ich sie nun so geändert, dass sie die Ergebnisse unmittelbar zurückliefern.
Vergleichbare Anpassungen für die anderen Peripheriekomponenten führten zu der Entscheidung, dass das Buch vollständig überarbeitet werden musste. Es gibt aber auch weitere Änderungen im Vergleich zur ersten Auflage: Eine betrifft z.B. die Einstellung der Taktfrequenzen, für die ich mit Kapitel 5 ein neues Kapitel geschrieben habe. Dies hat zur Folge, dass alle folgenden Kapitel eine neue Kapitelnummer erhalten und zudem Anhang B in seiner ursprünglichen Form entfällt.
Hinweis
Auf meiner Webseite https://www.ralf-jesse.de werde ich Sie natürlich auch zukünftig an den neuesten Entwicklungen teilhaben lassen. Da es sich dann aber um neue und bisher nicht beschriebene »Features« handelt, wird dieser zweiten Auflage mit großer Wahrscheinlichkeit eine längere »Lebensdauer« beschert sein.
In diesem Buch wird die Programmierung von Mikrocontrollern der STM32F4xx-Familie von STMicroelectronics behandelt. Sie gehören zur Gruppe der Cortex-M4-Controller, die von Arm Limited entwickelt wurden. Die Namen der beiden genannten Unternehmen werden im weiteren Verlauf verkürzt als STM bzw. als Arm bezeichnet.
Arm ist demnach der Entwickler des Mikrocontrollerkerns, der Hersteller des käuflich zu erwerbenden Mikrocontrollers aber ist die Firma STM. STM lizenziert die Entwicklungsarbeit von Arm und nutzt somit deren sogenannte Intellectual Property (geistiges Eigentum). Und hierin liegt auch der wesentliche Geschäftsbereich von Arm: Gegen die Zahlung von Lizenzgebühren überlässt Arm den Herstellern der Mikrocontroller das Recht an der Nutzung seines geistigen Eigentums, die den Prozessorkern dann um eigene Komponenten erweitern. Dass ich an dieser Stelle nur ganz allgemein von Cortex-Mikrocontrollern spreche, geschieht ganz bewusst: Denn Arm hat nicht nur Cortex-M-, sondern auch Cortex-A- und Cortex-R-Mikrocontroller und weitere entwickelt. Alle genannten Typen sind wiederum in Gruppen unterschiedlicher Leistungsfähigkeit unterteilt, sodass STM insgesamt mehr als 600 verschiedene Cortex-Mikrocontroller anbietet.
Hinweis
Dieses Buch befasst sich – wie bereits oben erwähnt – ausschließlich mit den Cortex-M4-Mikrocontrollern von STM. Aufgrund der sehr guten Skalierbarkeit der Cortex-M-Mikrocontroller von STM lassen sich die in diesem Buch beschriebenen Techniken aber auch mit den neuen STM32F7xx-Mikrocontrollern einsetzen! Auch Nutzer der Cortex-M0-, Cortex-M3- oder von Cortex-M23-Mikrocontrollern können von diesem Buch profitieren.
STM ist nicht der einzige Hersteller von Cortex-Mikrocontrollern: Basierend auf dem Arm-Kern sind auch NXP, Microchip, Texas Instruments, Toshiba, Infineon und viele weitere Unternehmen Hersteller von Cortex-Mikrocontrollern und somit Kunden von Arm.
Es gibt verschiedene Gründe, die mich zu dem Einsatz von STM32F4-Mikrocontrollern bewogen haben:
In den meisten Unternehmen, in denen ich seit mehr als 30 Jahren als Softwareentwickler im Mikrocontrollerbereich arbeite oder gearbeitet habe, werden seit vielen Jahren Mikrocontroller von STM eingesetzt.
In den einschlägigen Internetforen sind sehr viele Informationen und Hilfestellungen in Form von Tutorials zu finden. Im Anhang werde ich Ihnen einige Internetadressen nennen, die ich persönlich als besonders hilfreich empfinde.
Die (englischsprachige) Dokumentation von STM empfinde ich als vorbildlich und klar strukturiert.
Einer der wichtigsten Gründe besteht darin, dass STM sehr preisgünstige Evaluierungsboards vertreibt. Das in diesem Buch eingesetzte Evaluierungsboard NUCLEO-F446RE ist bei einem weltbekannten Onlinehändler bereits zu einem Preis von weniger als 30 Euro erhältlich. Ein Debugger mit Vorrichtung zum Flashen der Software ist hier bereits enthalten!
Hinweis
Der STM32F446RE zählt zu den leistungsstärksten Cortex-M4-Controllern von STM. Dabei hat es STM geschafft, die verschiedenen Mitglieder dieser Familie weitestgehend kompatibel zueinander zu halten. Dies bedeutet, dass die meisten Beispiele, die Sie in diesem Buch sowie auf meiner Webseite https://www.ralf-jesse.de finden, nur geringfügige Anpassungen benötigen und leicht auf den anderen Mikrocontrollern der STM32F4-Familie eingesetzt werden können. Unterschiede zwischen den verschiedenen Familienmitgliedern beschränken sich darauf, dass nicht immer alle Peripheriekomponenten integriert sind. Auch ihre Anzahl kann sich unterscheiden. Wichtig ist aber: Die Programmierung dieser Komponenten ist immer identisch.
Ich gehe davon aus, dass jeder Leser dieses Buches der englischen Sprache so weit mächtig ist, dass er die Originaldokumentation der Hersteller nachvollziehen kann. Dennoch erleichtert es die Entwicklungsarbeit häufig, wenn weitere Dokumentation oder Literatur auch in der eigenen Muttersprache verfügbar ist. Meines Wissens existiert derzeit nur noch ein weiteres deutschsprachiges Buch zu STMs Cortex-M-Mikrocontrollern, das sich hauptsächlich an Anwender richtet, die erste Erfahrungen in der Arduino-Welt gesammelt haben.
Tipp
Um Ihnen die Suche nach Informationen im Internet zu erleichtern, habe ich in Anhang A eine nach Themen sortierte Sammlung von derzeit gültigen Internetadressen (Stand: März 2022) zusammengestellt. Ich habe mich dabei – mit einer Ausnahme – auf sichere Webseiten (https://...) beschränkt.
Dieses Buch wendet sich genauso an erfahrene Softwareentwickler wie auch an Studierende technischer Fachrichtungen. Aber auch Einsteiger in die Programmierung von Mikrocontrollern sowie Umsteiger von anderen Plattformen werden hier nicht alleine gelassen. Der folgende Hinweis gilt vor allem für Einsteiger in die Programmierung von Mikrocontrollern:
Hinweis
Cortex-M-Mikrocontroller gehören, unabhängig vom jeweiligen Hersteller, derzeit zu den High-End-Mikrocontrollern! Dies bedeutet nicht, dass ihre Programmierung etwa schwieriger wäre als beispielsweise bei den sehr beliebten ATmega-, PIC- oder ATtiny-Prozessoren von Microchip – sie bieten allerdings häufig erheblich mehr Peripheriekomponenten mit mehr Einsatzmöglichkeiten und sind daher komplexer.
Sämtliche Beispiele wurden in der Programmiersprache C entwickelt. Da es sich bei diesem Buch aber nicht um ein Lehrbuch zu dieser Sprache handelt, werden mindestens mittlere Kenntnisse von C vorausgesetzt. Darüber hinaus lässt es sich in einem Buch mit limitierter Seitenzahl niemals vermeiden, auf die Originaldokumentation des Herstellers zurückzugreifen. Grundkenntnisse des technischen Englischs werden somit vorausgesetzt.
Hinweis
Obwohl dieses Buch Kenntnisse in der Programmiersprache C voraussetzt, werden im Embedded-Umfeld teilweise Techniken eingesetzt, die nur zögerlich in die C-Programmierung von PCs einfließen und daher nicht jedem C-Programmierer geläufig sind. In Kapitel 3 werde ich diese Techniken daher zusammenfassen.
Der Einsatz eines Buches zum Erlernen der Programmierung eines Mikrocontrollers – dies gilt aber gleichermaßen für die Erlernung einer beliebigen Programmiersprache – kann nur dann erfolgreich sein, wenn die Beispiele ausprobiert und von Ihnen auch an eigene Anforderungen angepasst werden können. Sie benötigen daher neben einem Entwicklungs-PC auf jeden Fall eines der preisgünstigen Evaluierungsboards von STM und zusätzlich ein zum jeweiligen Evaluierungsboard passendes USB-Kabel, das für den Upload (Flashen) eines Softwareprojekts und zum Debuggen bei der Fehlersuche benötigt wird. Im Verlauf des Buches werden zunehmend auch elektronische Bauelemente verwendet, die Sie bei Bedarf zusätzlich beschaffen müssen.
Hinweis
Die Beispiele in diesem Buch wurden alle mit dem STM32 NUCLEO-64 STM32F446RE getestet. Dies bedeutet auch, dass Peripheriekomponenten, die auf diesem Evaluierungsboard nicht vorhanden sind – hierzu zählen beispielsweise die Ethernet-Schnittstelle oder Komponenten zur Steuerung von Grafikdisplays –, in diesem Buch nicht behandelt werden: Entsprechende Beispiele will ich aber nach und nach auf meiner oben genannten Webseite nachreichen.
Bereits seit 2012 empfiehlt STM den Einsatz der hauseigenen HAL-Bibliothek, die die bei vielen Softwareentwicklern beliebte SPL(Standard Peripheral Library) ersetzen sollte. HAL hat bisher allerdings nicht nur Freunde gefunden. Ich habe den Einstieg in HAL selbst ausprobiert und bin nicht überzeugt! Meine Eindrücke sind:
HAL ist nicht vollständig. Ich habe dies exemplarisch beim Einsatz des USART erfahren, bei dem nicht alle Daten übertragen wurden (ich habe hierfür aber eine andere funktionierende Lösung entwickelt).
Die Dokumentation ist noch nicht ganz ausgereift.
Wenn ein Hersteller (dies gilt nicht nur für STM) entscheidet, eine neue Bibliothek zu entwickeln und die »alte« Bibliothek nicht weiterzupflegen, entsteht bei den Anwendern irgendwann der Druck, ihre Software entweder auf die neue Bibliothek zu portieren oder sogar vollständig neu zu entwickeln. Dass dies mit erheblichen Kosten verbunden ist, liegt auf der Hand!
Die Entwicklung einer herstellerspezifischen Bibliothek halte ich grundsätzlich für legitim: Schließlich wollen die Hersteller Kunden an ihre Produkte binden! Es ist aber auch vorstellbar, dass aus bestimmten Gründen der Umstieg auf Mikrocontroller anderer Hersteller erforderlich wird. Einer der Gründe, die mir in meiner langjährigen Berufspraxis immer wieder genannt wurden, waren hohe Beschaffungspreise der Mikrocontroller, wenn große Stückzahlen bestimmter Produkte produziert werden sollten. Ein weiterer Grund war oft, dass Kunden bereits Erfahrungen mit den Mikrocontrollern anderer Hersteller hatten und die Kosten und die Zeit für die Einarbeitung in die erforderlichen neuen Techniken scheuten. Unabhängig vom Grund gilt: Die Portierung bereits vorhandener Software würde durch den Einsatz herstellerspezifischer Bibliotheken erheblich erschwert.
Korrekterweise darf man HAL auch nicht als Bibliothek bezeichnen: Vielmehr handelt es sich hierbei nur um eine weitere Abstrahierung, denn sie verwendet lediglich weitere noch tiefer liegende Funktionen: HAL »umhüllt« sozusagen die Low-Level-Funktionen, weshalb viele Programmierer sie nur als »Wrapper« (»Umhüller«) bezeichnen.
Ich habe mich daher für den »althergebrachten« Weg der Programmierung über die Register entschieden. Diese Vorgehensweise bringt – ganz nebenbei und unter Vermeidung der bereits erwähnten Nachteile – viele Vorteile für Sie mit sich:
Sie lernen die Programmierung eines Mikrocontrollers »von der Pike auf« und können die erworbenen Kenntnisse später auf andere Mikrocontroller übertragen.
Sie werden quasi gezwungen, sich intensiver mit dem Reference Manual von STM zu befassen, da in einem Buch von knapp 400 Seiten nicht der Inhalt von mehr als 1.300 Seiten der offiziellen Dokumentation zusammengefasst werden kann.
Hinweis
Der Einsatz von CMSIS (Cortex Microcontroller Software Interface Standard) stellt die Ausnahme von dieser selbst auferlegten Regel dar. Hierbei handelt es sich um eine Sammlung von Funktionen, Makros und Definitionen, die den von Arm entwickelten Prozessorkern betreffen, da dieser von allen Herstellern gleichermaßen genutzt wird (eventuell mit Ausnahme der optional ebenfalls verfügbaren Fließpunkteinheit FPU). Ein weiterer Grund für den Einsatz von CMSIS besteht darin, dass hier der jeweils verwendete Mikrocontroller vollständig von seinem Hersteller beschrieben wurde, das heißt, sämtliche Registernamen aller Komponenten sind mitsamt ihren Adressen im verfügbaren Speicherbereich bereits definiert. Allein die Beschreibung des STM32F446xx umfasst ca. 16.000 Zeilen!
Hinweis
Neben der CMSIS wird im weiteren Verlauf natürlich auch die selbst entwickelte MCAL-STM-Bibliothek verwendet. Die MCAL-Bibliothek ist zwar immer noch nicht fertig, sie ist aber – besonders im Vergleich zur ersten Auflage dieses Buches – so umfangreich geworden, dass ich (weiter oben habe ich es bereits erwähnt) die Beispielprojekte vollständig überarbeitet habe. Fast alle Beispiele zeigen nun die Bare-Metal-Version (als Standard), die durch einfaches Entfernen der Kommentarzeichen vor dem Eintrag #defineMCAL in die MCAL-Version umgesetzt werden können. Im Gegensatz zur Bare-Metal-Version, die sich immer auf eine bestimmte Komponente bezieht (z.B. GPIOA oder Timer TIM9), ist die MCAL universell für sämtliche Komponenten einsetzbar.
Den Quelltext der Bibliothek stelle ich Ihnen unter https://gitlab.com/rjesse/mcal-stm.git kostenlos in Form freier Software zur Verfügung. Die Namen der entsprechenden Dateien beginnen immer mit mcal. Die GPIO- oder Timer-Funktionen finden Sie entsprechend in den Dateien mcalGPIO.h/mcalGPIO.c oder mcalTimer.h/mcalTimer.c. Die Einführung neuer MCAL-Funktionen wird im Anschluss an jedes Beispiel besonders erwähnt. Die Funktionen selbst beginnen stets mit dem Komponentennamen, also z.B. gpioSetPin() oder gpioSelectMode().
Hinweis
Sehr viele Softwareentwickler entwickeln mit zunehmender Erfahrung ihre eigenen Bibliotheken, damit sie »das Rad nicht immer aufs Neue erfinden müssen«. Die Entwicklung der MCAL erfolgt hier auch mit dem Wunsch, dass sie von den meisten Lesern dieses Buches genutzt und weiterentwickelt wird. Lassen Sie mich bitte an Ihren Erkenntnissen teilhaben unter [email protected]. Anders als in den gedruckten Listings erfolgt die Kommentierung der MCAL in englischer Sprache: Vielleicht wird die MCAL genau aus diesem Grund auch von internationalen Programmierern eingesetzt, die der deutschen Sprache nicht mächtig sind. Die Dokumentation wird unter Einsatz des Open-Source-Tools Doxygen generiert.
Für die Entwicklung der Beispielprojekte habe ich die kostenlose und auf Eclipse basierende STM32CubeIDE verwendet, die nach einer Registrierung von der Webseite https://st.com heruntergeladen werden kann. Auf eine Bedienungsanleitung zu dieser Entwicklungsumgebung (IDE, Integrated Development Environment) habe ich aber verzichtet, da Tutorials zu Eclipse bzw. auf Eclipse basierenden Entwicklungsumgebungen in großer Zahl im Internet zu finden sind (teilweise auch in deutscher Sprache). Vielleicht bevorzugen Sie aber auch eine andere Entwicklungsumgebung, wie z.B. IAR Workbench, Keil µVision oder Embedded Studio von der deutschen Firma Segger, bei denen es sich aber um sehr teure (je nach Ausstattung kosten sie mehrere Tausend Euro) kommerzielle Entwicklungsumgebungen handelt.
Hinweis
Damit die verschiedenen Beispiele in diesem Buch auf einer gemeinsamen Basis aufsetzen können, habe ich in Kapitel 2 eine ausführliche Anleitung erstellt, die zeigt, wie Sie die CMSIS-Bibliothek für den STM32F446xx selbst erstellen können. Diese Arbeit ist nur für Nutzer einer Eclipse-basierten Entwicklungsumgebung (IDE) geeignet: Anwender einer der genannten kommerziellen IDEs benötigen sie nicht (sie können aber sicherlich auch etwas daraus lernen).
Tipp
Keil µVision, die IAR Workbench oder auch die Entwicklungsumgebung von Segger werden als Evaluierungsversionen kostenlos angeboten: Dann müssen Sie allerdings üblicherweise Einschränkungen akzeptieren, etwa dass die entwickelte Software nicht kommerziell genutzt werden darf. Auch die Größe der Softwareprojekte ist möglicherweise beschränkt.
Ich habe lange überlegt, ob ich die Register in den Beispielprogrammen in diesem Buch vollständig beschreiben soll. Dieser Ansatz wäre sehr »seitenfüllend« geworden. Ich habe mich schließlich dazu entschlossen, nur die Bits der Register zu beschreiben, die zum Verständnis des jeweiligen Beispiels notwendig sind. Für diese Entscheidung habe ich mehrere Gründe:
Der Umfang des Buches fällt durch diesen Ansatz geringer aus, was sich schließlich auch im Kaufpreis widerspiegelt.
Beim Abschreiben des Referenzhandbuchs hätten sich womöglich Fehler eingeschlichen.
Ein Aspekt beim Schreiben dieses Buches war, dass ich Sie zum Umgang mit der Originaldokumentation von STM motivieren möchte.
Sie können sich leichter auf die wesentlichen Dinge in den einzelnen Beispielen konzentrieren. Mit ein wenig Übung können Sie sich bei eigenen Projekten die entsprechenden Funktionen selbst herleiten.
Dies ist nicht das erste Buch, das ich geschrieben habe. Bereits für andere Bücher habe ich unter https://www.ralf-jesse.de eine Webseite angelegt, von der Sie die Beispielprogramme herunterladen können. Darüber hinaus bin ich für meine Leser unter der E-Mail-Adresse [email protected] für einen allgemeinen Austausch sowie für Fragen, Hilfestellungen und Anregungen erreichbar. Über die Jahre hat sich hier bereits eine stattliche Anzahl von Kontakten ergeben. Mein Versprechen an Sie: Jede E-Mail wird von mir zeitnah und persönlich beantwortet!
Seit der Veröffentlichung der ersten Auflage dieses Buches habe ich die MCAL-Bibliothek erheblich erweitert. Dies wirkt sich unmittelbar auf die enthaltenen Beispielprojekte aus: So habe ich seinerzeit für die meisten Beispiele noch Hilfsfunktionen entwickelt, die erst in einem weiteren Schritt in die MCAL-Bibliothek aufgenommen wurden. Außer zur Erläuterung von Konzepten werden viele dieser Hilfsfunktionen gar nicht mehr benötigt! Stattdessen habe ich die meisten Beispiele so umgestaltet, dass Sie beide Versionen, also die MCAL- und die »reine« Bare-Metal-Version enthalten. Durch das Hinzufügen bzw. Löschen der Kommentarzeichen // vor #defineMCAL können Sie nun zwischen beiden Versionen hin- und herschalten.
Hinweis
Diese Vorgehensweise ließ sich leider nicht in allen Beispielen konsequent umsetzen! Immer dann, wenn es um die Einführung neuer Konzepte geht – dies werden Sie besonders deutlich z.B. in Kapitel 9 erfahren (hier wird der SysTick-Timer beschrieben) –, ist die Verwendung von Funktionen der MCAL-Bibliothek nicht sinnvoll, da sie den letzten von teilweise mehreren Entwicklungsschritten darstellen. Die Hilfsfunktionen dienen der Erläuterung der Konzepte, und die Verwendung der endgültigen Version einer MCAL-Funktion würde das Verständnis der Verbesserungen bzw. Zwischenschritte erschweren.
An dieser Stelle bleibt mir nur noch, Ihnen viel Spaß und Erfolg beim Durcharbeiten dieses Buches zu wünschen.
Zum Zeitpunkt der Veröffentlichung dieses Buches werden Sie auf meiner Webseite https://www.ralf-jesse.de auch die Beispielprojekte zu diesem Buch herunterladen können. Hier werde ich aber nach und nach auch weitere Projekte veröffentlichen. Geplant sind z.B. die Ansteuerung von Grafikdisplays und später auch die Implementierung einer Ethernet-Anbindung (dann allerdings mit einem anderen STM32F4- bzw. STM32F7-Controller, da der STM32F446 eine solche Schnittstelle nicht enthält). Auch die MCAL-Bibliothek wird weitergepflegt und immer wieder erweitert. Ich weise aber ausdrücklich darauf hin, dass die aktuelle Version der MCAL-STM nicht mehr auf meiner Webseite zu finden ist: Alternativ habe ich unter https://gitlab.com/rjesse/mcal-stm.git ein Gitlab-Repository angelegt. Nutzen Sie dieses Repository, wenn Sie die jeweils neueste Version der MCAL-STM benötigen. Es lässt sich nicht immer vermeiden, dass ich durch neue Erkenntnisse Namen von Funktionen ändern werde. Dann entfallen die veralteten Funktionen aber nicht: Vielmehr werden sie in der HTML-Dokumentation dann als »deprecated« (veraltet) bezeichnet. Sie finden dann immer einen Hinweis auf die Funktion, die Sie anstelle der alten Version nutzen sollten.
Kapitel 1
STM32F4xx-Mikrocontroller
Kapitel 2
CMSIS und MCAL erstellen, der Bootprozess, Anwendung der CMSIS
Kapitel 3
Embedded C vs. Standard C
Kapitel 4
RCC, SYSCFG und SCB
Kapitel 5
Einstellung von Taktfrequenzen
Will man Software für einen Mikrocontroller entwickeln, ist es hilfreich, wenn grundlegende Kenntnisse zur Hardware vorhanden sind. Die erforderlichen Kenntnisse müssen nicht so tief gehend sein, wie dies für Hardwareentwickler erforderlich ist, man sollte aber in der Lage sein, sich mit ihnen auf einer gemeinsamen Basis verständigen zu können.
Daher beginne ich dieses Buch mit einem kurzen Überblick über die Mitglieder der STM32F4xx-Familie.
Wie bereits in der Einleitung erwähnt, besteht die STM32F4xx-Familie aus einer Vielzahl von Mikrocontrollern, die, abhängig von ihrer Ausstattung und ihrer Leistungsfähigkeit, in verschiedene Produktlinien eingeordnet sind:
Die Advanced Line umfasst die Ausführungen STM32F469, STM32F429 und STM32F427. Diese bieten die größte Funktionsvielfalt und enthalten unter anderem Ethernet-Interfaces. Bis auf den STM32F427 enthalten die Mitglieder der Advanced Line auch einen TFT-/LCD-Controller. Die genannten Mikrocontroller können mit einer Taktfrequenz von bis zu 180 MHz eingesetzt werden. Je nach Modell verfügen sie über einen Flashspeicher von bis zu 2 MByte und bis zu 384 KByte SRAM.
Die sogenannte Foundation Line umfasst die Typen STM32F446, STM32F407 und STM32F405. Die maximale Taktfrequenz des STM32F405 beträgt 168 MHz, die beiden anderen können – wie die Mitglieder der Advanced Line – mit einer Frequenz von bis zu 180 MHz getaktet werden.
Die Access Line umfasst mit den Mikrocontrollern STM32F401, STM32F410, STM32F411, STM32F412 und STM32F413 die Familienmitglieder, die am wenigsten leistungsstark sind. Dies betrifft weniger die Größe von Flashspeicher (maximal 1.536 KByte) und SRAM (bis zu 320 KByte), sondern vielmehr die Zahl serieller Schnittstellen und anderer Peripheriekomponenten. Die Taktfrequenz ist mit maximal 100 MHz aber immer niedriger verglichen mit den Mitgliedern der Advanced Line bzw. der Foundation Line.
Abbildung 1.1 zeigt die derzeit verfügbaren Mikrocontroller dieser Familie (Stand: März 2022). Der in diesem Kapitel exemplarisch beschriebene Mikrocontroller STM32F446 ist durch einen Rahmen hervorgehoben.
Abb. 1.1: Überblick über die STM32F4-Familie
Hinweis
Obwohl ich mich nachfolgend auf den STM32F446 konzentriere, lässt sich seine Beschreibung nicht nur auf die anderen Mitglieder der STM32F4-Familie übertragen, sondern auch – mit Ausnahme der Arm-spezifischen Bestandteile sowie der herstellerspezifischen Peripheriekomponenten – auf beliebige andere Mikrocontroller. Natürlich gibt es Unterschiede bei der Programmierung der integrierten Peripheriekomponenten, was sich nicht zuletzt in unterschiedlichen Benennungen und Adressen der Register wie auch in der Anschlussbelegung zeigt, das Funktionsprinzip ist aber überall sehr ähnlich. Die Portierung der Kenntnisse auf Mikrocontroller anderer Hersteller sollte recht einfach sein, da Sie hier ja die Programmierung von der Pike auf lernen.
Dieses Kapitel ist in fünf Abschnitte gegliedert:
Bevor wir uns an die Arbeit begeben und die CMSIS als Bibliothek für die folgenden Projekte erstellen, will ich in Abschnitt 2.1 erläutern, weshalb ich den hier beschriebenen Weg der Bibliothekserstellung bevorzuge: Denn zwingend erforderlich ist er nicht!
Abschnitt 2.2
