gpio.c 3.7 KB

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