If you need urgent consulting help click here

PWM Blinky


This application blinks a LED using the PWM API. See Blinky for a GPIO-based sample.

The LED starts blinking at a 1 Hz frequency. The frequency doubles every 4 seconds until it reaches 128 Hz. The frequency will then be halved every 4 seconds until it returns to 1 Hz, completing a single blinking cycle. This faster-then-slower blinking cycle then repeats forever.

Some PWM hardware cannot set the PWM period to 1 second to achieve the blinking frequency of 1 Hz. This sample calibrates itself to what the hardware supports at startup. The maximum PWM period is decreased appropriately until a value supported by the hardware is found.


The board must have an LED connected to a PWM output channel. The PWM controlling this LED must be configured using the pwm_led0 devicetree alias, usually in the BOARD.dts file.


No additional wiring is necessary if pwm_led0 refers to hardware that is already connected to an LED on the board.

In these other cases, however, manual wiring is necessary:



ST Nucleo F401RE

connect PWM2 (PA0) to an LED

ST Nucleo L476RG

connect PWM2 (PA0) to an LED

ST STM32F4 Discovery

connect PWM2 (PA0) to an LED

ST Nucleo F302R8

connect PWM2 (PA0) to an LED

ST Nucleo F103RB

connect PWM1 (PA8) to an LED

ST Nucleo WB55RG

connect PWM1 (PA8) to an LED

Building and Running

To build and flash this sample for the nRF52840 DK:

west build -b nrf52840dk_nrf52840 samples/basic/blinky_pwm
west flash

Change nrf52840dk_nrf52840 appropriately for other supported boards.

After flashing, the sample starts blinking the LED as described above. It also prints information to the board’s console.