
Develop embedded systems firmware with stm32cube mx and cubeide, building peripheral drivers and real-time applications using freertos, and exploring bare-metal and assembly approaches from datasheets.
Download CubeMX 5 and the CubeIDE from STMicroelectronics, accept the license, and enter your email and name to start the download; the suite is free with no code size limits.
Download the CubeMX 5 and CubeIDE packages for Windows, macOS, or Linux, extract them to a dedicated folder, and install the Java runtime environment if prompted.
install cubeMX 5 packages for stm32 projects by using the software manager to add EF4 and other MCU packages. ensure you install 64-bit java to avoid feature limitations.
Explore stm32cubeMX 5 in this overview, from creating a new project and selecting a board to configuring peripherals, pinout and system clock, and generating code with your preferred toolchain.
Learn to use the clock configuration tab to set the system clock for the selected board, adjust peripheral clocks, and enable sources like hsi/hse, rtc, and mco.
Configure an external interrupt for a push button on PC13 using STM32CubeMX and CubeIDE, implement the interrupt handler and callback, and address debouncing.
Configure a multi-input external interrupt in STM32CubeMX by setting PC13 as EXTI. Implement a callback to distinguish pins by the GPIO pin parameter.
Learn bare metal STM32 GPIO drivers from scratch using datasheet and reference manual, enabling port clocks and configuring PA5 as output via the mode register and output data register.
Learn to implement gpio drivers from the datasheet by enabling RCC clock, configuring the mode register, and toggling the data register to blink an LED, using friendly bitwise practices.
Demonstrates creating an stm32 cubeide assembly project, writing arm assembly with directives, and debugging with registers, loops, and the main label as entry point.
Demonstrate coding a gpio i/o driver from scratch in assembly for stm32 cube projects by using datasheet memory addresses, enabling clocks, and configuring port a mode and data direction registers.
Learn to code gpio drivers from scratch in assembly, implement an initialization subroutine, enable pin five, set the mode, and turn on the LCD via memory-mapped registers.
Explore converting Keil MDK ARM assembly to GCC assembly in CubeIDE, adjusting directives, global labels, thumb mode, and section declarations for Cortex-M4, including reset handlers.
Learn to create precise delays with a hardware timer using stm32cubeMX 5 and cubeIDE, configure the clock and APB1 timer, and enable timer interrupts.
Configure the timer output compare to toggle four channels at 100 ms, 500 ms, 400 ms, and 1 s, using CubeMX and CubeIDE on a STM32 discovery board.
Configure the timer in input capture mode to count events, such as button presses or ultrasonic sensor signals, using an external clock and auto-reload to trigger actions.
Configure a hardware timer to generate pwm signals by selecting a timer-capable pin (pe5) and channel one, set clock, prescaler, period, and duty cycle, build, and run in CubeIDE.
Configure the STM32 ADC in single-mode and continuous-mode conversions with CubeMX and CubeIDE, trigger conversions with a timer, and read channel 0 values via polling and DMA for multiple channels.
Configure the ADC for continuous conversion in CubeMX, using a 48 MHz ADC clock and 12-bit resolution. Start the ADC and read values in a loop with get value.
Configure the ADC to operate in interrupt mode, enable the ADC1 global interrupt, start conversions with interrupts, and read the converted value in the conversion complete callback.
Configure the adc to sample a single channel continuously using dma in peripheral-to-memory mode, setting a 16-bit buffer and starting adc dma with a completion callback.
Learn to configure multi-channel ADC with DMA scan mode in STM32CubeMX and CubeIDE, enabling two channels, continuous DMA requests, proper sampling times, and reading results from a 32-bit buffer.
Configure SPI in full duplex polling mode, set the clock to 16 MHz, and verify data transfer using TX and RX buffers with a loopback.
Configure spi in interrupt mode, set duplex, clock prescaler, enable interrupts, generate the project, set up tx/rx buffers, implement transmit/receive complete callbacks, and test with a loopback using a jumper.
Configure SPI with DMA transfer mode, create a project, set up full duplex SPI, generate code, initialize TX and RX buffers, and validate DMA-driven data transfer.
Learn to code UART drivers for polling transfer mode on STM32 using CubeMX 5 and CubeIDE, configure USART in asynchronous mode, and transmit data to Teraterm.
Configure uart interrupt mode in STM32CubeIDE and create a loopback by wiring PA9 to PA10. Enable global interrupts and implement TX/RX buffers and complete callbacks to verify data.
Configure uart drivers with dma transfer mode in STM32CubeMX 5 and CubeIDE, set up dma streams for rx and tx, and verify loopback communication.
Explore the USB capabilities of different dev boards, configure a STM32 Discovery Board as a USB HID mouse, and learn to connect and test a USB device.
Configure the USB device as a HID mouse using STM32CubeMX 5 and CubeIDE. Build a mouse report buffer for X, Y, and button states, and test with a push button.
Configure a USB HID keyboard in STM32CubeMX and CubeIDE, update the report descriptor, and send push-button key press and release events to simulate page down.
Configure the SDM32 microcontroller to expose a USB virtual com port using the USB device class, set up CDC transmit, buffer data, and test communication with a terminal.
Create a usb virtual com port project, implement a receive callback to handle rx and tx, and echo received data back to the transmitter while enabling led and lcd display.
Set up FreeRTOS on STM32CubeMX/CubeIDE, create tasks, and assign priorities. Implement a mutex for shared resources (UART or LCD) and understand round-robin scheduling and task profiling.
Access a single resource from multiple threads using a mutex, with semaphore take and give APIs, timeout options, and the key analogy, applied to an lcd screen.
Learn how to manually create a thread in stm32cube mx and cubeide after code generation, including defining thread id, name, function, priority, stack size, and profiling.
Learn how to send notifications between threads using xTaskNotify and notify wait, triggered by a push button, to pass greetings from thread two to thread three, with debugging insights.
Thank you for completing the course; we will add new content and updates periodically. Send questions or suggestions via the questions area to stay engaged.
Hello Welcome to the Mastering STM32CubeMX 5 and CubeIDE course
This course teaches you how build embedded systems firmware and peripheral drivers using the STM32CubeMX 5 framework and the STMCubeIDE development environment. This course has many sections but primarily the course can be divided into three parts.
The first part deals with peripheral driver development. In this part we master how to use the STM32CubeMX framework to setup the clocks and register parameters of our peripheral drivers and then go on to the CubeIDE development environment to complete the development and testing of peripheral drivers. We shall master different setup configurations of our peripheral drivers in this part. These peripherals include the Universal Serial Bus (USB), the PWM, the SPI, the ADC, UART and the DMA.
The second part of this master course deals with developing embedded firmware applications using some of the Middleware provided by the STM32CubeMX framework. One of such Middleware we shall master is the FreeRTOS Realtime Kernel. We shall see how to use STM32CubeMX to create tasks and semaphores and other kernel components for realtime firmware development. We shall also see how to develop these kernel components from scratch using our CubeIDE development environment alone.
The third part of the course deals with working the CubeIDE as a standalone development environment. Over here we shall see how to develop bare-metal embedded-c firmware and drivers without using any libraries. We shall literally download the microcontroller chip's datasheet and develop our firmware and drivers using information from the datasheet only. We shall then go on to use this same datasheet information to develop firmware and peripheral drivers using ARM Assembly Language.
Please take a look at the full course curriculum.
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 let's start building some drivers.