Single-Course English 5 ECTS

Mikrokontroller-programmering til avanceret IoT med embedded C

Overall Course Objectives

This course will focus on embedded hardware development for low-power Internet of Things (IoT) using embedded C / bare-metal firmware programming. The purpose of this course is to introduce the student to advanced methods of developing firmware on ARM-Cortex microcontrollers (MCUs), specifically for IoT purposes. The student will be working with low-level MCU configuration and firmware development to configure and apply timers, interrupts, analog-to-digital-conversion, various serial communication protocols as well as wireless communication with IoT relevant technologies such as for example Lora/LoraWAN, SigFox, BLE and NBIoT/LTE-M as well as digital and analog sensors. The Arduino IDE will not be used in this course.

Learning Objectives

  • Describe the essence and challenges of Internet of Things.
  • Analyse and plan for implementation of optimal networking technology.
  • Implement embedded C code in an ARM Cortex based MCU.
  • Configure clock and peripherals in a STM32 evaluation board.
  • Set and configure up the GPIOs of an ARM Cortex based microcontroller for serial communication (UART, I2C, SPI)
  • Set up the GPIOs of an ARM-based microcontroller for ADC/DAC.
  • Develop embedded programs to transmit/receive data.
  • Implement UART/SPI/I2C communication protocols in firmware.
  • Describe concepts of RTOS and multi-threading in an embedded system.
  • Independently analyse and implement solution to an embedded implementation problem.
  • Deploy and showcase a developed IoT system and application.
  • Document project work in report.

Course Content

The purpose of this course is to introduce the student to advanced methods of developing firmware on ARM-Cortex MCUs for IoT purposes. In particular, focus will be on setting up the MCU, for example configuring the GPIOs, UART, interrupts and timers, SPI and I2C communication and analog-digital (ADC/DAC) functionality.
The, Arduino-free, embedded approach to microcontroller firmware development will provide the student with an understanding of the capabilities of an embedded system for Internet of Things. The students will touch upon the topic of Real-time operating system (RTOS) environment and briefly be introduced to running multiple threads on the ARM processor.
The course is structured around lectures and exercises where the student will gain hands-on experience within MCU firmware programming, primarily using STMCubeIDE and STMCubeMX. During the exercises, the student will learn to configure UART/SPI or I2C peripherals to communicate with digital sensors / modules. The student will also learn to configure and use the internal analog-to-digital converter (ADC) to read and digitize analog sensor data.

The course will have a focus on IoT such that low-power communication, e.g. LPWAN communication technologies (Lora/LoraWAN, SigFox or NBIoT/LTE-M) and/or BLE will be utilized for wireless data transmission during the course and project work.
The student is expected to have prior knowledge about C/C++.

During the course, the students will be planning and developing their own projects in groups and evaluated from a presentation and/or report.

Course keywords: Embedded systems, Low-power embedded firmware development for IoT, bare-metal programming, STM32, Nucleo, Bluepill, CubeIDE, CubeMX, FreeRTOS, tasks and semaphores, no-Arduino.

Recommended prerequisites

34315/34346/34365/34338, C programming experience / Embedded systems / Electronics / Arduino / IoT


Limited number of seats

Maximum: 15.

Please be aware that this course has a limited number of seats available. If there are too many applicants, a pool will be created for the remainder of the qualified applicants, and they will be selected at random. You will be informed 8 days before the start of the course, whether you have been allocated a spot.

See course in the course database.





13 weeks




DTU Lyngby Campus

Course code 34373
Course type Candidate
Semester start Week 5
Semester end Week 19
Days Tues 8-12

7.500,00 DKK

Please note that this course has participants limitation. Read more