Class Central is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

Coursera

Bare-Metal Embedded C Programming

Packt via Coursera

Overview

Google, IBM & Meta Certificates – 40% Off a Year
One Coursera Plus subscription covers most Professional Certificates on Coursera. 40% off a full year through Dec 2.
Unlock All Certificates
This book helps you uncover the world of Arm-based microcontroller firmware development, equipping you to decode datasheets, expertly manipulate registers, and autonomously craft optimized code. This course equips learners with the essential skills to develop firmware for embedded systems using Arm microcontrollers. It emphasizes practical, hands-on learning to build confidence in decoding hardware documentation and writing optimized code. Designed for both engineers and software developers, it fosters independent expertise in embedded systems development. This course is ideal for experienced engineers looking to deepen their understanding of firmware development and software developers transitioning into embedded systems. It assumes basic programming knowledge and aims to build independent, confident firmware development skills. This book is designed with a hands-on, practical approach. It empowers readers to learn by doing, guiding them to decode microcontroller datasheets, manipulate registers, and craft firmware from scratch. It prioritizes self-reliance and in-depth understanding, reducing reliance on third-party libraries and fostering independent expertise. This course is based on Bare-Metal Embedded C Programming, by Israel Gbati. Packt is one of the world's most prolific publishers of cutting-edge technical content. For over two decades we've made it our mission to curate and publish the knowledge of only the very best technical experts. We focus on real-world courses that help our customers get the job done, with coverage that extends across a wide range of established and cutting-edge technical topics. If you're an individual or an organisation that embraces learning by doing, Packt is the perfect fit for you.

Syllabus

  • Setting Up the Tools of the Trade
    • This module equips learners with the foundational tools and knowledge needed for firmware development. It covers setting up OpenOCD, understanding microcontroller documentation, and interacting with hardware registers directly. By the end, students will be able to configure their development environment and interpret technical specifications.
  • Constructing Peripheral Registers from Memory Addresses
    • This module covers the fundamentals of bare-metal programming, focusing on constructing peripheral registers from memory addresses, configuring microcontroller peripherals, and manipulating GPIO registers. Learners will gain hands-on skills in using assembly language, understanding clock gating, and working with volatile variables in embedded systems.
  • Understanding the Build Process and Exploring the GNU Toolchain
    • This module provides an in-depth look at the firmware build process using the GNU Arm Toolchain, covering essential tools, compiler flags, and techniques for optimizing embedded systems. Learners will explore how to analyze and manage firmware size and understand the role of OpenOCD in programming and debugging microcontrollers.
  • Developing the Linker Script and Startup File
    • This module explores the essential concepts of microcontroller memory models, linker scripts, and startup files. Learners will gain an understanding of how memory is mapped and initialized in embedded systems, and how to configure linker scripts to manage memory regions effectively.
  • The "Make" Build System
    • This module covers the fundamental concepts of the 'make' build system, including how to write and structure Makefiles, understand target-prerequisite-recipe relationships, and optimize build processes for firmware development. Learners will gain practical skills in automating software compilation and linking.
  • The Common Microcontroller Software Interface Standard (CMSIS)
    • This module covers the fundamentals of the CMSIS standard, including how to define peripheral registers using C structures, understand key CMSIS components, and integrate CMSIS files into a project for improved code portability and efficiency.
  • The General-Purpose Input/Output (GPIO) Peripheral
    • This module provides an in-depth look at the General-Purpose Input/Output (GPIO) peripheral in STM32 microcontrollers, covering register configurations, alternate functions, and output driver implementation. Learners will gain practical knowledge on how to interface and control microcontroller pins effectively.
  • System Tick (SysTick) Timer
    • This module provides an in-depth look at the SysTick timer, covering its functionality, configuration, and driver development for Arm Cortex-M microcontrollers. Learners will gain practical knowledge on implementing timing control and system monitoring in embedded systems.
  • General-Purpose Timers (TIM)
    • This module explores the functionality of STM32 general-purpose timers, their configuration through prescaling, and their use in real-time applications such as delay generation and event triggering. Learners will gain hands-on insight into timer operations and driver development for embedded systems.
  • The Universal Asynchronous Receiver/Transmitter Protocol
    • This module provides a comprehensive overview of the UART protocol, including its operation, implementation using STM32 registers, and practical applications in embedded systems. Learners will gain hands-on knowledge of how to develop UART drivers and understand its role in microcontroller communication.
  • Analog-to-Digital Converter (ADC)
    • This module provides an in-depth look at analog-to-digital converters (ADCs), focusing on their operation, configuration, and integration within STM32F4 systems. Learners will gain practical knowledge on how to set up ADC channels, understand the role of VREF, and work with key ADC registers and GPIO pins for analog signal acquisition.
  • Serial Peripheral Interface (SPI)
    • This module provides a comprehensive overview of the SPI protocol, including its master-slave architecture, clock phase configurations, and practical implementation techniques. Learners will gain hands-on experience with STM32 register configuration and bare-metal driver development for embedded systems communication.
  • Inter-Integrated Circuit (I2C)
    • This module provides a deep dive into the I2C communication protocol, covering its operation, addressing methods, and implementation in STM32 microcontrollers. Learners will gain hands-on experience configuring I2C peripherals and writing functions for data transmission and reception in embedded systems.
  • External Interrupts and Events (EXTI)
    • This module covers the implementation of external interrupts and events in STM32 microcontrollers, including NVIC and IVT configuration, EXTI register analysis, and the role of ISRs in real-time event handling. Learners will gain practical skills in configuring interrupt-driven systems and improving communication between microcontrollers and peripherals.
  • The Real-Time Clock (RTC)
    • This module provides an in-depth exploration of the Real-Time Clock (RTC) peripheral, focusing on its configuration, register analysis, and driver development. Learners will gain hands-on knowledge of how to implement accurate timekeeping in embedded systems using STM32 microcontrollers. The module also covers practical aspects like BCD encoding and signal output control.
  • Independent Watchdog (IWDG)
    • This module explores the fundamentals of the Independent Watchdog (IWDG) timer and its role in enhancing system reliability. It covers configuration, register setup, driver development, and the use of external WDTs for added flexibility and redundancy in embedded systems. Learners will gain practical skills in implementing watchdog timers for fault tolerance.
  • Direct Memory Access (DMA)
    • This module explores the concept of Direct Memory Access (DMA) in embedded systems, focusing on its role in optimizing data transfers and reducing CPU load. It covers practical implementation techniques, register configurations, and interrupt handling in real-world scenarios like audio streaming. Learners will gain hands-on knowledge of how to develop and manage DMA-driven systems.
  • Power Management and Energy Efficiency in Embedded Systems
    • This module explores techniques for optimizing power consumption in embedded systems, with a focus on STM32F4 low-power modes, wake-up triggers, and driver development. Learners will gain practical knowledge on implementing power-saving strategies to extend battery life and improve system efficiency.

Taught by

Packt - Course Instructors

Reviews

Start your review of Bare-Metal Embedded C Programming

Never Stop Learning.

Get personalized course recommendations, track subjects and courses with reminders, and more.

Someone learning on their laptop while sitting on the floor.