PWM

API Reference

Functions

esp_err_t pwm_init(uint32_t period, uint32_t *duties, uint8_t channel_num, const uint32_t *pin_num)

PWM function initialization, including GPIO, frequency and duty cycle.

Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
  • ESP_FAIL Init error
Parameters
  • period: PWM period, unit: us. e.g. For 1KHz PWM, period is 1000 us. Do not set the period below 20us.
  • duties: duty cycle of each channels.
  • channel_num: PWM channel number, maximum is 8
  • pin_num: GPIO number of PWM channel

esp_err_t pwm_deinit(void)

PWM function uninstall.

Return
  • ESP_OK Success
  • ESP_FAIL Init error

esp_err_t pwm_set_duty(uint8_t channel_num, uint32_t duty)

Set the duty cycle of a PWM channel. Set the time that high level or low(if you invert the output of this channel) signal will last, the duty cycle cannot exceed the period.

Note
After set configuration, pwm_start needs to be called to take effect.
Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • channel_num: PWM channel number the channel_num cannot exceed the value initialized by pwm_init.
  • duty: duty cycle

esp_err_t pwm_get_duty(uint8_t channel_num, uint32_t *duty_p)

Get the duty cycle of a PWM channel.

Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • channel_num: PWM channel number the channel_num cannot exceed the value initialized by pwm_init.
  • duty_p: pointer saves the address of the specified channel duty cycle

esp_err_t pwm_set_period(uint32_t period)

Set PWM period, unit: us.

Note
After set configuration, pwm_start needs to be called to take effect.
Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • period: PWM period, unit: us For example, for 1KHz PWM, period is 1000. Do not set the period below 20us.

esp_err_t pwm_get_period(uint32_t *period_p)

Get PWM period, unit: us.

Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • period_p: pointer saves the address of the period

esp_err_t pwm_start(void)

Starts PWM.

Note
This function needs to be called after PWM configuration is changed.
Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error

esp_err_t pwm_stop(uint32_t stop_level_mask)

Stop all PWM channel. Stop PWM and set the output of each channel to the specified level. Calling pwm_start can re-start PWM output.

Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • stop_level_mask: Out put level after PWM is stoped e.g. We initialize 8 channels, if stop_level_mask = 0x0f, channel 0,1,2 and 3 will output high level, and channel 4,5,6 and 7 will output low level.

esp_err_t pwm_set_duties(uint32_t *duties)

Set the duty cycle of all channels.

Note
After set configuration, pwm_start needs to be called to take effect.
Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • duties: An array that store the duty cycle of each channel, the array elements number needs to be the same as the number of channels.

esp_err_t pwm_set_phase(uint8_t channel_num, float phase)

Set the phase of a PWM channel.

Note
After set configuration, pwm_start needs to be called to take effect.
Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • channel_num: PWM channel number the channel_num cannot exceed the value initialized by pwm_init.
  • phase: The phase of this PWM channel, the phase range is (-180 ~ 180].

esp_err_t pwm_set_phases(float *phases)

Set the phase of all channels.

Note
After set configuration, pwm_start needs to be called to take effect.
Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • phases: An array that store the phase of each channel, the array elements number needs to be the same as the number of channels.

esp_err_t pwm_get_phase(uint8_t channel_num, float *phase_p)

Get the phase of a PWM channel.

Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • channel_num: PWM channel number the channel_num cannot exceed the value initialized by pwm_init.
  • phase_p: pointer saves the address of the specified channel phase

esp_err_t pwm_set_period_duties(uint32_t period, uint32_t *duties)

Set PWM period and duty of each PWM channel.

Note
After set configuration, pwm_start needs to be called to take effect.
Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • period: PWM period, unit: us For example, for 1KHz PWM, period is 1000.
  • duties: An array that store the duty cycle of each channel, the array elements number needs to be the same as the number of channels.

esp_err_t pwm_set_channel_invert(uint16_t channel_mask)

Set the inverting output PWM channel.

Note
After set configuration, pwm_start needs to be called to take effect.
Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • channel_mask: The channel bitmask that used to invert the output e.g. We initialize 8 channels, if channel_mask = 0x0f, channels 0, 1, 2 and 3 will invert the output.

esp_err_t pwm_clear_channel_invert(uint16_t channel_mask)

Clear the inverting output PWM channel. This function only works for the PWM channel that is already in the inverted output states.

Note
After set configuration, pwm_start needs to be called to take effect.
Return
  • ESP_OK Success
  • ESP_ERR_INVALID_ARG Parameter error
Parameters
  • channel_mask: The channel bitmask that need to clear e.g. The outputs of channels 0, 1, 2 and 3 are already in inverted state. If channel_mask = 0x07, the output of channel 0, 1, and 2 will return to normal, the channel 3 will keep inverting output.