led.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /******************************* (C) LiteMesh **********************************
  2. * @module led
  3. * @file led.c
  4. * @version 1.0.0
  5. * @date XX.XX.XXXX
  6. * $brief Template
  7. *******************************************************************************
  8. * @history Version Author Comment
  9. * XX.XX.XXXX 1.0.0 Telenkov D.A. First release.
  10. *******************************************************************************
  11. */
  12. #include "stm32f4xx.h"
  13. #include "led.h"
  14. LED_t LED_GreenInt;
  15. LED_t LED_RedInt;
  16. LED_t LEDS[2];
  17. /**
  18. * @brief
  19. * @retval
  20. */
  21. void LED_Init(void)
  22. {
  23. GPIO_InitTypeDef GPIO_InitStructure;
  24. RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA, ENABLE);
  25. LEDS[GREEN_STATUS].GPIOx = GPIOA;
  26. LEDS[GREEN_STATUS].GPIO_Pin = GPIO_Pin_3;
  27. LEDS[GREEN_STATUS].revers = 1;
  28. LEDS[RED_STATUS].GPIOx = GPIOA;
  29. LEDS[RED_STATUS].GPIO_Pin = GPIO_Pin_4;
  30. LEDS[RED_STATUS].revers = 1;
  31. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
  32. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  33. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  34. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  35. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  36. GPIO_Init(GPIOA, &GPIO_InitStructure);
  37. LED_Off(GREEN_STATUS);
  38. LED_Off(RED_STATUS);
  39. }
  40. /**
  41. * @brief Мигает красным, индикация ошибки
  42. */
  43. void LED_Blinky_Red(void)
  44. {
  45. LED_Toggle(RED_STATUS);
  46. }
  47. /**
  48. * @brief Мигает желтым, индикация режима IAPviaSD
  49. */
  50. void LED_Blinky_Yellow(void)
  51. {
  52. LED_Toggle(GREEN_STATUS);
  53. LED_Toggle(RED_STATUS);
  54. }
  55. /**
  56. * @brief Мигает зеленым, индикация режима IAPviaETH
  57. */
  58. void LED_Blinky_Green(void)
  59. {
  60. LED_Toggle(GREEN_STATUS);
  61. }
  62. /**
  63. * @brief
  64. */
  65. void LED_On(LED_NAMES_t led)
  66. {
  67. API_LED_On(LEDS[led].GPIOx, LEDS[led].GPIO_Pin, LEDS[led].revers);
  68. }
  69. /**
  70. * @brief
  71. */
  72. void LED_Off(LED_NAMES_t led)
  73. {
  74. API_LED_Off(LEDS[led].GPIOx, LEDS[led].GPIO_Pin, LEDS[led].revers);
  75. }
  76. /**
  77. * @brief Изменить состояние LED
  78. */
  79. void LED_Toggle(LED_NAMES_t led)
  80. {
  81. LEDS[led].GPIOx->ODR ^= LEDS[led].GPIO_Pin;
  82. }
  83. /**
  84. * @brief Включить LED
  85. * @param port
  86. * @param pin
  87. * @param revers: 0 - для включения LED нужно установить уровень
  88. * 1 - для включения LED нужно сбросить уровень
  89. * @retval
  90. */
  91. void API_LED_On(GPIO_TypeDef* port, uint16_t pin, uint8_t revers)
  92. {
  93. if (revers == 0)
  94. port->BSRRL = pin;
  95. else
  96. port->BSRRH = pin;
  97. }
  98. /**
  99. * @brief Выключить LED
  100. * @param port
  101. * @param pin
  102. * @param revers: 0 - для выключения LED нужно снять уровень
  103. * 1 - для выключения LED нужно установить уровень
  104. * @retval
  105. */
  106. void API_LED_Off(GPIO_TypeDef* port, uint16_t pin, uint8_t revers)
  107. {
  108. if (revers == 0)
  109. port->BSRRH = pin;
  110. else
  111. port->BSRRL = pin;
  112. }
  113. /******************************* (C) LiteMesh *********************************/