gpio.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #include "stm32f0xx_hal.h"
  2. #include "gpio.h"
  3. #define SET_OUT_1 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET)
  4. #define SET_OUT_2 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET)
  5. #define SET_OUT_3 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET)
  6. #define SET_OUT_4 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET)
  7. #define RESET_OUT_1 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET)
  8. #define RESET_OUT_2 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET)
  9. #define RESET_OUT_3 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET)
  10. #define RESET_OUT_4 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET)
  11. static uint8_t next_out_number = 0;
  12. static uint8_t current_out_number = 0;
  13. //
  14. void gpio_init(void)
  15. {
  16. GPIO_InitTypeDef GPIO_InitStruct = {0};
  17. __HAL_RCC_GPIOA_CLK_ENABLE();
  18. __HAL_RCC_GPIOB_CLK_ENABLE();
  19. // LED - индикация входного сигнала
  20. GPIO_InitStruct.Pin = GPIO_PIN_2;
  21. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  22. GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  23. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  24. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  25. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
  26. }
  27. //
  28. void gpio_set_output(bool state)
  29. {
  30. if (state == true)
  31. {
  32. current_out_number = next_out_number;
  33. switch (next_out_number)
  34. {
  35. case 0:
  36. SET_OUT_1;
  37. break;
  38. case 1:
  39. SET_OUT_2;
  40. break;
  41. case 2:
  42. SET_OUT_3;
  43. break;
  44. case 3:
  45. SET_OUT_4;
  46. break;
  47. default : break;
  48. }
  49. // При включении переключаемся на следующий выход
  50. if (state == true)
  51. next_out_number = next_out_number == 3 ? 0 : next_out_number + 1;
  52. }
  53. else
  54. {
  55. switch (current_out_number)
  56. {
  57. case 0:
  58. RESET_OUT_1;
  59. break;
  60. case 1:
  61. RESET_OUT_2;
  62. break;
  63. case 2:
  64. RESET_OUT_3;
  65. break;
  66. case 3:
  67. RESET_OUT_4;
  68. break;
  69. default : break;
  70. }
  71. }
  72. }
  73. #if 0
  74. //
  75. void led_togle(void)
  76. {
  77. HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_1);
  78. }
  79. // Индикация нажатия курка
  80. void led_signal_on(void)
  81. {
  82. HAL_GPIO_WritePin(GPIOF, GPIO_PIN_1, GPIO_PIN_RESET);
  83. }
  84. // Индикация нажатия курка
  85. void led_signal_off(void)
  86. {
  87. HAL_GPIO_WritePin(GPIOF, GPIO_PIN_1, GPIO_PIN_SET);
  88. }
  89. // Инфракрасный диод
  90. void led_inf_on(void)
  91. {
  92. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
  93. }
  94. // Инфракрасный диод
  95. void led_inf_off(void)
  96. {
  97. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
  98. }
  99. // Индикация напряжения АКБ
  100. void led_but_on(void)
  101. {
  102. HAL_GPIO_WritePin(GPIOF, GPIO_PIN_0, GPIO_PIN_RESET);
  103. }
  104. // Индикация напряжения АКБ
  105. void led_but_toggle(void)
  106. {
  107. HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_0);
  108. }
  109. #endif