extern "C" {
#include "stm32f1xx_hal.h"
}
void GPIO_Init(void) {
__HAL_RCC_GPIOA_CLK_ENABLE(); // Увімкнути такт для порту A
GPIO_InitTypeDef GPIO_InitStruct = {0};
// Ініціалізація пінів A0-A3 як виходи
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Цифровий вихід
GPIO_InitStruct.Pull = GPIO_NOPULL; // Без підтягувального резистора
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // Низька швидкість
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // Ініціалізація GPIO
// Початкове вимкнення всіх світлодіодів
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
}
void SystemClock_Config(void) {
// Конфігурація системного такту (залишаємо порожнім, якщо використовуємо Wokwi)
}
int main(void) {
HAL_Init(); // Ініціалізація HAL бібліотеки
SystemClock_Config(); // Налаштування тактової частоти
GPIO_Init(); // Ініціалізація GPIO для світлодіодів
while (1) {
// Вмикаємо і вимикаємо 4-й світлодіод
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
// Вмикаємо і вимикаємо 1-й світлодіод
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
// Вмикаємо і вимикаємо 3-й світлодіод
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
// Вмикаємо і вимикаємо 2-й світлодіод
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_Delay(1000); // Пауза перед наступним циклом
}
}
Loading
stm32-bluepill
stm32-bluepill