Neuigkeiten

Neu hinzugefügte Artikel

07.06.2021:

Die MCAL-Bibliothek ist seit Erscheinen des STM32-Buches erheblich gewachsen. Wie ich bereits früher erwähnte, ließ es sich nicht vermeiden, einige Funktionen umzubenennen oder, wie es z.B. im mcalTimer-Teil geschah, komplett umzustrukturieren. Dies hat zur Folge, dass viele MCAL-Beispiele, die im Buch gezeigt werden, auf die neue MCAL-Version portiert werden müssen. Damit Sie als Leser/Anwender der MCAL diese Änderungen der MCAL in eigenen Projekten berücksichtigen können, habe ich sämtliche Beispiele bis einschließlich Kapitel 11 neu entwickelt und an die neue MCAL angepasst. Sie können die aktualisierten Beispiele im Downloadbereich herunterladen.

Natürlich müssen Sie dann auch die aktuelle Version der MCAL von https://gitlab.com/rjesse/mcal-stm.git verwenden.

02.06.2021:

Ich habe in mcalGPIO drei neue Funktionen hinzugefügt, die wahlweise die Bits 0...7, 8...15 oder 0...15 auf den angegebenen Wert setzen. Die Funktionen heißen entsprechend gpioSetLowerByte(GPIO_TypeDef *port, uint8_t byte), gpioSetUpperByte(GPIO_TypeDef *port, uint8_t byte) und gpioSetWord(GPIO_TypeDef *port, uint16_t word).

Diese Funktionen sind nicht thread-safe!

31.05.2021:

Auf Anregung einer Leserin meines STM32-Buches habe ich die Header-Dateien der MCAL für den Einsatz unter C++ so erweitert, dass sie jetzt auch mit der Programmiersprache C++ einsetzbar ist. Dies betrifft allerdings nur die Nutzbarkeit unter C++: Objektorientiert wird sie hierdurch nicht! Den Download der aktuellen Version finden Sie wie gewohnt unter https://gitlab.com/rjesse/mcal-stm.git.

20.05.2021:

Wichtige Information: Wenn Sie die MCAL-Funktion setupSystemClock() zur Einstellung der System-Taktfrequenz verwenden, beachten Sie unbedingt den mit !!!ACHTUNG!!! hervorgehobenen Hinweis im Artikel 01 - Takteinstellung beim STM32F446 mit der MCAL-Bibliothek!

19.05.2021:

Nun hat es mich erwischt! Nein, nicht Corona, sondern eine schlechte Rezension meines Buches bei Amazon! Da hat sich der Rezensent erlaubt, "Halbwissen" bei mir nicht auszuschließen, obwohl ich mehr als 30 Jahre Berufserfahrung im  Bereich der Programmierung von Mikrocontrollern habe. In der Tat: Der Rezensent läge richtig (Achtung: Konjuktiv!), wenn er mein Beispiel (siehe Listing 5.2) als nicht sonderlich glücklich bezeichnet hätte, denn ein "|="- bzw. "&="-Zugriff auf ein Register hat tatsächlich normalerweise einen Read-Modify-Write-Zugriff zur Folge: Insofern hätte ich tatsächlich besser einfache "="-Zuweisungen der Werte verwendet. Allerdings habe ich auf genau diesen Umstand auf den Seiten 97 bis 99 meines Buches (Abschnitt 5.2) ausdrücklich hingewiesen! Das einzige, was ich mir selbst hier vorwerfen kann, ist die etwas "schlampige" Realisierung des Beispiels.

Nun aber zum "Halbwissen": Offensichtlich sieht sich der Rezensent selber als absolute Koryphäe, denn sonst würde er sich nicht so abwertend über andere Menschen äußern (die er zudem nicht persönlich kennt!), wie er dies in seiner Rezension getan hat. Wenn er denn aber tatsächlich die absolute Koryphäe wäre, hätte er sicher bemerkt, dass das genannte BSRR-Register ein reines Write-Only-Register ist. Nun sollte er sich auch dazu äußern, wie man zuverlässig lesend auf ein Write-Only-Register zugreifen kann. Aber vermutlich ist dies ein unter allen Umständen zu wahrendes Geheimnis eben solcher Koryphäen.

Zum Thema "Separates Herunterladen der CMSIS":

Sicher, die CMSIS ist in den Firmware-Paketen enthalten (sonst wäre es ja auch keine Firmware!), und wie die Pfade gesetzt werden, habe ich ebenfalls beschrieben. Da besteht also überhaupt kein Unterschied zu der von diesem Rezensenten offensichtlich bevorzugten Vorgehensweise. Ich bevorzuge aber — begründet auf langjähriger Erfahrung — einen etwas anderen Weg. Wenn man in großen Teams arbeitet — bei der Softwareentwicklung im Automotive- oder Luftfahrtumfeld kommen hier sehr schnell Teamgrößen von 50, 60 100 und mehr Entwicklern zusammen, die sich geografisch sehr oft über den ganzen Erdball verteilen — wird man schnell feststellen, dass gemeinsam verwendete Bibliotheken zentral verwaltet und die einzelnen Entwickler keine Möglichkeit haben, die vorhandenen Bibliotheken zu verändern: Was bei einer solchen möglichen Änderung bei einem einzelnen Entwickler funktioniert, wird dann bei allen anderen vermutlich zu unerklärbarem Verhalten ihrer Software-Bestandteile führen! Die CMSIS wird sicherlich niemand ändern, ausgeschlossen ist dies aber nicht. Da ich aber im Verlauf des Buches zusätzlich die MCAL entwickele, die unmittelbar von der CMSIS abhängt, halte ich es für absolut sinnvoll, CMSIS und MCAL separat zu betrachten.

18.05.2021:

Die Initialisierung einer Hardware-Komponente ist häufig zeitkritisch, was im Datenblatt folgendermaßen beschrieben sein könnte: Nach einem Reset muss >= 5ms gewartet werden, bevor das nächste Kommando gesendet werden darf. Zu diesem Zweck habe ich den mcalSysTick-Teil der MCAL um die blockierende Delay-Funktion systickDelay() erweitert. Die Beschreibung der Funktion finden Sie im Abschnitt 04 - Systick-Timer (blockierend), die vollständige aktualisierte MCAL-Bibliothek unter https://gitlab.com/rjesse/mcal-stm.git.

29.04.2021:

Vereinzelt wurde ich von Lesern kontaktiert, die Schwierigkeiten beim Kompilieren der CMSIS-Bibliothek hatten und mit vielen Fehlermeldungen "bombardiert" wurden. Unter 00 - Wichtige Information finden Sie Hinweise, wie die Fehlermeldungen vermieden werden können.

22.04.2021:

MCAL-STM: Kein großes Projekt ohne Tippfehler! In der Datei mcalI2C.c hatte ich in den Zeilen 287/288 versehentlich I2C1->TRISE = 0x0011; bzw. I2C1->CR1 |= I2C_CR1_PE; geschrieben. Korrekterweise muss es natürlich i2c->TRISE = 0x11; und i2c->CR1 |= I2C_CR1_PE; heißen. Der Fehler ist bereits korrigiert, die korrigierte Version der MCAL-STM ist bereits auf https://gitlab.com/rjesse/mcal-stm.git verfügbar. 

21.04.2021:

Heute teile ich Ihnen die Lösungen für die beiden Probleme mit, die ich in den Hinweistexten zu den jeweiligen Kapiteln bereits zugesagt habe.

  1. Unter dem Link 02 - Serielle Datenübertragung mit USART2 finden Sie die versprochene korrigierte Version des USART-Demoprojekts.
  2. Unter dem Link 03 - DAC-Problem finden Sie zudem die Lösung für das DAC-Problem: Dort entsprach das reale Ausgangssignal von Kanal 2 nicht dem erwarteten Signal.

15.04.2021:

Bugfix in timerEnableOutputComparePreload() und timerDisableOutputComparePreload() durchgeführt. Wurde als Parameter TIMIO_CH4 angegeben, so wirkte sich dies aufgrund von Copy & Paste auf TIMIO_CH3 aus. Die neue Version der MCAL-STM finden Sie wieder unter https://gitlab.com/rjesse/mcal-stm.git.

10.04.2021:

Ich habe heute das GitLab-Repository offiziell freigeschaltet. Der Link lautet https://gitlab.com/rjesse/mcal-stm.git. Hinweis: Die Bibliothek MCAL-STM ist noch nicht final, und ich werde sie — mit Ihrer Unterstützung (?) — ständig erweitern und pflegen.

18.03.2021:

Seit der Abgabe des Manuskripts an den Verlag habe ich die MCAL-Bibliothek erheblich erweitert. Unter 01 - Takteinstellung beim STM32F446 mit der MCAL-Bibliothek finden Sie eine Anleitung, wie Sie die Taktfrequenz des Mikrocontrollers jetzt einstellen können. Diese Erweiterung ist erheblich einfacher als die Beschreibung, die ich im Buch verwendet habe.

15.03.2021:

Da die Datei mcalTimer.c inzwischen weit mehr als 50 Funktionen umfasst, erschien sie mir nicht mehr übersichtlich genug. Ich habe diesen Teil daher vollständig umstrukturiert. Eine kurze Beschreibung der Änderungen finden Sie auf der Download-Seite STM32F446 Beispielprojekte.

08.03.2021:

Zwei neue Funktionen in mcalTimer.c/mcalTimer.h aufgenommen. Es handelt sich hierbei um die Funktionen

  • timerEnableOutputComparePreload(TIM_TypeDef *tim, TIMER_CHANNEL_NUM_t chn) und
  • timerDisableOutputComparePreload(TIM_TypeDef *tim, TIMER_CHANNEL_NUM_t chn).

Sie aktivieren bzw. deaktivieren den Preload-Mechanismus im Output-Compare-Mode. STM32F446 Beispielprojekte

07.03.2021:

Kaum ist das Buch erschienen, hat mich ein aufmerksamer Leser bereits auf den ersten Fehler hingewiesen: In der MCAL-STM-Bibliothek war in der Funktion gpioGetPinState() ein 'Bug', den ich umgehend korrigiert habe. Die neue Version der MCAL-STM finden Sie unter dem folgenden Link: STM32F446 Beispielprojekte.

03.03.2021:

Inzwischen ist mein neues Buch „STM32: ARM-Mikrocontroller programmieren für Embedded Systems“ im Handel erhältlich. Getreu dem Untertitel „Das umfassende Praxisbuch“ habe ich besonders den praktischen Einsatz in den Fokus gerückt. Doch was bedeutet dies für Sie? Das wichtigste zuerst: In zahlreichen Beispielen werden — mit Ausnahme einiger Peripheriekomponenten, wie z.B. CAN, SAI oder das Kamera-Interface — nach und nach alle Komponenten eingeführt und anhand von Beispielen in Form von Miniprojekten erklärt. Die Beispielprojekte finden Sie unter dem folgenden Link: STM32F446 Beispielprojekte.

08.11.2020:

In Kürze erscheint mein neues Buch über den Mikrocontroller STM32F446. Für die Programmierung wurde ausschließlich CMSIS verwendet, auf den Einsatz herstellerspezifischer Bibliotheken, wie z.B. der HAL-Bibliothek von STM, wurde vollständig verzichtet. Stattdessen wird im Verlauf des Buches eine eigene Bibliothek entwickelt, der ich den Namen MCAL gegeben habe. MCAL dient als Abkürzung von Microcontroller Abstraction Layer. MCAL wird auch nach dem Erscheinen des Buches ständig weiterentwickelt. Die MCAL basiert vollständig auf den Bezeichnungen (Definitionen und Registernamen), die STM in den Referenzhandbüchern (hier: STM32F446) verwendet.

Den Sourcecode und die Dokumentation der Bibliothek können Sie kostenlos auch für kommerzielle Projekte verwenden! Ich bitte aber darum, Änderungen und Erweiterungen vor einer Weitergabe an Dritte mit mir abzusprechen.

Hinweis:

Obwohl es sich bei den STM32F4xx-Mikrocontrollern um Arm Cortex-M4-MCs handelt, ist dieses Buch ausdrücklich NICHT als ein Cortex-M4-Buch zu verstehen: Wenn Sie ein allgemeines Cortex-M4-Buch erwarten bzw. benötigen, sollten Sie auf ein anderes Buch zurückgreifen (z.B. von Joseph Yiu).

25.07.2018:

Geringfügige Erweiterungen im Abschnitt Elektronik-Grundlagen.

29.08.2017:

Änderung der Adresse im Impressum.

17.04.2017:

Im Beispiel chardev in Kapitel 9 hat sich ein Fehler eingeschlichen. Beachten Sie bitte den entsprechenden Hinweis auf der Errata-Seite.

07.02.2017:

In der Rubrik "Tipps" finden Sie einen Hinweis zu dem Script imagetool-uncompressed.py, dessen Verwendung bisher optional war. Beim Raspberry Pi 3 führte die Verwendung dieses Scripts bei einem Leser sogar dazu, dass der Kernel nicht mehr kompilierbar war!

06.01.2017:

KDevelop 5.0.3 als AppImage verfügbar. Nähere Informationen finden Sie hier: KDevelop.

05.01.2017:

Änderung des Tastaturlayouts für die bash-Shell bei Raspbian-Versionen mit der neuen Benutzeroberfläche Pixel. Details finden Sie hier: Tipps.

04.01.2017:

Gelöst: Probleme beim Zugriff auf USB-Geräte aus dem Gastsystem unter VirtualBox 5.1.12. Siehe auch VirtualBox.

22.11.2016:

Ab sofort erfolgt der Zugriff auf diese Website verschlüsselt. Sollten Sie bisher über http://www.ralf-jesse.de auf diese Website zugegriffen haben, so erfolgt dies nun über https://www.ralf-jesse.de.

20.10.2016:

Neue Rubrik "Tipps" eingeführt.

Der erste Beitrag befasst sich mit dem Thema "Versorgungsspannung zu niedrig", was durch ein kleines buntes Quadrat (ähnlich dem Rainbow-Screen) in der rechten oberen Ecke des Bildschirms angezeigt wird.

25.09.2016:

Die Sektion "Errata --> Embedded Linux" wurde aufgrund eines Leserhinweises um eine Abgrenzung zwischen Mikrocontroller und SoC ergänzt.

21.08.2016:

Erweiterung der Errata-Sektion. Hier wird eine Komfortfunktion beschrieben, die die Verwendung der Shellscripte domake und mktest überflüssig macht.

11.08.2016:

Der Artikel Induktive Lasten wurde erweitert.

24.07.2016:

Abschnitt "Elektronik-Grundlagen": Schalten induktiver Lasten (Induktive Lasten)

23.07.2016:

Abschnitt Tools -> Entwicklungsumgebungen: KDevelop abgeschlossen.

22.07.2016:

Abschnitt Tools -> Entwicklungsumgebungen: KDevelop begonnen

21.07.2016:

Abschnitt "Elektronik-Grundlagen": Schalten kleinerer und größerer Ströme

19.07.2016:

Abschnitt "Elektronik-Grundlagen": Schalten kleinerer und größerer Ströme

15.06.2016:

Im Menü Tools wurde unter Entwicklungsumgebungen (IDEs) die (fast) vollständige Konfiguration von Code::Blocks hinzugefügt. Hier fehlt jetzt nur die Konfiguration des Cross-Debuggers, die aber im gleichen Menü unter Debugger verfügbar ist.

02.06.2016:

Im Menü "Tools" wurde der Eintrag "Debugging" freigeschaltet. Neben einer kurzen Beschreibung bietet die verlinkte Webseite Debugger die Möglichkeit zum kostenlosen Download eines Extrakapitels in zwei Teilen. Hiermit möchte ich zwei Ziele erreichen:

  • Lesern der ersten Auflage des Buches möchte ich hiermit meinen Dank für den Kauf des Buches aussprechen: Sie sollen nicht Opfer meiner "Schlampigkeit" bzw. Vergesslichkeit sein ;-).
  • Noch unentschlossenen Interessenten biete ich hiermit ein Probekapitel an, damit Sie meinen Schreibstil kennen lernen und damit besser bewerten können, ob sich ein Kauf des Gesamtwerks für sie lohnt.

29.05.2016:

Kurzbeschreibung von Code::Blocks hinzugefügt (Code::Blocks).

"Verbindung" herstellen zwischen Code::Blocks und der Cross-Toolchain.

19.05.2016:

Seite 115 im Buch "Embedded Linux". Dort wird der Download der Linaro-Cross-Toolchain von der Website http://gnutoolchains.com/raspberry empfohlen. Dieser Link ist anscheinend nicht mehr gültig. Der Download kann nun von https://github.com/raspberrypi/tools erfolgen. Der Download erfolgt mit dem Kommando

git clone https://github.com/raspberrypi/tools/* .

Der abschließende Punkt ist kein Satzzeichen! Er bestimmt das Verzeichnis, in dem das Kommando ausgeführt wird, als Zielverzeichnis für den Download.

Beachten Sie auch den entsprechenden Punkt in der Errata-Sektion.

-----

Download und Installation der Linaro-Toolchain beschrieben

-----

Neu aufgenommen --> Tools --> Toolchains

08.05.2016:

Layout modernisiert

15.04.2016:

Einfache Halbleiter, Dioden fortgesetzt und abgeschlossen

14.04.2016:

Einfache Halbleiter, Dioden angefangen

13.04.2016:

Arbeit, Leistung und Wirkungsgrad fertiggestellt

12.04.2016:

Arbeit, Leistung und Wirkungsgrad angefangen

Errata nochmals erweitert

11.04.2016:

Errata erweitert für Kapitel 5 und 6

29.03.2016:

Errata

28.03.2016:

Kirchhoffsche Gesetze

26.03.2016:

Ohmsches Gesetz

Leitfähigkeit/Temperatureinfluss

Messen von Strom und Spannung

24.03.2016:

Projekte/Downloads (Beispielprojekte zum Herunterladen)

23.03.2016:

Der Gleichstromkreis