Mistake on this page?
Report an issue in GitHub or email us

PwmOut

Use the PwmOut interface to control the frequency and duty cycle of a PWM signal.

Tips:

  • Set the cycle time first, and then set the duty cycle using either a relative time period via the write() function or an absolute time period using the pulsewidth() function.
  • The default period is 0.020s, and the default pulse width is 0.

PwmOut class reference

Public Member Functions
 PwmOut (PinName pin)
 Create a PwmOut connected to the specified pin. More...
 PwmOut (const PinMap &pinmap)
 Create a PwmOut connected to the specified pin. More...
void write (float value)
 Set the output duty-cycle, specified as a percentage (float) More...
float read ()
 Return the current output duty-cycle setting, measured as a percentage (float) More...
void period (float seconds)
 Set the PWM period, specified in seconds (float), keeping the duty cycle the same. More...
void period_ms (int ms)
 Set the PWM period, specified in milliseconds (int), keeping the duty cycle the same. More...
void period_us (int us)
 Set the PWM period, specified in microseconds (int), keeping the duty cycle the same. More...
void pulsewidth (float seconds)
 Set the PWM pulsewidth, specified in seconds (float), keeping the period the same. More...
void pulsewidth_ms (int ms)
 Set the PWM pulsewidth, specified in milliseconds (int), keeping the period the same. More...
void pulsewidth_us (int us)
 Set the PWM pulsewidth, specified in microseconds (int), keeping the period the same. More...
void suspend ()
 Suspend PWM operation. More...
void resume ()
 Resume PWM operation. More...
PwmOutoperator= (float value)
 A operator shorthand for write() More...
PwmOutoperator= (PwmOut &rhs)
 A operator shorthand for write() More...
 operator float ()
 An operator shorthand for read() More...

PwmOut hello, world

This code example uses the default period of 0.020s and ramps the duty cycle from 0% to 100% in increments of 10%.

/*
 * Copyright (c) 2014-2020 Arm Limited and affiliates.
 * SPDX-License-Identifier: Apache-2.0
 */

#include "mbed.h"

// Adjust pin name to your board specification.
// You can use LED1/LED2/LED3/LED4 if any is connected to PWM capable pin,
// or use any PWM capable pin, and see generated signal on logical analyzer.
PwmOut led(LED1);

int main()
{
    // specify period first
    led.period(4.0f);      // 4 second period
    led.write(0.50f);      // 50% duty cycle, relative to period
    //led = 0.5f;          // shorthand for led.write()
    //led.pulsewidth(2);   // alternative to led.write, set duty cycle time in seconds
    while (1);
}

PwmOut code examples

Example one

This code example sets the period in seconds and the duty cycle as a percentage of the period in floating point (range: 0 to 1). The effect of this code snippet will be to blink LED2 over a four-second cycle, 50% on, for a pattern of two seconds on, two seconds off.

/*
 * Copyright (c) 2017-2020 Arm Limited and affiliates.
 * SPDX-License-Identifier: Apache-2.0
 */

#include "mbed.h"

// Adjust pin name to your board specification.
// You can use LED1/LED2/LED3/LED4 if any is connected to PWM capable pin,
// or use any PWM capable pin, and see generated signal on logical analyzer.
PwmOut led(LED2);

int main()
{
    // specify period first, then everything else
    led.period(4.0f);  // 4 second period
    led.write(0.50f);  // 50% duty cycle
    while (1);         // led flashing
}

Example two

The following example does the same thing, but instead of specifying the duty cycle as a relative percentage of the period, it specifies it as an absolute value in seconds. In this case we have a four-second period and a two-second duty cycle, meaning the LED will be on for two seconds and off for two seconds.

/*
 * Copyright (c) 2017-2020 Arm Limited and affiliates.
 * SPDX-License-Identifier: Apache-2.0
 */

#include "mbed.h"

// Adjust pin name to your board specification.
// You can use LED1/LED2/LED3/LED4 if any is connected to PWM capable pin,
// or use any PWM capable pin, and see generated signal on logical analyzer.
PwmOut led(LED2);

int main()
{
    // specify period first, then everything else
    led.period(4.0f);  // 4 second period
    led.pulsewidth(2); // 2 second pulse (on)
    while (1);         // led flashing
}

Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.