示例#1
0
文件: main.c 项目: DiegoAlx/stm32f429
int main(void) {
	TM_PWM_TIM_t TIM2_Data;
	uint8_t direction = 1;
	
	/* Initialize system */
	SystemInit();
	
	/* Initialize delay functions */
	TM_DELAY_Init();

	/* Set PWM to 50Hz frequency on timer TIM2 */
	/* 50Hz = 20ms = 20000us */
	TM_PWM_InitTimer(TIM2, &TIM2_Data, 50);
	
	/* Initialize PWM on TIM2, Channel 1 and PinsPack 2 = PA5 */
	TM_PWM_InitChannel(TIM2, TM_PWM_Channel_1, TM_PWM_PinsPack_2);
	
	/* Set channel 1 value, 1500us = servo at center position */
	TM_PWM_SetChannelMicros(TIM2, &TIM2_Data, TM_PWM_Channel_1, 1500);
	
	/* Servo in position */
	Delayms(1000);

	while (1) {
		if (direction == 1) {
			/* Set servo position = 1000us pulse length */
			TM_PWM_SetChannelMicros(TIM2, &TIM2_Data, TM_PWM_Channel_1, 1000);
			/* Change direction */
			direction = 0;
		} else {
			/* Set servo position = 2000us pulse length */
			TM_PWM_SetChannelMicros(TIM2, &TIM2_Data, TM_PWM_Channel_1, 2000);
			/* Change direction */
			direction = 1;
		}
		
		/* Set some delay for servo to set to correct position */
		Delayms(1500);
	}
}
示例#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) {
		
	}
}
示例#3
0
文件: main.c 项目: Acse/stm32f429
int main(void) {
	TM_PWM_TIM_t TIM2_Data;
	TM_KEYPAD_Button_t Keypad_Button;
	uint16_t duration = SERVO_MIDDLE;
	
	/* Initialize system */
	SystemInit();
	
	/* Initialize delay functions */
	TM_DELAY_Init();
	
	/* Initialize matrix keypad, 4x4 */
	TM_KEYPAD_Init(TM_KEYPAD_Type_Large);

	/* Set PWM to 50Hz frequency on timer TIM2 */
	/* 50Hz = 20ms = 20000us */
	TM_PWM_InitTimer(TIM2, &TIM2_Data, 50);
	
	/* Initialize PWM on TIM2, Channel 1 and PinsPack 2 = PA5 */
	TM_PWM_InitChannel(TIM2, TM_PWM_Channel_1, TM_PWM_PinsPack_2);
	
	/* Set channel 1 value, 1500us = servo at center position */
	TM_PWM_SetChannelMicros(TIM2, &TIM2_Data, TM_PWM_Channel_1, SERVO_MIDDLE);

	while (1) {
		/* Read keypad */
		Keypad_Button = TM_KEYPAD_Read();
		
		/* If any button pressed */
		if (Keypad_Button != TM_KEYPAD_Button_NOPRESSED) {
			switch (Keypad_Button) {
				case TM_KEYPAD_Button_0:	/* Go to the middle position */
				case TM_KEYPAD_Button_2:
				case TM_KEYPAD_Button_5:
				case TM_KEYPAD_Button_8:
					/* Go to the middle */
					duration = SERVO_MIDDLE;
					break;
				case TM_KEYPAD_Button_1:	/* 1us decrease pulse length */
					duration--;
					break;
				case TM_KEYPAD_Button_3:	/* 1us increase pulse length */
					duration++;
					break;
				case TM_KEYPAD_Button_4:	/* 10us decrease pulse length */
					duration -= 10;
					break;
				case TM_KEYPAD_Button_6:	/* 10us increase pulse length */
					duration += 10;
					break;
				case TM_KEYPAD_Button_7:	/* 100us decrease pulse length */
					duration -= 100;
					break;
				case TM_KEYPAD_Button_9:	/* 100us increase pulse length */
					duration += 100;
					break;
				case TM_KEYPAD_Button_STAR:	/* Turn totally left */
					duration = SERVO_MIN;
					break;
				case TM_KEYPAD_Button_HASH:	/* Turn totally right */
					duration = SERVO_MAX;
					break;
				default: /* Do nothing */
					break;
			}
			
			/* Filter */
			if (duration > SERVO_MAX) {
				duration = SERVO_MAX;
			} else if (duration < SERVO_MIN) {
				duration = SERVO_MIN;
			}
			
			/* Set PWM length for servo */
			TM_PWM_SetChannelMicros(TIM2, &TIM2_Data, TM_PWM_Channel_1, duration);
		}
	}
}