boards/arm/stm32/stm32ldiscovery: modernize board init little bit, userleds and buttons like for other boards

Also fix typo in Kconfig
Update some obsolete comments
nxstyle changes

Signed-off-by: Juha Niskanen <juha.niskanen@haltian.com>
This commit is contained in:
Juha Niskanen 2020-11-21 17:20:38 +02:00 committed by Abdelatif Guettouche
parent afc8eadf5a
commit e9bd306265
8 changed files with 109 additions and 66 deletions

View File

@ -3,7 +3,7 @@
# see the file kconfig-language.txt in the NuttX tools repository.
#
if ARCH_BOARD_STM32FL_DISCOVERY
if ARCH_BOARD_STM32L_DISCOVERY
config STM32LDISCO_QETIMER
int "Timer to use with QE encoder"

View File

@ -199,8 +199,8 @@ LEDs
These LEDs are not used by the board port unless CONFIG_ARCH_LEDS is
defined. In that case, the usage by the board port is defined in
include/board.h and src/up_leds.c. The LEDs are used to encode OS-related
events as follows:
include/board.h and src/stm32_autoleds.c. The LEDs are used to encode
OS-related events as follows:
SYMBOL Meaning LED state
LED3 LED4

View File

@ -52,19 +52,22 @@
* Pre-processor Definitions
****************************************************************************/
/* Clocking *************************************************************************/
/* Four different clock sources can be used to drive the system clock (SYSCLK):
/* Clocking *****************************************************************/
/* Four different clock sources can be used to drive the system clock
* (SYSCLK):
*
* - HSI high-speed internal oscillator clock
* Generated from an internal 16 MHz RC oscillator
* - HSE high-speed external oscillator clock
* Normally driven by an external crystal (X3). However, this crystal is not fitted
* on the STM32L-Discovery board.
* Normally driven by an external crystal (X3). However, this crystal is
* not fitted on the STM32L-Discovery board.
* - PLL clock
* - MSI multispeed internal oscillator clock
* The MSI clock signal is generated from an internal RC oscillator. Seven frequency
* ranges are available: 65.536 kHz, 131.072 kHz, 262.144 kHz, 524.288 kHz, 1.048 MHz,
* 2.097 MHz (default value) and 4.194 MHz.
* The MSI clock signal is generated from an internal RC oscillator.
* Seven frequency ranges are available: 65.536 kHz, 131.072 kHz,
* 262.144 kHz, 524.288 kHz, 1.048 MHz, 2.097 MHz (default value) and
* 4.194 MHz.
*
* The devices have the following two secondary clock sources
* - LSI low-speed internal RC clock
@ -95,13 +98,15 @@
* MHz frequency. This is required to provide a 48 MHz clock to the USB or
* SDIO (SDIOCLK or USBCLK = PLLVCO/2).
* SYSCLK
* The system clock is derived from the PLL VCO divided by the output division factor.
* The system clock is derived from the PLL VCO divided by the output
* division factor.
* Limitations:
* 96 MHz as PLLVCO when the product is in range 1 (1.8V),
* 48 MHz as PLLVCO when the product is in range 2 (1.5V),
* 24 MHz when the product is in range 3 (1.2V).
* Output division to avoid exceeding 32 MHz as SYSCLK.
* The minimum input clock frequency for PLL is 2 MHz (when using HSE as PLL source).
* The minimum input clock frequency for PLL is 2 MHz (when using HSE as
* PLL source).
*/
#define STM32_CFGR_PLLSRC 0 /* Source is 16MHz HSI */
@ -115,8 +120,8 @@
# define STM32_PLL_FREQUENCY (4*STM32_HSI_FREQUENCY) /* PLL VCO Frequency is 64MHz */
#endif
/* Use the PLL and set the SYSCLK source to be the divided down PLL VCO output
* frequency (STM32_PLL_FREQUENCY divided by the PLLDIV value).
/* Use the PLL and set the SYSCLK source to be the divided down PLL VCO
* output frequency (STM32_PLL_FREQUENCY divided by the PLLDIV value).
*/
#define STM32_SYSCLK_SW RCC_CFGR_SW_PLL /* Use the PLL as the SYSCLK */
@ -159,23 +164,25 @@
#define STM32_APB1_TIM6_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM7_CLKIN (STM32_PCLK1_FREQUENCY)
/* LED definitions ******************************************************************/
/* LED definitions **********************************************************/
/* The STM32L-Discovery board has four LEDs. Two of these are controlled by
* logic on the board and are not available for software control:
*
* LD1 COM: LD2 default status is red. LD2 turns to green to indicate that
* communications are in progress between the PC and the ST-LINK/V2.
* LD1 COM: LD2 default status is red. LD2 turns to green to indicate
* that communications are in progress between the PC and the
* ST-LINK/V2.
* LD2 PWR: Red LED indicates that the board is powered.
*
* And two LEDs can be controlled by software:
*
* User LD3: Green LED is a user LED connected to the I/O PB7 of the STM32L152
* MCU.
* User LD4: Blue LED is a user LED connected to the I/O PB6 of the STM32L152
* MCU.
* User LD3: Green LED is a user LED connected to the I/O PB7 of the
* STM32L152 MCU.
* User LD4: Blue LED is a user LED connected to the I/O PB6 of the
* STM32L152 MCU.
*
* If CONFIG_ARCH_LEDS is not defined, then the user can control the LEDs in any
* way. The following definitions are used to access individual LEDs.
* If CONFIG_ARCH_LEDS is not defined, then the user can control the LEDs in
* any way. The following definitions are used to access individual LEDs.
*/
/* LED index values for use with board_userled() */
@ -189,8 +196,9 @@
#define BOARD_LED1_BIT (1 << BOARD_LED1)
#define BOARD_LED2_BIT (1 << BOARD_LED2)
/* If CONFIG_ARCH_LEDs is defined, then NuttX will control the 8 LEDs on board the
* STM32L-Discovery. The following definitions describe how NuttX controls the LEDs:
/* If CONFIG_ARCH_LEDS is defined, then NuttX will control the 2 LEDs on
* board the STM32L-Discovery. The following definitions describe how NuttX
* controls the LEDs:
*
* SYMBOL Meaning LED state
* LED1 LED2
@ -215,12 +223,14 @@
#define LED_ASSERTION 2
#define LED_PANIC 3
/* Button definitions ***************************************************************/
/* The STM32L-Discovery supports two buttons; only one button is controllable by
* software:
/* Button definitions *******************************************************/
/* The STM32L-Discovery supports two buttons; only one button is controllable
* by software:
*
* B1 USER: user and wake-up button connected to the I/O PA0 of the STM32L152RBT6.
* B2 RESET: pushbutton connected to NRST is used to RESET the STM32L152RBT6.
* B1 USER: user and wake-up button connected to the I/O PA0 of the
* STM32L152.
* B2 RESET: pushbutton connected to NRST is used to RESET the STM32L152.
*/
#define BUTTON_USER 0
@ -228,11 +238,12 @@
#define BUTTON_USER_BIT (1 << BUTTON_USER)
/* Alternate Pin Functions **********************************************************/
/* The STM32L-Discovery has no on-board RS-232 driver. Further, there are no USART
* pins that do not conflict with the on board resources, in particular, the LCD:
* Most USART pins are available if the LCD is enabled; USART2 may be used if either
* the LCD or the on-board LEDs are disabled.
/* Alternate Pin Functions **************************************************/
/* The STM32L-Discovery has no on-board RS-232 driver. Further, there
* are no USART pins that do not conflict with the on board resources, in
* particular, the LCD. Most USART pins are available if the LCD is enabled;
* USART2 may be used if either the LCD or the on-board LEDs are disabled.
*
* PA9 USART1_TX LCD glass COM1 P2, pin 22
* PA10 USART1_RX LCD glass COM2 P2, pin 21

View File

@ -39,8 +39,6 @@
#include <nuttx/config.h>
#include <syslog.h>
#include <nuttx/board.h>
#include <arch/board/board.h>
@ -77,7 +75,11 @@
int board_app_initialize(uintptr_t arg)
{
#ifndef CONFIG_BOARD_LATE_INITIALIZE
/* Perform board initialization here */
return stm32_bringup();
#else
return OK;
#endif
}

View File

@ -55,7 +55,8 @@
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* If CONFIG_ARCH_LEDs is defined, then NuttX will control the 2 LEDs on
/* If CONFIG_ARCH_LEDS is defined, then NuttX will control the 2 LEDs on
* board the STM32L-Discovery. The following definitions describe how NuttX
* controls the LEDs:
*

View File

@ -47,14 +47,6 @@
#include "arm_arch.h"
#include "stm32ldiscovery.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
@ -63,16 +55,17 @@
* Name: stm32_boardinitialize
*
* Description:
* All STM32 architectures must provide the following entry point. This entry point
* is called early in the initialization -- after all memory has been configured
* and mapped but before any devices have been initialized.
* All STM32 architectures must provide the following entry point.
* This entry point is called early in the initialization -- after all
* memory has been configured and mapped but before any devices have been
* initialized.
*
****************************************************************************/
void stm32_boardinitialize(void)
{
/* Configure SPI chip selects if 1) SPI is not disabled, and 2) the weak function
* stm32_spidev_initialize() has been brought into the link.
/* Configure SPI chip selects if 1) SPI is not disabled, and 2) the weak
* function stm32_spidev_initialize() has been brought into the link.
*/
#if defined(CONFIG_STM32_SPI1) || defined(CONFIG_STM32_SPI2) || defined(CONFIG_STM32_SPI3)
@ -93,22 +86,23 @@ void stm32_boardinitialize(void)
* Name: board_late_initialize
*
* Description:
* If CONFIG_BOARD_LATE_INITIALIZE is selected, then an additional initialization call
* will be performed in the boot-up sequence to a function called
* board_late_initialize(). board_late_initialize() will be called immediately after
* up_initialize() is called and just before the initial application is started.
* This additional initialization phase may be used, for example, to initialize
* board-specific device drivers.
* If CONFIG_BOARD_LATE_INITIALIZE is selected, then an additional
* initialization call will be performed in the boot-up sequence to a
* function called board_late_initialize(). board_late_initialize() will
* be called immediately after up_initialize() is called and just before
* the initial application is started. This additional initialization
* phase may be used, for example, to initialize board-specific device
* drivers.
*
****************************************************************************/
#ifdef CONFIG_BOARD_LATE_INITIALIZE
void board_late_initialize(void)
{
#ifndef CONFIG_LIB_BOARDCTL
/* Perform board initialization here instead of from the board_app_initialize(). */
/* Perform board initialization here instead of from the
* board_app_initialize().
*/
stm32_bringup();
#endif
}
#endif

View File

@ -39,17 +39,20 @@
#include <nuttx/config.h>
#include <sys/types.h>
#include <sys/mount.h>
#include <syslog.h>
#include <nuttx/board.h>
#include <nuttx/input/buttons.h>
#include <nuttx/leds/userled.h>
#include <nuttx/board.h>
#include <arch/board/board.h>
#include "stm32ldiscovery.h"
#ifdef CONFIG_SENSORS_QENCODER
#include "board_qencoder.h"
# include "board_qencoder.h"
#endif
/****************************************************************************
@ -74,7 +77,34 @@ int stm32_bringup(void)
{
int ret = OK;
#ifdef CONFIG_FS_PROCFS
/* Mount the procfs file system */
ret = mount(NULL, "/proc", "procfs", 0, NULL);
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: Failed to mount procfs at /proc: %d\n", ret);
}
#endif
#if defined(CONFIG_USERLED) && !defined(CONFIG_ARCH_LEDS)
#ifdef CONFIG_USERLED_LOWER
/* Register the LED driver */
ret = userled_lower_initialize("/dev/userleds");
if (ret != OK)
{
syslog(LOG_ERR, "ERROR: userled_lower_initialize() failed: %d\n", ret);
}
#else
/* Enable USER LED support for some other purpose */
board_userled_initialize();
#endif /* CONFIG_USERLED_LOWER */
#endif /* CONFIG_USERLED && !CONFIG_ARCH_LEDS */
#ifdef CONFIG_BUTTONS
#ifdef CONFIG_BUTTONS_LOWER
/* Register the BUTTON driver */
ret = btn_lower_initialize("/dev/buttons");
@ -82,7 +112,12 @@ int stm32_bringup(void)
{
syslog(LOG_ERR, "ERROR: btn_lower_initialize() failed: %d\n", ret);
}
#endif
#else
/* Enable BUTTON support for some other purpose */
board_button_initialize();
#endif /* CONFIG_BUTTONS_LOWER */
#endif /* CONFIG_BUTTONS */
#ifdef CONFIG_STM32_LCD
/* Initialize the SLCD and register the SLCD device as /dev/slcd0 */

View File

@ -34,8 +34,8 @@
*
****************************************************************************/
#ifndef __BOARDS_ARM_STM32_STM32F3DISCOVERY_SRC_STM32F3DISCOVERY_H
#define __BOARDS_ARM_STM32_STM32F3DISCOVERY_SRC_STM32F3DISCOVERY_H
#ifndef __BOARDS_ARM_STM32_STM32LDISCOVERY_SRC_STM32LDISCOVERY_H
#define __BOARDS_ARM_STM32_STM32LDISCOVERY_SRC_STM32LDISCOVERY_H
/****************************************************************************
* Included Files
@ -289,4 +289,4 @@ int stm32_pwm_setup(void);
#endif
#endif /* __ASSEMBLY__ */
#endif /* __BOARDS_ARM_STM32_STM32F3DISCOVERY_SRC_STM32F3DISCOVERY_H */
#endif /* __BOARDS_ARM_STM32_STM32LDISCOVERY_SRC_STM32LDISCOVERY_H */