We may earn an affiliate commission when you visit our partners.
Course image
BHM Engineering Academy, EmbeddedExpertIO ., and Israel Gbati

Welcome to the ARM Assembly Programming Ground Up™ 2 course.

With a programming based approach, this course is designed to give you a solid foundation in bare-metal firmware development for  ARM-based microcontrollers . The goal of this course is to teach you how to navigate the microcontroller reference manual and datasheet to extract the right  information to professionally  build peripheral drivers and firmware. To achieve this goal, no libraries are used in this course, purely ARM Assembly Language.

Read more

Welcome to the ARM Assembly Programming Ground Up™ 2 course.

With a programming based approach, this course is designed to give you a solid foundation in bare-metal firmware development for  ARM-based microcontrollers . The goal of this course is to teach you how to navigate the microcontroller reference manual and datasheet to extract the right  information to professionally  build peripheral drivers and firmware. To achieve this goal, no libraries are used in this course, purely ARM Assembly Language.

By the end of this course you will be able configure microcontroller peripherals  like ADC, UART,PWM, GPIO, TIMERS,  etc.  You will also master the ARM architecture, ARM Instruction Set Architecture (ISA) and building professional embedded firmware in assembly for ARM processors.

                                   Specially Designed For People Who Hate Copy/Paste

Listen. If you don’t like “Copy/Paste” you’re not alone. I can’t stand it either. I’d literally rather have a piece of code that I wrote from scratch that doesn’t work than someone else’s working code I copied and pasted.

And that’s why I’ve spent months designing and recording this course in which I show you how to locate every single register used and the meaning of every hexadecimal value written into the register.

Some Highlights

Write ADC Drivers in Assembly Language

Write UART Drivers in Assembly Language

Write GPTM Drivers in Assembly Language

Write GPIO Drivers in Assembly Language

Master the ARM Instruction Set

Master the Thumb and Thumb-2 Instruction Sets

REMEMBER : I have no doubt you will love this course. Also it comes with a  FULL money back guarantee for 30 days.   So put simply, you really have nothing to loose and everything to gain.

Sign up and lets start toggling some register bits

Enroll now

What's inside

Learning objectives

  • Write firmware using only assembly code
  • Write analog-to-digital converter (adc) drivers using assembly code
  • Write pwm drivers using assembly code
  • Write uart drivers using assembly code
  • Write timer drivers using assembly code
  • Write interrupt drivers using assembly code

Syllabus

Introduction
Overview of ARM Cortex-M General Purpose Input/Output Module
Notice
STM32 General Purpose Input/Output(GPIO)
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Focuses on bare-metal firmware development for ARM-based microcontrollers, which is essential for embedded systems engineers working close to the hardware level
Teaches how to configure microcontroller peripherals like ADC, UART, PWM, GPIO, and Timers, which are fundamental skills for firmware developers
Covers the ARM Instruction Set Architecture (ISA) and building professional embedded firmware in assembly, which is valuable for assembly programmers
Emphasizes understanding microcontroller reference manuals and datasheets, which is crucial for embedded systems engineers designing custom hardware solutions
Uses STM32CubeIDE and Keil uVision 5, which are industry-standard IDEs, but students should ensure they have access to these tools and that they are compatible with their systems
Requires learners to write drivers from scratch in assembly, which may be challenging for those without prior experience in low-level programming or embedded systems

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Deep dive into arm assembly bare metal

According to learners, this course offers a deep dive into ARM assembly language, specifically focusing on bare-metal programming for microcontrollers like STM32 and TM4C. Many appreciate the course's commitment to building peripheral drivers from scratch, demonstrating a strong understanding of registers and hardware interactions. Students highlight the detailed explanations of the ARM instruction set and how to use datasheets, which helps them truly understand the underlying mechanics rather than relying on libraries. While seen as challenging and potentially difficult for absolute beginners or those without prior embedded C experience, the course is widely praised for providing a solid foundation in low-level embedded development.
Requires effort, not for the uninitiated.
"This course is definitely not for the faint of heart, it's very challenging but rewarding."
"You really need to dedicate time and effort to grasp the concepts, it's a steep learning curve."
"Assumes a certain level of prior technical background, maybe not absolute beginner friendly."
Knowledgeable guide through complex topics.
"The instructor clearly has a deep understanding of the subject matter."
"His explanations, while sometimes fast-paced, are technically accurate and detailed."
"You can tell this course is taught by someone with real-world experience."
Hands-on coding for essential peripherals.
"Writing drivers for GPIO, UART, and Timers in assembly was incredibly insightful."
"The practical coding examples make the abstract concepts concrete."
"Learned the assembly needed to control basic hardware components."
Gain insight into microcontroller inner workings.
"Finally, I understand how everything works under the hood without abstracting it away with layers of C code."
"The explanations of how registers control peripherals are very detailed and helpful."
"Shows exactly how to use reference manuals and datasheets to find the information needed."
Learn to program hardware registers directly.
"This course takes a true bare-metal approach, teaching you to interact directly with the hardware registers."
"I really appreciate that no libraries were used; it forces you to understand everything from scratch."
"Getting down to the register level in assembly is exactly what I needed to bridge gaps in my knowledge."
Potential challenges with software/hardware setup.
"Setting up the development environment (Keil/CubeIDE) and getting the right board can be a hurdle."
"Instructions for the specific hardware used in the demos might not match what every student has."
"Had some difficulty getting the examples to compile and run initially."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in ARM Assembly Language From Ground Up™ 2 with these activities:
Review Digital Logic Fundamentals
Strengthen your understanding of digital logic concepts, which are foundational to understanding how microcontrollers and assembly language work.
Browse courses on Digital Logic
Show steps
  • Review basic logic gates (AND, OR, NOT, XOR).
  • Practice converting between binary, decimal, and hexadecimal.
  • Study Boolean algebra and simplification techniques.
Create a Cheat Sheet for ARM Assembly Instructions
Reinforce your understanding of the ARM instruction set by creating a concise cheat sheet that summarizes the most commonly used instructions and their syntax.
Show steps
  • Identify the most important ARM instructions.
  • Summarize the syntax and purpose of each instruction.
  • Organize the cheat sheet for easy reference.
Read 'ARM Assembly Language: Fundamentals and Techniques'
Deepen your understanding of ARM assembly language with a dedicated textbook that provides detailed explanations and examples.
View Melania on Amazon
Show steps
  • Read the chapters covering the ARM instruction set.
  • Work through the example programs provided in the book.
  • Try modifying the examples to test your understanding.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Assembly Code Conversion Drills
Improve your ability to translate between C code and ARM assembly, a crucial skill for understanding how high-level code is executed at the hardware level.
Show steps
  • Take a simple C function.
  • Write the equivalent ARM assembly code.
  • Compare your solution to compiler output.
Explore 'Embedded Systems Architecture'
Gain a deeper understanding of the broader embedded systems context in which ARM assembly code is used.
Show steps
  • Read chapters on memory management and interrupt handling.
  • Relate the concepts to ARM assembly programming.
Implement a Simple Embedded System
Solidify your knowledge by building a small embedded system project using ARM assembly, such as controlling an LED or reading sensor data.
Show steps
  • Choose a simple embedded project (e.g., LED blink).
  • Write the assembly code to control the hardware.
  • Test and debug your code on a development board.
Contribute to an Open Source Embedded Project
Apply your ARM assembly skills to a real-world project by contributing to an open-source embedded system, gaining valuable experience and collaborating with other developers.
Show steps
  • Find an open-source embedded project on GitHub.
  • Identify a bug or feature to work on.
  • Contribute your code and documentation.

Career center

Learners who complete ARM Assembly Language From Ground Up™ 2 will develop knowledge and skills that may be useful to these careers:
Embedded Systems Engineer
An Embedded Systems Engineer designs, develops, and tests software and firmware for embedded systems. This role requires a deep understanding of microcontroller architecture and the ability to program at a low level. This course teaches you how to navigate microcontroller reference manuals and datasheets to extract the right information to build peripheral drivers and firmware, using ARM Assembly Language. You will gain experience configuring microcontroller peripherals like ADC, UART, PWM, GPIO, and TIMERS. This course helps build a strong foundation in the ARM Instruction Set Architecture, which the Embedded Systems Engineer will use daily, as they professionally build embedded firmware in assembly for ARM processors.
Firmware Engineer
A Firmware Engineer specializes in developing low-level software that controls hardware devices. This often involves working closely with microcontrollers and embedded systems. For a Firmware Engineer, this course provides hands-on experience in bare-metal firmware development for ARM-based microcontrollers, without relying on external libraries. The course focuses on mastering the ARM architecture and Instruction Set Architecture (ISA) to build professional firmware in assembly. A Firmware Engineer learns through this course how to configure microcontroller peripherals like ADC, UART, and GPIO. This experience directly applies to the Firmware Engineer's daily tasks of programming and debugging embedded systems.
Internet of Things Device Developer
An Internet of Things Device Developer creates software for connected devices. This involves programming microcontrollers to collect data, communicate over networks, and control actuators. This course would be very useful for an Internet of Things Device Developer by providing instruction in bare-metal firmware development for ARM-based microcontrollers using Assembly Language. Gaining experience writing drivers for peripherals like UART and ADC would be directly applicable to interfacing with sensors and communication modules in Internet of Things devices. By mastering the ARM Instruction Set, the Internet of Things Device Developer can optimize firmware for resource-constrained devices and build efficient, reliable systems.
Reverse Engineer
A Reverse Engineer analyzes software and hardware systems to understand their design and functionality, often without access to original source code or documentation. This course provides skills directly applicable to reverse engineering embedded systems. This is because a Reverse Engineer will benefit from a deep understanding of ARM Assembly Language and microcontroller architecture to disassemble and analyze firmware images. The course's focus on writing drivers and understanding peripheral configuration will aid in deciphering the behavior of embedded devices, making the Reverse Engineer more effective in their analysis.
Computer Engineer
A Computer Engineer designs and develops computer systems and components, blending software and hardware expertise. This course may be useful as it provides a deep dive into ARM Assembly Language, essential for low-level programming and interacting directly with hardware. The Computer Engineer benefits from gaining hands-on experience writing drivers for peripherals like ADC, UART, and GPIO. Skills learned in this course will help the Computer Engineer to build and optimize embedded systems, and to bridge the gap between hardware and software effectively.
Mechatronics Engineer
A Mechatronics Engineer integrates mechanical, electrical, and computer engineering principles to design and develop automated systems. They often work with microcontrollers and embedded systems to control mechanical components and integrate sensors. This course may be useful for a Mechatronics Engineer as it provides practical experience in bare-metal firmware development for ARM-based microcontrollers. Learning to write drivers for peripherals like PWM and GPIO can translate into controlling motors and actuators with precision. The Mechatronics Engineer can master the ARM Instruction Set and build custom firmware for mechatronic systems.
Robotics Engineer
A Robotics Engineer designs, builds, and programs robots. One aspect of this job involves working with the embedded systems that control robot movements and sensor integration. This course may be helpful for Robotics Engineers, as it provides training in ARM Assembly Language, crucial for programming microcontrollers found in many robots. The course teaches how to write drivers for peripherals like ADCs and UARTs, skills that would be valuable when interfacing sensors and communication modules with a robot's control system. Learning to master the ARM Instruction Set and writing interrupt drivers would allow a Robotics Engineer to have more precise control over the robot's behavior and responsiveness.
Automation Engineer
An Automation Engineer designs and implements automated systems, often using programmable logic controllers and microcontrollers. They may integrate sensors, actuators, and communication systems to create automated processes. This course may be useful for an Automation Engineer, as it provides exposure to ARM Assembly Language and microcontroller programming. The course's focus on writing drivers for peripherals like GPIO and timers can apply to controlling actuators and reading sensor data. By the end of this course, the Automation Engineer could configure microcontroller peripherals for the specific needs of an automated system.
Cybersecurity Analyst
A Cybersecurity Analyst protects computer systems and networks from cyber threats. This includes analyzing software and hardware for vulnerabilities and developing security measures. This course may be useful, as it provides skills applicable to analyzing and reverse engineering embedded systems firmware. The Cybersecurity Analyst benefits with the understanding of ARM Assembly Language and microcontroller architecture to identify potential security flaws in embedded devices. The course's focus on writing drivers and understanding peripheral configuration can help one decipher the behavior of malicious firmware and develop effective security measures.
Automation Technician
An Automation Technician installs, maintains, and repairs automated systems and equipment. This role requires a practical understanding of how automated systems operate, including the embedded systems that control them. The Automation Technician can apply their experience gained from this course with ARM Assembly Language and microcontroller programming to troubleshoot and repair firmware issues in automated equipment. The course's focus on configuring peripherals and understanding interrupt routines is especially helpful for the Automation Technician when diagnosing and resolving problems in industrial automation systems.
Avionics Engineer
An Avionics Engineer designs, develops, and tests electronic systems for aircraft and spacecraft. These systems often rely on embedded systems and real-time processing. This course may be useful for an Avionics Engineer, as it provides instruction in ARM Assembly Language, which is relevant in some avionics applications. An Avionics Engineer can benefit from the focus on writing drivers for peripherals like UART and ADC, and utilize these skills to interface with sensors and communication modules in aircraft systems. This course will help develop a foundation for understanding and working with the embedded systems found in avionics equipment.
Medical Device Engineer
A Medical Device Engineer designs and develops medical equipment and instruments. Many medical devices incorporate embedded systems for data acquisition, control, and communication. This course may be useful for a Medical Device Engineer, as it provides some exposure to ARM Assembly Language and microcontroller programming. Learning to write drivers for peripherals like ADC and timers in this course can prove to be helpful in interfacing with sensors and controlling actuators in medical devices. The Medical Device Engineer can use their skills learned in this course to build and test the firmware for these devices.
Technical Trainer
A Technical Trainer develops and delivers training programs on technical topics. An understanding of embedded systems and Assembly Language programming can be valuable for training engineers or students in these areas. The Technical Trainer should be able to explain the fundamentals of ARM Assembly Language and microcontroller programming. Instruction in how to write drivers for peripherals like UART and ADC, taken from this course, can translate in the Technical Trainer developing effective teaching materials and hands-on exercises. The Technical Trainer would benefit by being prepared to teach others how to program ARM-based microcontrollers.
Hardware Engineer
A Hardware Engineer designs and tests computer hardware components and systems. They may work with microcontrollers, processors, and memory systems. Although a Hardware Engineer may not always write low-level code, understanding the fundamentals of Assembly Language and microcontroller architecture can be beneficial. While the Hardware Engineer is involved in the design of the physical components, this course provides insight into how software interacts with the hardware. Exposure to ARM Assembly Language may prove valuable for debugging and optimizing hardware performance, making the Hardware Engineer more effective in their role.
Computer Systems Architect
A Computer Systems Architect designs the overall structure of computer systems, including hardware and software components. They require a broad understanding of computer architecture, operating systems, and programming languages. The Computer Systems Architect may find this course helpful, as it provides exposure to low-level programming in ARM Assembly Language. This understanding can inform design decisions related to embedded systems and resource allocation. While the Computer Systems Architect might not write Assembly code directly, this course would grant them a practical understanding of the constraints and capabilities of embedded systems.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in ARM Assembly Language From Ground Up™ 2.
Delves into the architectural aspects of embedded systems, providing a broader context for understanding how ARM processors fit into larger systems. It covers topics such as memory management, interrupt handling, and real-time operating systems. While not strictly focused on assembly, it offers valuable insights into the design considerations for embedded systems, enhancing your ability to write efficient and effective assembly code. This book is useful as additional reading.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser