Skip to content

Reference9 min read

Resources

This is the only page on the site with external links. Everything here is either an official source or a long-established project or community. Where a document lives behind a vendor’s product page, the link goes to that page and the note tells you which document to download.

  • STM32F407VG product page: The Documentation tab has the four documents you need: the datasheet, reference manual RM0090, programming manual PM0214 (the Cortex-M4 as ST implements it), and the errata sheet ES0182. The CAD Resources or tools section links the SVD file.
  • STM32F4 Discovery board page: The board user manual and schematics. The schematic tells you which pins are already wired to the LEDs, accelerometer, audio DAC, and USB.
  • STSW-LINK009 ST-Link USB driver: The Windows driver for the ST-Link probe on the Discovery board.
  • STM32CubeProgrammer: ST’s flashing and option-byte tool. Useful for inspecting and resetting read protection and option bytes.
  • cmsis_device_f4 on GitHub: ST’s official register headers (stm32f407xx.h) for the STM32F4. Compare them with the header you write in Memory-Mapped Registers in C.
  • STM32CubeF4 on GitHub: ST’s HAL, LL drivers, and examples. Worth reading to see how a vendor library is structured, and to borrow working configuration sequences.
  • C11 committee draft N1570: Effectively the C11 standard. When you need to know whether something is undefined behaviour, look it up here (Annex J lists them all).
  • ISO C working group WG14: Papers and drafts for newer standards, including C23.
  • cppreference C section: The fastest accurate reference for every library function, keyword, and the standard each feature arrived in.
  • SEI CERT C Coding Standard: Rules with compliant and non-compliant examples for integer overflow, buffer handling, and more. Free.
  • MISRA: Publisher of the MISRA C guidelines used in automotive, medical, and industrial firmware.
  • Modern C by Jens Gustedt: A rigorous, current book on C, freely downloadable from the author.
  • GCC online documentation: Every option, attribute, and builtin. The “ARM Options” and “Function Attributes” pages are the ones firmware engineers use most.
  • GNU binutils documentation: Manuals for as, objdump, objcopy, nm, readelf, and addr2line.
  • GNU ld manual: The reference for linker scripts: MEMORY, SECTIONS, AT>, KEEP, ASSERT. Read the “Linker Scripts” chapter end to end once.
  • GDB documentation: The full gdb manual, including remote debugging and the Python API.
  • GNU make manual: Pattern rules, automatic variables, and functions.
  • Newlib: The C library in the Arm toolchain, including the system call interface you retarget.
  • Picolibc on GitHub: A modern, smaller C library for embedded systems, an alternative to newlib.
  • FreeRTOS: Official site with the kernel documentation, API reference, and the free book “Mastering the FreeRTOS Real Time Kernel”.
  • FreeRTOS-Kernel on GitHub: The kernel source. portable/GCC/ARM_CM4F/port.c contains a production context switch worth reading line by line.
  • Zephyr Project documentation: Device tree, Kconfig, drivers, and the west build tool. The best documented open-source RTOS.
  • MCUboot documentation: Design of a secure bootloader: image format, slots, swap strategies, signing.
  • MCUboot on GitHub: Source and the imgtool signing script.
  • TinyUSB documentation: A portable USB device and host stack for microcontrollers, with CDC, HID, MSC, and DFU classes.
  • TinyUSB on GitHub: Source and examples, including STM32F4 board support.
  • LittleFS on GitHub: A power-loss resilient flash filesystem. Its DESIGN.md is an excellent explanation of flash-aware data structures.
  • FatFs: The standard small FAT filesystem module for SD cards and USB drives.
  • lwIP: The lightweight TCP/IP stack used in most MCU networking products.
  • Mbed TLS on GitHub: TLS and cryptography library sized for microcontrollers.
  • nanopb on GitHub: Protocol Buffers for C with static allocation.
  • Quantum Leaps: The QP frameworks for hierarchical state machines and active objects, with extensive free articles.
  • Renode: Antmicro’s full-system simulator. Models the STM32F4 Discovery used in this course.
  • Renode documentation: Monitor commands, platform descriptions, and Robot Framework testing.
  • Renode on GitHub: Source and the Releases page with installers for Windows, macOS, and Linux.
  • QEMU Arm system emulator documentation: The list of emulated Arm boards, including the STM32-based netduinoplus2.
  • OpenOCD: Home of the Open On-Chip Debugger, with the user guide and release downloads.
  • pyOCD: A Python-based alternative to OpenOCD for CMSIS-DAP and other probes, easy to script.
  • Cortex-Debug on GitHub: The VS Code extension used in this course; its wiki documents every launch.json option.
  • Visual Studio Code: The editor used in this course.
  • Compiler Explorer: See the assembly for any C snippet, for any compiler and flags, instantly.
  • MSYS2: Unix-like environment and package manager for Windows; the easiest way to get a host GCC there.
  • Homebrew: The macOS package manager used in Setting Up Your Toolchain.
  • Chocolatey: An alternative Windows package manager.
  • sigrok and PulseView: Open-source logic analyzer software that decodes UART, SPI, I2C, CAN, and more with cheap USB analyzers.
  • Cppcheck: Free static analyser for C, with a MISRA addon.
  • clang-tidy: Clang-based linter with checks for bugprone patterns and CERT rules.
  • Unity test framework on GitHub: Small C unit test framework used in this course.
  • CMock on GitHub: Generates mocks from C headers to pair with Unity.
  • libopencm3 on GitHub: A clean, open-source register-level library for many Cortex-M families. Good for comparing your drivers with an independent implementation.
  • FreeRTOS-Kernel: Read tasks.c, queue.c, and the Cortex-M4F port to see how a real RTOS is built.
  • Zephyr on GitHub: Production driver code for hundreds of boards, with device tree and Kconfig at scale.
  • MCUboot: A security-reviewed bootloader; read the swap and image validation code after Bootloaders and Firmware Update.
  • TinyUSB: A portable stack with a clear split between class drivers and hardware ports.
  • LittleFS: Compact, heavily commented, and built around power-fail safety.
  • Bootlin training materials: Free slides and labs for embedded Linux, kernel drivers, Yocto, and Buildroot.
  • Yocto Project: The industry-standard build system for custom embedded Linux distributions.
  • Buildroot: A simpler alternative for building small embedded Linux systems.

These are the books referenced in What Comes Next. Look them up by title and author; editions change.

BookAuthor(s)Why
The C Programming Language, 2nd ed.Kernighan and RitchieShort, precise, and still the best model of clear C writing
C Programming: A Modern Approach, 2nd ed.K. N. KingThe most thorough textbook for learning C properly, with exercises
Modern CJens GustedtRigorous and up to date with C17 and C23 (free, linked above)
Expert C Programming: Deep C SecretsPeter van der LindenDeclarations, linking, and the corners of C, told with war stories
Effective CRobert C. SeacordModern, security-focused C from a CERT C author
The Definitive Guide to ARM Cortex-M3 and Cortex-M4 ProcessorsJoseph YiuThe book on Cortex-M internals: exceptions, NVIC, MPU, low power
Making Embedded SystemsElecia WhitePractical firmware design and engineering judgement
Embedded Systems ArchitectureDaniele LacameraBare-metal Cortex-M from boot to networking and security
Real-Time Concepts for Embedded SystemsQing Li and Caroline YaoRTOS objects and design patterns explained clearly
Practical UML Statecharts in C/C++Miro SamekHierarchical state machines and active objects for embedded systems
Hacker’s DelightHenry S. WarrenBit manipulation tricks with proofs
Computer Systems: A Programmer’s PerspectiveBryant and O’HallaronHow programs map to machines: representation, assembly, linking, memory (book site)
  • Interrupt by Memfault: Deep, practical articles on Cortex-M faults, linker scripts, debugging, and firmware tooling. Some of the best free firmware writing anywhere.
  • Embedded Artistry: Articles and resources on embedded architecture, testing, and process.
  • Embedded.fm: A long-running podcast about embedded systems engineering, hosted by Elecia and Christopher White.
  • Jack Ganssle: Decades of articles on firmware engineering practice and his newsletter, The Embedded Muse.
  • r/embedded: An active community for questions, career advice, and project feedback.
  • EEVblog forum: Electronics-heavy community; the place to ask when the problem might be the hardware.
  • The Embedded Rust Book: How Rust is used on Cortex-M. Worth knowing about even if you work in C.
  • Pro Git: The free official Git book. Firmware teams live and die by version control discipline.