gpio.c 3.4 KB

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