Add RGB LED support on STM32F103 Minimum board
This commit is contained in:
parent
ca7ca0eb57
commit
4d29b898a6
@ -186,6 +186,20 @@
|
||||
* Note: we don't need redefine GPIO_TIM3_CH3OUT because PB0 is not remap pin.
|
||||
*/
|
||||
|
||||
/* RGB LED
|
||||
*
|
||||
* R = TIM1 CH1 on PA8 | G = TIM2 CH2 on PA1 | B = TIM4 CH4 on PB9
|
||||
*
|
||||
* Note: Pin configs: GPIO_TIM1_CH1OUT ; GPIO_TIM2_CH2OUT ; GPIO_TIM4_CH4OUT
|
||||
*/
|
||||
|
||||
#define RGBLED_RPWMTIMER 1
|
||||
#define RGBLED_RPWMCHANNEL 1
|
||||
#define RGBLED_GPWMTIMER 2
|
||||
#define RGBLED_GPWMCHANNEL 2
|
||||
#define RGBLED_BPWMTIMER 4
|
||||
#define RGBLED_BPWMCHANNEL 4
|
||||
|
||||
/************************************************************************************
|
||||
* Public Data
|
||||
************************************************************************************/
|
||||
|
@ -57,6 +57,10 @@ ifeq ($(CONFIG_PWM),y)
|
||||
CSRCS += stm32_pwm.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_RGBLED),y)
|
||||
CSRCS += stm32_rgbled.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_AUDIO_TONE),y)
|
||||
CSRCS += stm32_tone.c
|
||||
endif
|
||||
|
@ -116,6 +116,17 @@ int stm32_bringup(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_RGBLED
|
||||
/* Configure and initialize the RGB LED. */
|
||||
|
||||
ret = stm32_rgbled_setup();
|
||||
if (ret < 0)
|
||||
{
|
||||
syslog(LOG_ERR, "ERROR: stm32_rgbled_setup() failed: %d\n", ret);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef CONFIG_CL_MFRC522
|
||||
ret = stm32_mfrc522initialize("/dev/rfid0");
|
||||
if (ret < 0)
|
||||
|
194
configs/stm32f103-minimum/src/stm32_rgbled.c
Normal file
194
configs/stm32f103-minimum/src/stm32_rgbled.c
Normal file
@ -0,0 +1,194 @@
|
||||
/************************************************************************************
|
||||
* configs/stm32f4discovery/src/stm32_rgbled.c
|
||||
*
|
||||
* Copyright (C) 2016 Gregory Nutt. All rights reserved.
|
||||
* Author: Alan Carvalho de Assis <acassis@gmail.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Included Files
|
||||
************************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <debug.h>
|
||||
|
||||
#include <nuttx/drivers/pwm.h>
|
||||
#include <nuttx/leds/rgbled.h>
|
||||
#include <arch/board/board.h>
|
||||
|
||||
#include "chip.h"
|
||||
#include "up_arch.h"
|
||||
#include "stm32_pwm.h"
|
||||
#include "stm32f103_minimum.h"
|
||||
|
||||
/************************************************************************************
|
||||
* Pre-processor Definitions
|
||||
************************************************************************************/
|
||||
/* Configuration ********************************************************************/
|
||||
|
||||
#define HAVE_RGBLED 1
|
||||
|
||||
#ifndef CONFIG_PWM
|
||||
# undef HAVE_RGBLED
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_STM32_TIM1
|
||||
# undef HAVE_RGBLED
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_STM32_TIM2
|
||||
# undef HAVE_RGBLED
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_STM32_TIM4
|
||||
# undef HAVE_RGBLED
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_STM32_TIM1_PWM
|
||||
# undef HAVE_RGBLED
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_STM32_TIM2_PWM
|
||||
# undef HAVE_RGBLED
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_STM32_TIM4_PWM
|
||||
# undef HAVE_RGBLED
|
||||
#endif
|
||||
|
||||
#if CONFIG_STM32_TIM1_CHANNEL != RGBLED_RPWMCHANNEL
|
||||
# undef HAVE_PWM
|
||||
#endif
|
||||
|
||||
#if CONFIG_STM32_TIM2_CHANNEL != RGBLED_GPWMCHANNEL
|
||||
# undef HAVE_PWM
|
||||
#endif
|
||||
|
||||
#if CONFIG_STM32_TIM4_CHANNEL != RGBLED_BPWMCHANNEL
|
||||
# undef HAVE_PWM
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_RGBLED
|
||||
|
||||
/************************************************************************************
|
||||
* Public Functions
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Name: stm32_rgbled_setup
|
||||
*
|
||||
* Description:
|
||||
* Initial for support of a connected RGB LED using PWM.
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
int stm32_rgbled_setup(void)
|
||||
{
|
||||
static bool initialized = false;
|
||||
struct pwm_lowerhalf_s *ledr;
|
||||
struct pwm_lowerhalf_s *ledg;
|
||||
struct pwm_lowerhalf_s *ledb;
|
||||
struct pwm_info_s info;
|
||||
int ret;
|
||||
|
||||
/* Have we already initialized? */
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
/* Call stm32_pwminitialize() to get an instance of the PWM interface */
|
||||
|
||||
ledr = stm32_pwminitialize(RGBLED_RPWMTIMER);
|
||||
if (!ledr)
|
||||
{
|
||||
lederr("ERROR: Failed to get the STM32 PWM lower half to LEDR\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Define frequency and duty cycle */
|
||||
|
||||
info.frequency = 100;
|
||||
info.duty = 0;
|
||||
|
||||
/* Initialize LED R */
|
||||
|
||||
ledr->ops->setup(ledr);
|
||||
ledr->ops->start(ledr, &info);
|
||||
|
||||
/* Call stm32_pwminitialize() to get an instance of the PWM interface */
|
||||
|
||||
ledg = stm32_pwminitialize(RGBLED_GPWMTIMER);
|
||||
if (!ledg)
|
||||
{
|
||||
lederr("ERROR: Failed to get the STM32 PWM lower half to LEDG\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Initialize LED G */
|
||||
|
||||
ledg->ops->setup(ledg);
|
||||
ledg->ops->start(ledg, &info);
|
||||
|
||||
/* Call stm32_pwminitialize() to get an instance of the PWM interface */
|
||||
|
||||
ledb = stm32_pwminitialize(RGBLED_BPWMTIMER);
|
||||
if (!ledb)
|
||||
{
|
||||
lederr("ERROR: Failed to get the STM32 PWM lower half to LEDB\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Initialize LED B */
|
||||
|
||||
ledb->ops->setup(ledb);
|
||||
ledb->ops->start(ledb, &info);
|
||||
|
||||
/* Register the RGB LED diver at "/dev/rgbled0" */
|
||||
|
||||
ret = rgbled_register("/dev/rgbled0", ledr, ledg, ledb);
|
||||
if (ret < 0)
|
||||
{
|
||||
lederr("ERROR: rgbled_register failed: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Now we are initialized */
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
#else
|
||||
# error "HAVE_RGBLED is undefined"
|
||||
#endif /* HAVE_RGBLED */
|
@ -138,6 +138,26 @@ int stm32_bringup(void);
|
||||
|
||||
void stm32_spidev_initialize(void);
|
||||
|
||||
/****************************************************************************
|
||||
* Name stm32_rgbled_setup
|
||||
*
|
||||
* Description:
|
||||
* This function is called by board initialization logic to configure the
|
||||
* RGB LED driver. This function will register the driver as /dev/rgbled0.
|
||||
*
|
||||
* Input Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero is returned on success. Otherwise, a negated errno value is
|
||||
* returned to indicate the nature of the failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_RGBLED
|
||||
int stm32_rgbled_setup(void);
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Name: stm32_usbinitialize
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user