123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #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
|