diff --git a/targets/TARGET_STM/pwmout_api.c b/targets/TARGET_STM/pwmout_api.c index dfacdc4f995..53e3d890b9b 100644 --- a/targets/TARGET_STM/pwmout_api.c +++ b/targets/TARGET_STM/pwmout_api.c @@ -142,9 +142,23 @@ static void _pwmout_init_direct(pwmout_t *obj, const PinMap *pinmap) pin_function(pinmap->pin, pinmap->function); pin_mode(pinmap->pin, PullNone); - obj->period = 0; - obj->pulse = 0; - obj->prescaler = 0; + // Initialize obj with default values (period 550Hz, duty 0%) + uint32_t frequency; + uint32_t clocksource = __HAL_RCC_GET_HRTIM1_SOURCE(); + switch (clocksource) { + case RCC_HRTIM1CLK_TIMCLK: + frequency = HAL_RCC_GetHCLKFreq(); + break; + case RCC_HRTIM1CLK_CPUCLK: + frequency = HAL_RCC_GetSysClockFreq(); + break; + } + obj->period = 18000 * (frequency / 1000000) / 4; + if (obj->period > 0xFFDFU) { + obj->period = 0xFFDFU; + } + obj->pulse = (uint32_t)((float)obj->period * 1.0 + 0.5); + obj->prescaler = HRTIM_PRESCALERRATIO_DIV4; // Initialize the HRTIM structure HrtimHandle.Instance = HRTIM1;