#include "stm32C031C6_mcu.h"
// Define button pins
#define BUTTON1_PIN GPIO_PIN_0
#define BUTTON2_PIN GPIO_PIN_1
#define BUTTON3_PIN GPIO_PIN_2
#define BUTTON4_PIN GPIO_PIN_3
#define BUZZER_PIN GPIO_PIN_8
// Define button ports
#define BUTTON_PORT GPIOA
#define BUZZER_PORT GPIOA
// Frequencies for the notes (in Hz)
#define NOTE_C 262
#define NOTE_D 294
#define NOTE_E 330
#define NOTE_F 349
void play_tone(uint16_t frequency, uint16_t duration_ms) {
uint32_t period = 1000000 / frequency; // Period in microseconds
uint32_t pulse = period / 2; // 50% duty cycle
TIM1->ARR = period - 1; // Set auto-reload register
TIM1->CCR1 = pulse; // Set compare register
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); // Start PWM
HAL_Delay(duration_ms); // Play for duration
HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1); // Stop PWM
}
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM1_Init(); // Configure PWM timer
while (1) {
if (HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON1_PIN) == GPIO_PIN_RESET) {
play_tone(NOTE_C, 500); // Play C note for 500ms
}
if (HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON2_PIN) == GPIO_PIN_RESET) {
play_tone(NOTE_D, 500); // Play D note for 500ms
}
if (HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON3_PIN) == GPIO_PIN_RESET) {
play_tone(NOTE_E, 500); // Play E note for 500ms
}
if (HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON4_PIN) == GPIO_PIN_RESET) {
play_tone(NOTE_F, 500); // Play F note for 500ms
}
}
}