STM32 -- ARM-Microcontroller programmieren für Embedded Systems - Das umfassende Praxisbuch

Book description

  • 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

Mit diesem Buch erhalten Sie einen umfassenden Praxiseinstieg für 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).

Die Programmierung dieser Komponenten zeigt der Autor anhand einfacher praktischer Anwendungsbeispiele wie z.B. die Abfrage von Uhrzeit und Datum von einer externen RTC (über I2C) sowie deren Anzeige über SPI auf einfachen Displays. Dabei entsteht im Verlauf des Buchs eine Bibliothek, deren Funktionen für eigene Projekte auf einfache Weise eingesetzt werden können.

Als Entwicklungsumgebung wird STM32CubeIDE von STM verwendet. Außerdem kommt das Evaluierungsboard NUCLEO-64 für den STM32F446 zum Einsatz. Der Autor legt Wert darauf, alles »bare-metal« zu programmieren und verzichtet darauf, die HAL-Bibliothek einzusetzen. Diese Vorgehensweise erleichtert Ihnen auch den Umstieg auf Mikrocontroller anderer Hersteller.

Grundlegende Kenntnisse der Programmiersprache C werden vorausgesetzt. Dennoch wird auf einige Aspekte eingegangen, die in der Bare-metal-Programmierung von Mikrocontrollern möglicherweise wichtiger sind als in der Entwicklung herkömmlicher PC-basierter Software.

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

Table of contents

  1. Impressum
  2. Einleitung
    1. Warum STM32F4?
    2. Zielgruppe dieses Buchs
    3. Voraussetzungen
    4. Aufbau des Buchs
  3. Teil I: Grundlagen
  4. Kapitel 1: Die Hardware des STM32F4xx-Mikrocontrollers
    1. 1.1 Überblick über die STM32F4xx-Familie
    2. 1.2 Der STM32F446
      1. 1.2.1 Varianten des STM32F446
      2. 1.2.2 Speicherbelegung/Memory-Mapping
      3. 1.2.3 Interner Aufbau des STM32F446
      4. 1.2.4 Bussysteme des STM32F446
  5. Kapitel 2: CMSIS und MCAL
    1. 2.1 CMSIS-Bibliothek beschaffen und erstellen
    2. 2.2 Aufräumarbeiten
    3. 2.3 Erstellen der Bibliothek
    4. 2.4 Fertigstellen der CMSIS-Bibliothek
      1. 2.4.1 Build-Variable für das CMSIS-Verzeichnis
      2. 2.4.2 Einstellen von Suchpfaden
      3. 2.4.3 Abschlussarbeiten an der CMSIS-Bibliothek
      4. 2.4.4 Verwenden von CMSIS in eigenen Projekten
      5. 2.4.5 Bezeichnungstechniken in CMSIS von STM
    5. 2.5 Der Bootvorgang
      1. 2.5.1 Der Reset-Handler
      2. 2.5.2 SystemInit
      3. 2.5.3 Die Erzeugung des Taktsignals
      4. 2.5.4 Linkerscripts
    6. 2.6 Aufbau der Headerdatei(en)
      1. 2.6.1 Orientierung in stm32f446xx.h
    7. 2.7 MCAL
  6. Kapitel 3: Embedded C vs. Standard C
  7. Kapitel 4: RCC, SYSCFG und SCB
    1. 4.1 Reset and Clock Control (RCC)
      1. 4.1.1 Reset
      2. 4.1.2 Clock Control
      3. 4.1.3 Ein erstes einfaches Projekt
      4. 4.1.4 Weitere wichtige Aufgaben des RCC
    2. 4.2 System Configuration Controller (SYSCFG)
    3. 4.3 System Control Block (SCB)
  8. Teil II: Kernkomponenten der STM32F4xx-Mikrocontroller
  9. Kapitel 5: GPIO: General Purpose Input/Output
    1. 5.1 Features und Grenzdaten
    2. 5.2 GPIO-Register
    3. 5.3 Zwei einfache Beispiele
      1. 5.3.1 Rechtecksignal mit dem ODR-Register
      2. 5.3.2 Rechtecksignal mit BSRR
  10. Kapitel 6: Polling, Interrupts und Exceptions
    1. 6.1 Allgemeines zu Polling und Interrupts
      1. 6.1.1 Polling
      2. 6.1.2 Interrupts
    2. 6.2 Interrupts beherrschen
      1. 6.2.1 Maskierbare und nicht-maskierbare Interrupts
      2. 6.2.2 Globale Interrupts
      3. 6.2.3 Der Nested Vector Interrupt Controller NVIC
    3. 6.3 Externe Interrupts
      1. 6.3.1 External Interrupt/Event Controller (EXTI)
      2. 6.3.2 Beispiel zu externen Interrupts
      3. 6.3.3 Erkennung mehrerer externer Interrupts
    4. 6.4 Exceptions
  11. Kapitel 7: Alternative GPIO-Funktionen
    1. 7.1 Wiederholung
    2. 7.2 Aktivieren alternativer Funktionen
    3. 7.3 Auswahl alternativer Funktionen
  12. Kapitel 8: System Tick Timer
    1. 8.1 Verwendung des SysTick-Timers
    2. 8.2 Steuerung mehrerer Funktionen
    3. 8.3 Steuerung mehrerer Funktionen: Ein verbesserter Ansatz
    4. 8.4 Die MCAL-Version des Projekts Kap08-SysTick-04
  13. Kapitel 9: Timer/Counter (SysTick und GP-Timer)
    1. 9.1 Der SysTick-Timer
      1. 9.1.1 Das SysTick Control and Status Register (CTRL)
      2. 9.1.2 Das SysTick Value Register (VAL)
      3. 9.1.3 Das SysTick Load Register (LOAD)
      4. 9.1.4 Das SysTick Calibration Register (CALIB)
    2. 9.2 Allgemeines zu Timern und Countern
    3. 9.3 Basic Time‌r TIM6 und TIM7
      1. 9.3.1 TIM6/TIM7 Control Register 1/2 (TIMx-CR1 und TIMxCR2)
      2. 9.3.2 TIM6/TIM7 DMA/Interrupt Enable Register (TIMx_DIER)
      3. 9.3.3 TIM6/TIM7 Status Register (TIMx_SR)
      4. 9.3.4 TIM6/7 Event Generation Register (TIMx_EGR)
      5. 9.3.5 TIM6/TIM7 Counter (TIMx_CNT)
      6. 9.3.6 TIM6/TIM7 Prescaler (TIMx_PSC)
      7. 9.3.7 TIM6/TIM7 Auto-Reload Register (TIMx_ARR)
      8. 9.3.8 Beispiel mit Basic Timer TIM6
    4. 9.4 Prescaler (Vorteiler) der Busse
  14. Kapitel 10: General-Purpose Timer (GP-Timer)
    1. 10.1 GP-Timer, Teil 1: TIM9 bis TIM14
      1. 10.1.1 Register der GP-Timer TIM9 bis TIM14
      2. 10.1.2 Beispiel 1 zum Einsatz von TIM12
      3. 10.1.3 Beispiel 2 zum Einsatz von TIM12
    2. 10.2 GP-Timer, Teil 2: TIM2 bis TIM5
      1. 10.2.1 Einschub: Pulsweitenmodulation (PWM)
      2. 10.2.2 Beispiel: Dimmen einer LED mittels PWM
  15. Kapitel 11: Advanced-Control Timer
    1. 11.1 Neue Register der Advanced-Control Timer
    2. 11.2 Einschub: Schalten induktiver Lasten
    3. 11.3 Beispiel zur Totzeitgenerierung mit dem STM32F446
      1. 11.3.1 Das Projekt Kap11-ACTIM-DeadTime
  16. Kapitel 12: Digital-Analog-Konverter
    1. 12.1 Technische Verfahren der D/A-Wandlung
      1. 12.1.1 Die Parallelwandlung
      2. 12.1.2 Das Zählverfahren
      3. 12.1.3 Das R-2R-Verfahren
    2. 12.2 DACs in der STM32F4xx-Familie
      1. 12.2.1 Datenhalteregister
      2. 12.2.2 Datenformate
    3. 12.3 Die Register des DAC
    4. 12.4 Ein einfaches Anwendungsbeispiel
    5. 12.5 Tipps für eigene Anwendungen
  17. Kapitel 13: Analog-Digital-Wandlung
    1. 13.1 ADCs in der STM-Familie
    2. 13.2 Register in den STM-ADCs
    3. 13.3 Anwendungsbeispiel
  18. Teil III: Serielle Schnittstellen
  19. Kapitel 14: Serielle Kommunikation
    1. 14.1 Grundlegende Begriffe
      1. 14.1.1 Kommunikationsrichtungen
      2. 14.1.2 Aufbau der Daten
      3. 14.1.3 Datenpegel
      4. 14.1.4 Übertragungsgeschwindigkeit
      5. 14.1.5 Übertragungsprotokolle
      6. 14.1.6 Asynchrone vs. synchrone Datenübertragung
    2. 14.2 Ausführungsformen einfacher RS-232-Schnittstellen
  20. Kapitel 15: UARTs und USARTs
    1. 15.1 Was sind UARTs und USARTs?
      1. 15.1.1 Die USART-/UART-Register
      2. 15.1.2 Empfangen und Senden von Daten
  21. Kapitel 16: Inter-Integrated Circuit I²C
    1. 16.1 Die ursprüngliche Idee hinter I²C
    2. 16.2 Prinzipieller Aufbau einer I²C-Schaltung
    3. 16.3 Betriebsarten/Protokoll von I²C
      1. 16.3.1 Vier Betriebsarten
      2. 16.3.2 Das I²C-Protokoll
    4. 16.4 I²C in der STM32F4xx-Familie
    5. 16.5 Ein Beispiel mit dem PCF8574
      1. 16.5.1 Der PCF8574
      2. 16.5.2 Das Programmlisting
    6. 16.6 Neue MCAL-Funktionen
    7. 16.7 Weitere Beispiele
      1. 16.7.1 Daten lesen von I²C-Komponenten
      2. 16.7.2 Anmerkungen zu den Beispielprojekten
  22. Kapitel 17: Serial Peripheral Interface SPI
    1. 17.1 Datentransfer in SPI-Interfaces
      1. 17.1.1 CPHA = 1
      2. 17.1.2 CPHA = 0
      3. 17.1.3 Anwendung von SPI
    2. 17.2 SPI-Register der STM32F4xx-Familie
      1. 17.2.1 SPI Control Register 1 und 2 (SPI_CR1, SPI_CR2)
      2. 17.2.2 Das SPI Status Register (SPI_SR)
      3. 17.2.3 Die Checksummen-Register (CRC)
      4. 17.2.4 Das SPI Data Register (SPI_DR)
    3. 17.3 Ein einfaches Beispiel mit dem MAX7219
      1. 17.3.1 Kurzbeschreibung des MAX7219
    4. 17.4 Eine kleine Übung
  23. Teil IV: Weitere Komponenten
  24. Kapitel 18: Direct Memory Access (DMA)
    1. 18.1 Funktionsweise
    2. 18.2 DMAC(s) in der STM32F4xx-Familie
      1. 18.2.1 Register der DMACs in der STM32F4xx-Familie
    3. 18.3 Beispiel: Memory → USART2 → PC mit DMA
      1. 18.3.1 Erläuterung der Funktionsweise
    4. 18.4 Beispiel: USART2 → PC mit DMA → USART2
      1. 18.4.1 »Probleme« von DMA
  25. Kapitel 19: Watchdog
    1. 19.1 Independent Watchdog (IWDG)
    2. 19.2 Window Watchdog (WWDG)
      1. 19.2.1 Funktionsweise
    3. 19.3 Debuggen und Watchdogs
  26. Teil V: Anhang
  27. Anhang A: Internetadressen und Literaturnachweise
    1. A.1 Literaturnachweise
    2. A.2 Infos zur STM32F4xx-Familie
    3. A.3 Programmierung in C
    4. A.4 Tastaturkürzel von STM32CubeIDE
    5. A.5 Internet-Tutorials
    6. A.6 Support
  28. Anhang C: Einführung in das Debuggen
    1. C.1 Debugger einrichten
    2. C.2 Variablen »beobachten«
    3. C.3 Anzeige von Prozessorregistern
    4. C.4 Anzeige von SRAM-Inhalten
    5. C.5 Vorsicht!
  29. Anhang B: Takteinstellung mit STM32CubeMX
    1. B.1 Möglichkeit 1
    2. B.2 Möglichkeit 2
  30. Anhang D: Funktionen der MCAL-Bibliothek
    1. D.1 General-Purpose Input/Output GPIO
    2. D.2 Externe Interrupts EXTI
    3. D.3 SysTick-Timer
    4. D.4 Basic-/GP-/Advanced-Control Timer
    5. D.5 UART/USART
    6. D.6 Systemfunktionen
    7. D.7 Inter-Integrated Circuit I²C
    8. D.8 Serial Peripheral Interface SPI
    9. D.9 Direct Memory Access DMA

Product information

  • Title: STM32 -- ARM-Microcontroller programmieren für Embedded Systems - Das umfassende Praxisbuch
  • Author(s): Ralf Jesse
  • Release date: February 2021
  • Publisher(s): mitp Verlag
  • ISBN: 9783747501931