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); } }
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) { } }
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); } } }