#include "init.h" void LEDs_ini(void) { GPIO_InitTypeDef GPIO_Init_LED; // Включаем тактирование порта D RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); // Настраиваем пины 12, 13, 14, 15 GPIO_Init_LED.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_Init_LED.GPIO_Mode = GPIO_Mode_OUT; GPIO_Init_LED.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init_LED.GPIO_OType = GPIO_OType_PP; GPIO_Init_LED.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOD, &GPIO_Init_LED); } // Настройка кнопки (PA0) void Button_ini(void) { GPIO_InitTypeDef GPIO_Init_Button; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_Init_Button.GPIO_Pin = GPIO_Pin_0; GPIO_Init_Button.GPIO_Mode = GPIO_Mode_IN; // Режим: Вход GPIO_Init_Button.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init_Button.GPIO_OType = GPIO_OType_PP; GPIO_Init_Button.GPIO_PuPd = GPIO_PuPd_NOPULL; // PA0 уже имеет внешнюю подтяжку к земле на плате GPIO_Init(GPIOA, &GPIO_Init_Button); } // Настройка внешних прерываний (EXTI) для кнопки void EXTI_Config(void) { EXTI_InitTypeDef EXTI_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; // Включаем тактирование SYSCFG RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); // Подключаем EXTI Line0 к порту PA0 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); // Настраиваем линию EXTI0 EXTI_InitStruct.EXTI_Line = EXTI_Line0; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; // Срабатывание по переднему фронту (нажатие) EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); // Настраиваем прерывание в NVIC (контроллере прерываний) NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); }