My First Embedded Systems University Course: Resources, Lessons and Tips
This course was taught in the second semester of the academic year 2024–2025 for fourth-year students in the Department of Computer and Automation Engineering. It was an important experience for me, since it was with students from the same department I graduated from about 11 years ago, and I returned to teach after more than a decade of experience all within the field of this subject—embedded systems.
I put effort into benefiting from several previous teaching experiences I had gained—whether through short courses, workshops, or lab instruction during my master’s studies in Turkey—and applied them in teaching this course.
This was my first experience delivering the lectures of a university course. Although there is some debate regarding the eligibility of someone with a master’s degree, rather than a PhD, to teach theoretical of a university course, it is unquestionably true that many universities allow engineers to partially or fully teach certain subjects where hands-on experience is a key factor in the success of the course. I learned many important lessons during this experience, which I will share with the reader.
1 — Choosing the MCU
When it was confirmed that I would be teaching the majority of the lectures of the course, I did not yet have any prepared content. All I knew beforehand was that the course had no fixed curriculum. There were course topics listed in the department’s syllabus, but unfortunately, the description was outdated, brief, and not comprehensive.
I also decided to commit to using the STM32F103 microcontroller, since it had been used in the lab in previous years, and I did not want to place students in a contradictory situation between the lab and theoretical content by introducing a different microcontroller.
I had wished to choose a different microcontroller for several reasons—most importantly, selecting a modern MCU with a less complex peripheral architecture than the STM32, and one with an easier, less abstract SDK. This would allow students to be closer to the registers and the low-level hardware layer of the microcontroller.
2 — Choosing the Academic Reference
Before the course began, I searched extensively for references that students could rely on. What surprised me was that despite the popularity of the STM32 microcontroller and the reasonable number of available books, I could only identify one book with a clear academic methodology suitable for a university course. By “academic methodology,” I mean a systematic approach that does not neglect theoretical details—such as explaining the electrical foundations of a bus or peripheral, or describing the processor architecture and registers.
There is no doubt that many articles, booklets, and even books exist about the STM32, but most are written in a non-academic style that focuses almost exclusively on the practical side.
The book I selected was: Embedded Systems with ARM Cortex-M Microcontrollers in Assembly Language and C by Dr. Yifeng Zhu

Certainly, the book Mastering STM32 – A step-by-step guide to the most complete ARM Cortex-M platform, using the official STM32Cube development environment is a famous one. However, its approach is more like practical tutorials, which do not help the student learn the theoretical concepts of embedded systems.
Excessive abstraction causes important details—details that students must encounter and understand—to be overlooked. At the same time, I was opposed to using older microcontrollers commonly used in similar courses, such as the ATmega8 or PIC16F877, because they have become very outdated.
To be academically fair, after teaching the course, I realized that using something like the ATmega8 does have an advantage: it simplifies the explanation of peripheral fundamentals and processor interactions without the complexity of modern microcontrollers. However, it may also expose the student to outdated details—such as configuring fuse bits—that they may not need in the future.
The second reason that pushed me to choose another microcontroller was selecting one with a processor that supports the open-source RISC-V instruction set, which now competes with ARM and is being adopted by major microcontroller design companies, such as Espressif, the maker of the popular ESP32 controllers. I had imagined that choosing RISC-V would mean it might one day become the standard in all subjects related to chip design and computer architecture. There are several open-source processor designs that support RISC-V, and as we know, ARM processor designs are closed-source.
However, after discovering the scarcity of books and resources—since RISC-V is still relatively new—I decided to slow down in pushing this direction. I believe the topic is still worth studying and exploring further.
I had read a research paper titled: “Computer Engineering Education Experiences with RISC-V Architectures—From Computer Architecture to Microcontrollers” which discussed the integration of teaching computer architecture and microcontrollers based on RISC-V using FPGAs. I also learned about the RVfpga initiative, which aims to teach computer architecture using RISC-V.
I selected a few supplementary books for certain side topics in the course, such as those related to explaining the processor architecture used in the microcontroller. The strongest book on explaining the architecture of ARM’s Cortex-M3/M4 processors is The Definitive Guide to the ARM® Cortex-M3 and Cortex-M4.

And to review the basics of the C language for students, I relied on the book First Steps with Embedded Systems by Byte Craft, which, incidentally, was the first book I ever read on using the C language in embedded systems.

Finally, I could not find comprehensive slides that I could reuse and that would be sufficient for the students. The reason is likely that many universities restrict access to their slides to their own students only, in addition to the fact that I did not find anyone who had made the same choices in terms of microcontroller and references.
3 — Experience Using Moodle
I was initially looking forward to using Google Classroom, as it is simple and sufficient at the same time, with no need to spend time installing another platform. Most importantly, Google Classroom is linked to Google accounts. Unfortunately, Google Classroom was not available for use in Syria. This unavailability led me to adopt Moodle as an alternative, and I was glad to get to know this comprehensive and free system.
In comparison with my experience in Google Classroom, Moodle is much more powerful, offering numerous options to support courses when creating assignments and content pages within the course website. It also provides broader statistical data and monitoring of students’ use of the site.
Google Classroom, on the other hand, is easier, less complex, and requires no technical effort for setup.
I cannot cover the full experience with Moodle in this report, but it was an experience that motivated me to adopt it in the Atadimi project.
4 — Students Using ChatGPT to Cheat
I decided to hold a review session for the course and, through this session, observed the strong impact of ChatGPT and language models on teaching. Despite being strict in monitoring, I documented a considerable number of cases during grading where students relied on language models for their answers. Some even produced ASCII ART tables exactly as generated by the model, which the students copied verbatim!
The presence of language models in students’ hands forces educational systems and universities to adopt methods that make it impossible to use such models. For example, returning to oral examinations instead of written assignments, where students answer questions verbally, is one option.
However, this is impractical, especially with large student numbers, and it is difficult to conduct interviews that allow students time to think and correct mistakes, unlike written assignments.
Another option is conducting exams in computer labs where the computers have no internet access and are equipped with signal jammers.
5 — Difficulty in Purchasing Equipment and Circuits in Challenging Economic Conditions
One of the major problems in low-income countries, especially in public universities that are free of charge, is that many students barely manage to cover their daily needs and lack many basic necessities. It is therefore impossible to place the burden of acquiring a set of sensors and circuits for practical implementation on them in a course such as Embedded Systems, whose benefit is incomplete without hands-on work. I was even surprised to find about three students who did not have a computer.
Creating Embedded Systems Course Content for a Saudi University Using ESP32
Over the course of three months after I finished the university course, I developed content for 14 lectures, including lab materials, in collaboration with the course instructor at a Saudi university. The instructor specified the topics and asked to use the ESP32. It was a good experience, as the completed slides were well received by the instructor, and I hardly needed to make any revisions. I benefited from my experience teaching the Embedded Systems course at the University of Damascus in proposing realistic and suitable content for the students. I frequently used the wokwi.com simulator to demonstrate practical applications using Arduino, which was the first time I had used it.
This was the first course I completed using the ESP32, coincidentally coming just a few months after using the STM32 in another course. I found, from the instructor’s perspective, that the ESP32 has complexities in its Reference Manual and SDK (ESP-IDF), which makes me reluctant to recommend using this chip in similar university courses. Additionally, there is a complete lack of academic references for the ESP32. The extensive details required for some of its peripherals, in my opinion, make it less suitable for use in courses like this.