#include "stm32f0xx_hal.h" #include "gpio.h" #define SET_OUT_1 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET) #define SET_OUT_2 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET) #define SET_OUT_3 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET) #define SET_OUT_4 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET) #define RESET_OUT_1 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET) #define RESET_OUT_2 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET) #define RESET_OUT_3 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET) #define RESET_OUT_4 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET) static uint8_t next_out_number = 0; static uint8_t current_out_number = 0; // PA6 - перключатель рижма одиночный/строка // PA4 - кнопка старт void gpio_init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_12; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // GPIO_PIN_5 - инфракрасный LED GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_4; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // LED - индикация входного сигнала GPIO_InitStruct.Pin = GPIO_PIN_2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_4, GPIO_PIN_RESET); } // void gpio_set_output(bool state) { if (state == true) { current_out_number = next_out_number; switch (next_out_number) { case 0: SET_OUT_1; break; case 1: SET_OUT_2; break; case 2: SET_OUT_3; break; case 3: SET_OUT_4; break; default : break; } // При включении переключаемся на следующий выход if (state == true) next_out_number = next_out_number == 3 ? 0 : next_out_number + 1; } else { switch (current_out_number) { case 0: RESET_OUT_1; break; case 1: RESET_OUT_2; break; case 2: RESET_OUT_3; break; case 3: RESET_OUT_4; break; default : break; } } } #if 0 // void led_togle(void) { HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_1); } // Индикация нажатия курка void led_signal_on(void) { HAL_GPIO_WritePin(GPIOF, GPIO_PIN_1, GPIO_PIN_RESET); } // Индикация нажатия курка void led_signal_off(void) { HAL_GPIO_WritePin(GPIOF, GPIO_PIN_1, GPIO_PIN_SET); } // Инфракрасный диод void led_inf_on(void) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); } // Инфракрасный диод void led_inf_off(void) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); } // Индикация напряжения АКБ void led_but_on(void) { HAL_GPIO_WritePin(GPIOF, GPIO_PIN_0, GPIO_PIN_RESET); } // Индикация напряжения АКБ void led_but_toggle(void) { HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_0); } #endif