#include "stm32f4xx_hal.h"
// Function to initialize PWM
void PWM_Init(void) {
// PWM Configuration
TIM_HandleTypeDef htim;
TIM_OC_InitTypeDef sConfigOC;
htim.Instance = TIM1;
htim.Init.Prescaler = 0;
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
htim.Init.Period = 1000 - 1; // PWM frequency = Timer clock / (Prescaler * Period)
htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&htim);
// PWM Channel Configuration
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0; // Initial duty cycle
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim, TIM_CHANNEL_1);
}
// Function to set PWM duty cycle (brightness)
void PWM_SetDutyCycle(uint16_t dutyCycle) {
TIM_OC_InitTypeDef sConfigOC;
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = dutyCycle; // Set duty cycle
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim, TIM_CHANNEL_1);
}
// Main function
int main(void) {
// Initialize the hardware
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
PWM_Init();
// Main loop
while (1) {
// Get user input for brightness (0-100)
uint16_t brightness;
printf("Enter brightness (0-100): ");
scanf("%hu", &brightness);
// Ensure the input is within the valid range
if (brightness <= 100) {
PWM_SetDutyCycle((uint16_t)((brightness / 100.0) * 1000));
} else {
printf("Please enter a value between 0 and 100.\n");
}
}
}