示例#1
0
TM_PWM_Result_t TM_PWM_SetChannelPercent(TIM_TypeDef* TIMx, TM_PWM_TIM_t* TIM_Data, TM_PWM_Channel_t Channel, float percent) {
	if (percent > 100) {
		return TM_PWM_SetChannel(TIMx, TIM_Data, Channel, TIM_Data->Period);
	} else if (percent <= 0) {
		return TM_PWM_SetChannel(TIMx, TIM_Data, Channel, 0);
	}
	return TM_PWM_SetChannel(TIMx, TIM_Data, Channel, (uint32_t)((float)(TIM_Data->Period - 1) * percent) / 100);
}
示例#2
0
int main(void) {
	TM_PWM_TIM_t TIM4_Data, TIM2_Data;
	
	/* Initialize system */
	SystemInit();

/* STM32F4-Discovery LEDS start */
/* Leds on PD12, PD13, PD14, PD15 */
	
	/* Set PWM to 1kHz frequency on timer TIM4 */
	/* 1 kHz = 1ms = 1000us */
	TM_PWM_InitTimer(TIM4, &TIM4_Data, 1000);
	
	/* Initialize PWM on TIM4, Channel 1 and PinsPack 2 = PD12 */
	TM_PWM_InitChannel(&TIM4_Data, TM_PWM_Channel_1, TM_PWM_PinsPack_2);
	/* Initialize PWM on TIM4, Channel 2 and PinsPack 2 = PD13 */
	TM_PWM_InitChannel(&TIM4_Data, TM_PWM_Channel_2, TM_PWM_PinsPack_2);
	/* Initialize PWM on TIM4, Channel 3 and PinsPack 2 = PD14 */
	TM_PWM_InitChannel(&TIM4_Data, TM_PWM_Channel_3, TM_PWM_PinsPack_2);
	/* Initialize PWM on TIM4, Channel 4 and PinsPack 2 = PD15 */
	TM_PWM_InitChannel(&TIM4_Data, TM_PWM_Channel_4, TM_PWM_PinsPack_2);
	
	/* Set channel 1 value, 50% duty cycle */
	TM_PWM_SetChannel(&TIM4_Data, TM_PWM_Channel_1, TIM4_Data.Period / 2);
	/* Set channel 2 value, 33% duty cycle */
	TM_PWM_SetChannel(&TIM4_Data, TM_PWM_Channel_2, TIM4_Data.Period / 3);
	/* Set channel 3 value, 25% duty cycle */
	TM_PWM_SetChannel(&TIM4_Data, TM_PWM_Channel_3, TIM4_Data.Period / 4);
	/* Set channel 4 value, 5% duty cycle*/
	TM_PWM_SetChannelPercent(&TIM4_Data, TM_PWM_Channel_4, 5);
/* STM32F4-Discovery LEDS stop */

/* Nucleo F4(0/1)1-RE LED start */
/* Led connected to PA5 */

	/* Set PWM to 1kHz frequency on timer TIM2 */
	/* 1 kHz = 1ms = 1000us */
	TM_PWM_InitTimer(TIM2, &TIM2_Data, 1000);
	
	/* Initialize PWM on TIM2, Channel 1 and PinsPack 2 = PA5 */
	TM_PWM_InitChannel(&TIM2_Data, TM_PWM_Channel_1, TM_PWM_PinsPack_2);
	
	/* Set channel 1 value, 500us pulse high = 500 / 1000 = 0.5 = 50% duty cycle */
	TM_PWM_SetChannelMicros(&TIM2_Data, TM_PWM_Channel_1, 10);
	
/* Nucleo F4(0/1)1-RE LED stop */

	while (1) {
		
	}
}
TM_PWM_Result_t TM_PWM_SetChannelMicros(TM_PWM_TIM_t* TIM_Data, TM_PWM_Channel_t Channel, uint32_t micros) {
	/* If we choose too much micro seconds that we have valid */
	if (micros > TIM_Data->Micros) {
		/* Too high pulse */
		return TM_PWM_Result_PulseTooHigh;
	}
	
	/* Set PWM channel */
	return TM_PWM_SetChannel(TIM_Data, Channel, (uint32_t)((TIM_Data->Period - 1) * micros) / TIM_Data->Micros);
}
示例#4
0
TM_PWM_Result_t TM_PWM_SetChannelMicros(TIM_TypeDef* TIMx, TM_PWM_TIM_t* TIM_Data, TM_PWM_Channel_t Channel, uint32_t micros) {
	if (micros > TIM_Data->Micros) {
		return TM_PWM_Result_PulseTooHigh;
	}
	return TM_PWM_SetChannel(TIMx, TIM_Data, Channel, (uint32_t)((TIM_Data->Period - 1) * micros) / TIM_Data->Micros);
}