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... | |
| int | read_period_us () | 
| Read the PWM period.  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... | |
| int | read_pulsewitdth_us () | 
| Read the PWM pulsewidth.  More... | |
| void | suspend () | 
| Suspend PWM operation.  More... | |
| void | resume () | 
| Resume PWM operation.  More... | |
| PwmOut & | operator= (float value) | 
| A operator shorthand for write() More... | |
| PwmOut & | operator= (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
}