/******************************* (C) LiteMesh ********************************** * @module led * @file led.c * @version 1.0.0 * @date XX.XX.XXXX * $brief Template ******************************************************************************* * @history Version Author Comment * XX.XX.XXXX 1.0.0 Telenkov D.A. First release. ******************************************************************************* */ #include "stm32f4xx.h" #include "led.h" LED_t LED_GreenInt; LED_t LED_RedInt; LED_t LEDS[2]; /** * @brief * @retval */ void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA, ENABLE); LEDS[GREEN_STATUS].GPIOx = GPIOA; LEDS[GREEN_STATUS].GPIO_Pin = GPIO_Pin_3; LEDS[GREEN_STATUS].revers = 1; LEDS[RED_STATUS].GPIOx = GPIOA; LEDS[RED_STATUS].GPIO_Pin = GPIO_Pin_4; LEDS[RED_STATUS].revers = 1; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); LED_Off(GREEN_STATUS); LED_Off(RED_STATUS); } /** * @brief Мигает красным, индикация ошибки */ void LED_Blinky_Red(void) { LED_Toggle(RED_STATUS); } /** * @brief Мигает желтым, индикация режима IAPviaSD */ void LED_Blinky_Yellow(void) { LED_Toggle(GREEN_STATUS); LED_Toggle(RED_STATUS); } /** * @brief Мигает зеленым, индикация режима IAPviaETH */ void LED_Blinky_Green(void) { LED_Toggle(GREEN_STATUS); } /** * @brief */ void LED_On(LED_NAMES_t led) { API_LED_On(LEDS[led].GPIOx, LEDS[led].GPIO_Pin, LEDS[led].revers); } /** * @brief */ void LED_Off(LED_NAMES_t led) { API_LED_Off(LEDS[led].GPIOx, LEDS[led].GPIO_Pin, LEDS[led].revers); } /** * @brief Изменить состояние LED */ void LED_Toggle(LED_NAMES_t led) { LEDS[led].GPIOx->ODR ^= LEDS[led].GPIO_Pin; } /** * @brief Включить LED * @param port * @param pin * @param revers: 0 - для включения LED нужно установить уровень * 1 - для включения LED нужно сбросить уровень * @retval */ void API_LED_On(GPIO_TypeDef* port, uint16_t pin, uint8_t revers) { if (revers == 0) port->BSRRL = pin; else port->BSRRH = pin; } /** * @brief Выключить LED * @param port * @param pin * @param revers: 0 - для выключения LED нужно снять уровень * 1 - для выключения LED нужно установить уровень * @retval */ void API_LED_Off(GPIO_TypeDef* port, uint16_t pin, uint8_t revers) { if (revers == 0) port->BSRRH = pin; else port->BSRRL = pin; } /******************************* (C) LiteMesh *********************************/