E-Book, Deutsch, 432 Seiten
Reihe: mitp Professional
Jesse STM32
2. Auflage 2022
ISBN: 978-3-7475-0454-3
Verlag: mitp Verlags GmbH & Co.KG
Format: EPUB
Kopierschutz: 6 - ePub Watermark
Das umfassende Praxisbuch.ARM-Mikrocontroller programmieren für Embedded Systems
E-Book, Deutsch, 432 Seiten
Reihe: mitp Professional
ISBN: 978-3-7475-0454-3
Verlag: mitp Verlags GmbH & Co.KG
Format: EPUB
Kopierschutz: 6 - ePub Watermark
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
Zielgruppe
Softwareentwickler für Embedded Systems, Maker, Elektronik-Bastler
Autoren/Hrsg.
Weitere Infos & Material
Kapitel 1:
STM32F4xx-Mikrocontroller
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. 1.1 Überblick über die 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. 1.2 Der STM32F446
Der STM32F446 ist in verschiedenen Ausführungsvarianten erhältlich. Im folgenden Abschnitt werden diese näher beschrieben. 1.2.1 Varianten des STM32F446
Tabelle 1.1 zeigt die Ausführungen und ihre Unterschiede: Tabelle 1.1: Ausstattung des STM32F446 Peripheriekomponenten STM32F446 MC ME RC RE VC VE ZC ZE Flash in KByte 256 512 256 512 256 512 256 512 SRAM in KByte System 128 (112 + 16) Backup 4 Controller für flexiblen Speicher (FMC) Nein Ja Timer GP 10 Advanced 2 Basic 2 Kommunikations-Interfaces SPI/I²S 4/3 (simplex) I²C 4/1 davon als FMP+ (Fast mode Plus) UART/USART 2/4 USB OTG FS Ja, 6 Endpunkte USB OTG HS Ja, 8 Endpunkte CAN 2 SAI 2 SDIO Ja SPDIF-Rx 1 HDMI-CEC 1 Quad SPI 1 Kamera-Interface Ja GPIOs 63 50 81 114 12-Bit-ADC (Anzahl/Kanäle) 3/14 3/16 3/16 3/24 12-Bit-DAC Ja, 2 Kanäle Maximale Taktfrequenz 180 MHz Betriebsspannung 1,8 bis 3,6 V Gehäuse und Pins WLCSP81 LQFP64 LQFP100 LQFP144U
FBGA144 Wie Sie Tabelle 1.1 entnehmen können, sind allein vom STM32F446 acht Ausführungen erhältlich, die durch nachgestellte Buchstaben und Ziffern unterschieden werden. Abbildung 1.2 zeigt, wie die Bezeichnungen bei STM interpretiert werden. Abb. 1.2: Produktbezeichnungen der STM32F4xx-Mikrocontroller Hinweis Möchten Sie einen anderen Mikrocontroller aus der STM32F4xx-Familie verwenden, finden Sie die entsprechenden Tabellen auf der Webseite https://www.st.com/en/microcontrollers-microprocessors/stm32f4-series.html im Menü Resources. 1.2.2 Speicherbelegung/Memory-Mapping
Der adressierbare Speicher ist in acht Blöcke mit einer Größe von jeweils 512 MByte unterteilt, es können somit maximal 232 – 1 Byte = 4.294.967.296 Byte adressiert werden. Dieser Wert stellt aber nur das theoretische Maximum dar, tatsächlich verfügt keiner der genannten Mikrocontroller über derart viel Speicher, sodass die höchste adressierbare Speicherstelle deutlich kleiner ist. Abbildung 1.3 zeigt eine grobe Unterteilung dieser Blöcke und der hier verfügbaren Funktionen. Im rechten Teil von Abbildung 1.3 sehen Sie einige Abkürzungen, wie z.B. AHB1/2/3 und APB1/2: Was es damit auf sich hat, wird weiter unten in Abschnitt 1.2.4 erläutert. Abb. 1.3: Speicherbereiche (Memory-Mapping), aus dem Datenblatt entnommen Die folgenden Tabellen zeigen die verfügbaren Peripheriekomponenten, den jeweils genutzten Bus, über den sie angesprochen werden, sowie die Adressen, die den Speicherbereichen und Registern zugeordnet sind. Wichtig Zwei Adressbereiche möchte ich vorab besonders hervorheben: Sie sind zwar in Abbildung 1.3 angegeben, fallen dort aber nicht besonders deutlich auf: Es handelt sich um den Flashspeicher (ab Adresse 0x0800 0000) und das SRAM (ab Adresse 0x2000 0000). Die Größe des Speichers variiert bei den verschiedenen Mikrocontrollern. Hinweis Die Adressbereiche in den folgenden Tabellen sind nach den jeweiligen Bussen (Cortex-M4, AHB und APB) sortiert. Dies führt dazu, dass die Blockgrenzen in Abbildung 1.2 quasi »ungültig« werden. Darüber hinaus sind große Adressbereiche im Speicherraum reserviert, sodass sie nicht genutzt werden können. Reservierte Speicherbereiche wurden in den folgenden Tabellen nicht aufgeführt. Tabelle 1.2: Adressbereich von Cortex-M4-internen Komponenten Bus Adressgrenzbereiche Komponente(n) Cortex-M4-interner Bus 0xE000 0000–0xE00F FFFF Cortex-M4-interne Komponenten (z.B. CPU-Kern, NVIC, Floating-Point-Unit (FPU) usw.) Tabelle 1.3: Komponentenadressen, die über den AHB3-Bus angesprochen werden Bus Adressbereiche Komponente(n) AHB3 0xD000 0000–0xDFFF FFFF FMC Bank 6 0xC000 0000–0xCFFF FFFF FMC Bank 5 ...