RTO1/UE/u01/src/BSP/Led.c
2026-10-08 11:21:04 +02:00

129 lines
3.3 KiB
C

/**
******************************************************************************
* @file Led.h
* @author Julian Grasböck
* @version V1.0.0
* @date 14.11.2017
* @brief Abstracts Led handling.
* @copyright
* Copyright (c) FH OÖ Forschungs und Entwicklungs GmbH,
******************************************************************************
*/
#include "Led.h"
#include "stm32f0xx_gpio.h"
/****************************************************************
* Function declarations
***************************************************************/
/**
* @brief Turns the given LED on or off
* @param led: The LED to switch
* @param action: Indicates if the LED should be turned on or off
* @return TRUE on success else FALSE
*/
static BOOL Led_Switch(const LEDType led, BitAction const action);
/****************************************************************
* User functions
***************************************************************/
/**
* Initializes all LEDs on the board
*/
void Led_Init(void)
{
/* Enable clock for LED gpio port registers */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
/* LEDs are low active! */
/* -> a '0' on the gpio pin turns the LED on */
/* Thatswhy set all gpio pins to '1' before init */
GPIOC->BSRR |= GPIO_Pin_0 | GPIO_Pin_1 |
GPIO_Pin_2 | GPIO_Pin_6 |
GPIO_Pin_7 | GPIO_Pin_8;
/* Init all LEDs */
GPIO_InitTypeDef gpioInit;
GPIO_StructInit(&gpioInit);
gpioInit.GPIO_Mode = GPIO_Mode_OUT;
gpioInit.GPIO_OType = GPIO_OType_PP;
gpioInit.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |
GPIO_Pin_2 | GPIO_Pin_6 |
GPIO_Pin_7 | GPIO_Pin_8;
GPIO_Init(GPIOC, &gpioInit);
}
/**
* Turns the given LED on by using module intern LES_Switch function
*/
BOOL Led_TurnOn(const LEDType led)
{
/* Turn LED on */
/* NOTE: LED is on if gpio is reset -> low active!!! */
return Led_Switch(led, Bit_RESET);
}
/**
* Turns the given LED off by using module intern LES_Switch function
*/
BOOL Led_TurnOff(const LEDType led)
{
/* Turn LED off */
/* NOTE: LED is off if gpio is set -> low active!!! */
return Led_Switch(led, Bit_SET);
}
/****************************************************************
* Static functions
***************************************************************/
/**
* Sets the given LED in the given state
*/
static BOOL Led_Switch(const LEDType led, BitAction const action)
{
uint16_t GPIO_Pin = GPIO_Pin_0;
/* Set gpio pin for the given LED */
switch(led)
{
case LEDType_LED3:
/* Gpio pin for LED3 is initial value! */
break;
case LEDType_LED4:
GPIO_Pin = GPIO_Pin_1;
break;
case LEDType_LED5:
GPIO_Pin = GPIO_Pin_2;
break;
case LEDType_LED_RGB_R:
GPIO_Pin = GPIO_Pin_6;
break;
case LEDType_LED_RGB_G:
GPIO_Pin = GPIO_Pin_7;
break;
case LEDType_LED_RGB_B:
GPIO_Pin = GPIO_Pin_8;
break;
default:
/* None LEDType value for LED given */
return FALSE;
}
/* Write gpio pin */
GPIO_WriteBit(GPIOC, GPIO_Pin, action);
return TRUE;
}