diff --git a/boards/stm32l496g-disco/Kconfig b/boards/stm32l496g-disco/Kconfig
new file mode 100644
index 0000000000000..2df147994f12f
--- /dev/null
+++ b/boards/stm32l496g-disco/Kconfig
@@ -0,0 +1,62 @@
+# Copyright (c) 2020 Inria
+#
+# This file is subject to the terms and conditions of the GNU Lesser
+# General Public License v2.1. See the file LICENSE in the top level
+# directory for more details.
+#
+
+config BOARD
+ default "stm32l496g-disco" if BOARD_STM32L496G_DISCO
+
+config BOARD_STM32L496G_DISCO
+ bool
+ default y
+ select CPU_MODEL_STM32L496AG
+
+ # Put defined MCU peripherals here (in alphabetical order)
+ select HAS_PERIPH_ADC
+ select HAS_PERIPH_DAC
+ select HAS_PERIPH_DMA
+ select HAS_PERIPH_I2C
+ select HAS_PERIPH_LPUART
+ select HAS_PERIPH_RTC
+ select HAS_PERIPH_RTT
+ select HAS_PERIPH_PWM
+ select HAS_PERIPH_SPI
+ select HAS_PERIPH_SPI_MOD
+ select HAS_PERIPH_TIMER
+ select HAS_PERIPH_UART
+ select HAS_PERIPH_UART_HW_FC
+ select HAS_PERIPH_USBDEV
+
+ # Put other features for this board (in alphabetical order)
+ select HAS_ARDUINO
+ select HAS_RIOTBOOT
+ select HAS_TINYUSB_DEVICE
+
+ # Clock configuration
+ select BOARD_HAS_LSE
+
+ select HAVE_SAUL_GPIO
+ select HAVE_FT5X06
+
+ select MODULE_PERIPH_LPUART if MODULE_PERIPH_UART
+ select MODULE_PERIPH_UART_HW_FC if MODULE_PERIPH_UART && !MODULE_PERIPH_SPI_STMOD
+
+source "$(RIOTBOARD)/common/stm32/Kconfig"
+
+config HAS_PERIPH_SPI_MOD
+ bool
+ help
+ Indicates that SPI2 can be connected to STMod+/Pmod connector
+
+config MODULE_PERIPH_SPI_STMOD
+ bool "SPI2 connected to STMod+/Pmod connector"
+ depends on HAS_PERIPH_SPI_MOD
+ default n
+ help
+ By default, solder bridges SB6, SB7, SB8 are closed and USART1 is
+ connected to the Pmod/STMmod+ connector. If these solder bridges are
+ open and solder bridges SB4, SB5 and SB6 are closed instead, SPI2 is
+ connected to the STMmod+/Pmod connector. Say yes to use SPI2 with this
+ board configuration.
diff --git a/boards/stm32l496g-disco/Makefile b/boards/stm32l496g-disco/Makefile
new file mode 100644
index 0000000000000..f8fcbb53a0659
--- /dev/null
+++ b/boards/stm32l496g-disco/Makefile
@@ -0,0 +1,3 @@
+MODULE = board
+
+include $(RIOTBASE)/Makefile.base
diff --git a/boards/stm32l496g-disco/Makefile.dep b/boards/stm32l496g-disco/Makefile.dep
new file mode 100644
index 0000000000000..f1d8250e5cbec
--- /dev/null
+++ b/boards/stm32l496g-disco/Makefile.dep
@@ -0,0 +1,19 @@
+ifneq (,$(filter saul_default,$(USEMODULE)))
+ USEMODULE += saul_gpio
+endif
+
+ifneq (,$(filter stdio_uart,$(USEMODULE)))
+ USEMODULE += periph_uart
+endif
+
+ifneq (,$(filter touch_dev,$(USEMODULE)))
+ USEMODULE += ft5x06
+endif
+
+ifneq (,$(filter periph_uart,$(USEMODULE)))
+ USEMODULE += periph_lpuart
+ ifeq (,$(filter periph_spi_stmod_plus,$(USEMODULE)))
+ # if STMod+ is not used with SPI (default), the UART interface uses HW FC
+ USEMODULE += periph_uart_hw_fc
+ endif
+endif
diff --git a/boards/stm32l496g-disco/Makefile.features b/boards/stm32l496g-disco/Makefile.features
new file mode 100644
index 0000000000000..eaf67e7a6f440
--- /dev/null
+++ b/boards/stm32l496g-disco/Makefile.features
@@ -0,0 +1,23 @@
+CPU = stm32
+CPU_MODEL = stm32l496ag
+
+# Put defined MCU peripherals here (in alphabetical order)
+FEATURES_PROVIDED += periph_adc
+FEATURES_PROVIDED += periph_dac
+FEATURES_PROVIDED += periph_dma
+FEATURES_PROVIDED += periph_i2c
+FEATURES_PROVIDED += periph_lpuart
+FEATURES_PROVIDED += periph_rtc
+FEATURES_PROVIDED += periph_rtt
+FEATURES_PROVIDED += periph_pwm
+FEATURES_PROVIDED += periph_spi
+FEATURES_PROVIDED += periph_spi_stmod
+FEATURES_PROVIDED += periph_timer
+FEATURES_PROVIDED += periph_uart
+FEATURES_PROVIDED += periph_uart_hw_fc
+FEATURES_PROVIDED += periph_usbdev
+
+# Put other features for this board (in alphabetical order)
+FEATURES_PROVIDED += arduino
+FEATURES_PROVIDED += riotboot
+FEATURES_PROVIDED += tinyusb_device
diff --git a/boards/stm32l496g-disco/Makefile.include b/boards/stm32l496g-disco/Makefile.include
new file mode 100644
index 0000000000000..01d78f7a09be1
--- /dev/null
+++ b/boards/stm32l496g-disco/Makefile.include
@@ -0,0 +1,10 @@
+# we use shared STM32 configuration snippets
+INCLUDES += -I$(RIOTBOARD)/common/stm32/include
+
+# this board uses openocd with st-link
+PROGRAMMER ?= openocd
+# this board has an on-board ST-link adapter
+OPENOCD_DEBUG_ADAPTER ?= stlink
+
+# openocd programmer is supported
+PROGRAMMERS_SUPPORTED += openocd
diff --git a/boards/stm32l496g-disco/doc.txt b/boards/stm32l496g-disco/doc.txt
new file mode 100644
index 0000000000000..4b833122c64b3
--- /dev/null
+++ b/boards/stm32l496g-disco/doc.txt
@@ -0,0 +1,167 @@
+/**
+ * @defgroup boards_stm32l496g-disco STM32L496G-DISCO
+ * @ingroup boards
+ * @brief Support for the STM32L496G-DISCO board.
+
+## Overview
+
+The ST [STM32L496G-DISCO](https://www.st.com/en/evaluation-tools/32l496gdiscovery.html)
+is an evaluation board with the ARM Cortex-M4 based ultra-low power
+microcontroller STM32L496AG with 320KB of RAM and 1MB of ROM Flash.
+
+The main features of this board are:
+- 1.54 RGB 240 x 240 pixel TFT color LCD display with capacitive touch screen,
+- SAI audio codec, with stereo output, including analog microphone input
+- Stereo digital microphones
+- 8-Mbit external PSRAM
+- 64-Mbit external QSPI flash
+- USB OTG FS port
+- 8-bit camera interface
+- Stereo headset jack
+- micso-SD card connector
+
+## Current Hardware Support:
+
+| Feature | Support | Remark |
+|------------------------ |:-:| --------------------- |
+| ADC | X | 8 channels |
+| DAC | X | 1 or 2 channels |
+| I2C | X | 2 devices (I2C1 and I2C2) |
+| PWM | X | 3 devices with a total og 6 channels |
+| SPI | X | 1 or 2 devices (SPI1 and SPI2) |
+| Timers | X | 2 devices (TIM2 and TIM3) |
+| UART | X | 3 devices (USART2, LPUART1 and USART1) |
+| USB OTG FS | X | 1 device |
+| TFT color LCD 240 x 40 | - | ST7789H2 used as driver IC (not supported yet) |
+| Capacitive Touch Screen | - | FT3267 used as driver IC (not supported yet) |
+| Stereo microphones | - | |
+| SAI audio codec | - | |
+| External PSRAM | - | Connected to FMC peripheral (not supported yet) |
+| External Quad-SPI Flash | - | QSPI peripheral is not yet supported |
+| SD Card Interface | - | |
+
+## Board Configuration (sorted by peripheral):
+
+| RIOT Peripheral | GPIO | Connector pin | Remark |
+|:------------------|:----:|:--------------|:----------|
+| ADC_LINE(0) | PC4 | Arduino A0 | ADC1 IN13 |
+| ADC_LINE(1) | PC1 | Arduino A1 | ADC1 IN2 |
+| ADC_LINE(2) | PC3 | Arduino A2 | ADC1 IN4 |
+| ADC_LINE(3) | PF10 | Arduino A3 | ADC3 IN13 |
+| ADC_LINE(4) | PA1 | Arduino A4 | ADC1 IN6 |
+| ADC_LINE(5) | PC0 | Arduino A5 | ADC2 IN13 |
+| ADC_LINE(6) | - | V_REF_INT | ADC1 IN0 connected to V_REFINT |
+| ADC_LINE(7) | PA4 | STmod+ ADC | ADC1 IN9 if `periph_dac` is not used |
+| ADC_LINE(7) | - | - | ADC2 IN17 connected to DAC1 if `periph_dac` is used |
+| DAC_LINE(0) | PA4 | STmod+ ADC | DAC1 if `periph_dac` is used |
+| DAC_LINE(1) | PA5 | Arduino D13 | DAC2 if `periph_spi` is not used |
+| I2C_DEV(0) SCL | PB8 | Arduino D15 | I2C1 SCL, also connected to STmod+ SCL |
+| I2C_DEV(0) SDA | PB7 | Arduino D14 | I2C1 SDA, also connected to STmod+ SDA |
+| I2C_DEV(1) SCL | PH14 | - | I2C2 SCL, used for MFX_x, CODEC_x, CTP_x, DCMI_x |
+| I2C_DEV(1) SDA | PB14 | - | I2C2 SDA, used for MFX_x, CODEC_x, CTP_x, DCMI_x |
+| PWM_DEV(0) CH0 | PH15 | Arduino D3 | TIM8_CH3N |
+| PWM_DEV(0) CH1 | PI6 | Arduino D6 | TIM8_CH2 |
+| PWM_DEV(0) CH2 | PH13 | Arduino D9 | TIM8_CH1N |
+| PWM_DEV(1) CH0 | PB9 | Arduino D5 | TIM4_CH4 |
+| PWM_DEV(2) CH0 | PA0 | STmod+ PWM | TIM5_CH1 |
+| SPI_DEV(0) SCK | PA5 | Arduino D13 | SPI1 SCK |
+| SPI_DEV(0) MISO | PB4 | Arduino D12 | SPI1 MISO |
+| SPI_DEV(0) MOSI | PB5 | Arduino D11 | SPI1 MOSI |
+| SPI_DEV(0) CS | PA15 | Arduino D10 | SPI1 NSS |
+| SPI_DEV(1) SCK | PI1 | STmod+ CLK, Pmod CLK | SPI2 SCK (*1) |
+| SPI_DEV(1) MISO | PI2 | STmod+ MISO, Pmod MISO | SPI2 MISO (*1) |
+| SPI_DEV(1) MOSI | PB15 | STmod+ MOSI, Pmod MOSI | SPI2 MOSI (*1) |
+| SPI_DEV(1) CS | PG1 | STmod+ CS, Pmod CS | SPI2 NSS (*1) |
+| UART_DEV(0) RX | PD6 | ST-Link | USART2 RX |
+| UART_DEV(0) TX | PA2 | ST-Link | USART2 TX |
+| UART_DEV(1) RX | PD6 | Arduino D0 | LPUART1 RX |
+| UART_DEV(1) TX | PA2 | Arduino D1 | LPUART1 TX |
+| UART_DEV(2) RX | PG10 | STmod+ RX, Pmod RX | USART1 RX (*2) |
+| UART_DEV(2) TX | PB6 | STmod+ TX, Pmod TX | USART1 TX (*2) |
+| UART_DEV(2) CTS | PG11 | STmod+ CTS, Pmod CTS | USART1 CTS (*2) |
+| UART_DEV(2) RTS | PG12 | STmod+ RTS, Pmod RTS | USART1 RTS (*2) |
+
+
+@note
+- (*1) SPI2 is only available if module `periph_spi_stmod` is used.
+ SB4, SB5, SB9 must be closed to connect SPI2 to STmod+ and Pmod.
+- (*2) USART1 is only available if module `periph_spi_stmod` is not used.
+ SB6, SB7, SB8 must be closed to connect USART1 to STmod+ and Pmod
+ (default).
+
+## Board Configuration (sorted by connectors):
+
+| Connector | RIOT Peripheral | GPIO | Remark |
+|:----------------|:------------------|:----:|:-----------|
+| Arduino A0 | ADC_LINE(0) | PC4 | ADC1 IN13 |
+| Arduino A1 | ADC_LINE(1) | PC1 | ADC1 IN2 |
+| Arduino A2 | ADC_LINE(2) | PC3 | ADC1 IN4 |
+| Arduino A3 | ADC_LINE(3) | PF10 | ADC3 IN13 |
+| Arduino A4 | ADC_LINE(4) | PA1 | ADC1 IN6 |
+| Arduino A5 | ADC_LINE(5) | PC0 | ADC2 IN13 |
+| Arduino D0 | UART_DEV(1) RX | PD6 | LPUART1 RX |
+| Arduino D1 | UART_DEV(1) TX | PA2 | LPUART1 TX |
+| Arduino D3 | PWM_DEV(0) CH0 | PH15 | TIM8_CH3N |
+| Arduino D6 | PWM_DEV(0) CH1 | PI6 | TIM8_CH2 |
+| Arduino D5 | PWM_DEV(1) CH0 | PB9 | TIM4_CH4 |
+| Arduino D9 | PWM_DEV(0) CH2 | PH13 | TIM8_CH1N |
+| Arduino D10 | SPI_DEV(0) CS | PA15 | SPI1 CS |
+| Arduino D11 | SPI_DEV(0) MOSI | PB5 | SPI1 MOSI |
+| Arduino D12 | SPI_DEV(0) MISO | PB4 | SPI1 MISO |
+| Arduino D13 | SPI_DEV(0) SCK | PA5 | SPI1 SCK |
+| Arduino D13 | DAC_LINE(1) | PA5 | DAC2 if `periph_spi` is not used |
+| Arduino D14 | I2C_DEV(0) SDA | PB7 | I2C1 SDA |
+| Arduino D15 | I2C_DEV(0) SCL | PB8 | I2C1 SCL |
+| Pmod SPI CLK | SPI_DEV(1) SCK | PI1 | SPI2 SCK (*1) |
+| Pmod SPI CS | SPI_DEV(4) CS | PG1 | SPI2 NSS (*1) |
+| Pmod SPI MISO | SPI_DEV(2) MISO | PI2 | SPI2 MISO (*1) |
+| Pmod SPI MOSI | SPI_DEV(3) MOSI | PB15 | SPI2 MOSI (*1) |
+| Pmod UART CTS | UART_DEV(2) CTS | PG11 | USART1 CTS (*2) |
+| Pmod UART RTS | UART_DEV(2) RTS | PG12 | USART1 RTS (*2) |
+| Pmod UART RX | UART_DEV(2) RX | PG10 | USART1 RX (*2) |
+| Pmod UART TX | UART_DEV(2) TX | PB6 | USART1 TX (*2) |
+| STmod+ ADC | ADC_LINE(7) | PA4 | ADC1 IN9 if `periph_dac` is not used |
+| STmod+ ADC | DAC_LINE(0) | PA4 | DAC1 if `periph_dac` is used |
+| STmod+ PWM | PWM_DEV(2) CH0 | PA0 | TIM5_CH1 |
+| STmod+ I2C SCL | I2C_DEV(0) SCL | PB8 | I2C2 SCL |
+| STmod+ I2C SDA | I2C_DEV(0) SDA | PB7 | I2C2 SDA |
+| STmod+ SPI CLK | SPI_DEV(1) SCK | PI1 | SPI2 SCK (*1) |
+| STmod+ SPI CS | SPI_DEV(1) CS | PG1 | SPI2 NSS (*1) |
+| STmod+ SPI MISO | SPI_DEV(1) MISO | PI2 | SPI2 MISO (*1) |
+| STmod+ SPI MOSI | SPI_DEV(1) MOSI | PB15 | SPI2 MOSI (*1) |
+| STmod+ UART CTS | UART_DEV(2) CTS | PG11 | USART1 CTS (*2) |
+| STmod+ UART RTS | UART_DEV(2) RTS | PG12 | USART1 RTS (*2) |
+| STmod+ UART RX | UART_DEV(2) RX | PG10 | USART1 RX (*2) |
+| STmod+ UART TX | UART_DEV(2) TX | PB6 | USART1 TX (*2) |
+| ST-Link | UART_DEV(0) RX | PD6 | USART2 RX |
+| ST-Link | UART_DEV(0) TX | PA2 | USART2 TX |
+
+
+@note
+- (*1) SPI2 is only available if module `periph_spi_stmod` is used.
+ SB4, SB5, SB9 must be closed to connect SPI2 to STmod+ and Pmod.
+- (*2) USART1 is only available if module `periph_spi_stmod` is not used.
+ SB6, SB7, SB8 must be closed to connect USART1 to STmod+ and Pmod
+ (default).
+
+## Flashing the device
+
+The STM32L496G-DISCO board includes an on-board ST-LINK programmer and can be
+flashed using OpenOCD. The board can be flashed with:
+
+```
+make BOARD=stm32l496g-disco flash
+```
+
+and debug via GDB with
+```
+make BOARD=stm32l496g-disco debug
+```
+
+## Supported Toolchains
+
+For using the STM32L496G-DISCO board we recommend the usage of the
+[GNU Tools for ARM Embedded Processors](https://launchpad.net/gcc-arm-embedded)
+toolchain.
+
+ */
diff --git a/boards/stm32l496g-disco/include/arduino_board.h b/boards/stm32l496g-disco/include/arduino_board.h
new file mode 100644
index 0000000000000..299855dd09e5f
--- /dev/null
+++ b/boards/stm32l496g-disco/include/arduino_board.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2017 Inria
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License v2.1. See the file LICENSE in the top level
+ * directory for more details.
+ */
+
+/**
+ * @ingroup boards_stm32l496g-disco
+ * @{
+ *
+ * @file
+ * @brief Board specific configuration for the Arduino API
+ *
+ * @author Alexandre Abadie
+ */
+
+#ifndef ARDUINO_BOARD_H
+#define ARDUINO_BOARD_H
+
+#include "arduino_pinmap.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief Look-up table for the Arduino's digital pins
+ */
+static const gpio_t arduino_pinmap[] = {
+ ARDUINO_PIN_0,
+ ARDUINO_PIN_1,
+ ARDUINO_PIN_2,
+ ARDUINO_PIN_3,
+ ARDUINO_PIN_4,
+ ARDUINO_PIN_5,
+ ARDUINO_PIN_6,
+ ARDUINO_PIN_7,
+ ARDUINO_PIN_8,
+ ARDUINO_PIN_9,
+ ARDUINO_PIN_10,
+ ARDUINO_PIN_11,
+ ARDUINO_PIN_12,
+ ARDUINO_PIN_13,
+ ARDUINO_PIN_14,
+ ARDUINO_PIN_15,
+ ARDUINO_PIN_A0,
+ ARDUINO_PIN_A1,
+ ARDUINO_PIN_A2,
+ ARDUINO_PIN_A3,
+ ARDUINO_PIN_A4,
+ ARDUINO_PIN_A5,
+};
+
+/**
+ * @brief Look-up table for the Arduino's analog pins
+ */
+static const adc_t arduino_analog_map[] = {
+ ARDUINO_A0,
+ ARDUINO_A1,
+ ARDUINO_A2,
+ ARDUINO_A3,
+ ARDUINO_A4,
+ ARDUINO_A5,
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARDUINO_BOARD_H */
+/** @} */
diff --git a/boards/stm32l496g-disco/include/arduino_pinmap.h b/boards/stm32l496g-disco/include/arduino_pinmap.h
new file mode 100644
index 0000000000000..73632548dfa03
--- /dev/null
+++ b/boards/stm32l496g-disco/include/arduino_pinmap.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2023 Gunar Schorcht
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License v2.1. See the file LICENSE in the top level
+ * directory for more details.
+ */
+
+/**
+ * @ingroup boards_stm32l496g-disco
+ * @{
+ *
+ * @file
+ * @brief Mapping from MCU pins to Arduino pins for the STM32L496G-DISCO board
+ *
+ * @author Gunar Schorcht
+ */
+
+#ifndef ARDUINO_PINMAP_H
+#define ARDUINO_PINMAP_H
+
+#include "periph/gpio.h"
+#include "periph/adc.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @name Mapping of MCU pins to Arduino pins
+ * @{
+ */
+#define ARDUINO_PIN_0 GPIO_PIN(PORT_G, 8)
+#define ARDUINO_PIN_1 GPIO_PIN(PORT_G, 7)
+#define ARDUINO_PIN_2 GPIO_PIN(PORT_G, 13)
+#define ARDUINO_PIN_3 GPIO_PIN(PORT_H, 15)
+#define ARDUINO_PIN_4 GPIO_PIN(PORT_I, 14)
+#define ARDUINO_PIN_5 GPIO_PIN(PORT_B, 9)
+#define ARDUINO_PIN_6 GPIO_PIN(PORT_I, 6)
+#define ARDUINO_PIN_7 GPIO_PIN(PORT_G, 6)
+#define ARDUINO_PIN_8 GPIO_PIN(PORT_G, 15)
+#define ARDUINO_PIN_9 GPIO_PIN(PORT_H, 13)
+#define ARDUINO_PIN_10 GPIO_PIN(PORT_A, 15)
+#define ARDUINO_PIN_11 GPIO_PIN(PORT_B, 5)
+#define ARDUINO_PIN_12 GPIO_PIN(PORT_B, 4)
+#define ARDUINO_PIN_13 GPIO_PIN(PORT_A, 5)
+#define ARDUINO_PIN_14 GPIO_PIN(PORT_B, 7)
+#define ARDUINO_PIN_15 GPIO_PIN(PORT_B, 8)
+
+#define ARDUINO_PIN_A0 GPIO_PIN(PORT_C, 4)
+#define ARDUINO_PIN_A1 GPIO_PIN(PORT_C, 1)
+#define ARDUINO_PIN_A2 GPIO_PIN(PORT_C, 3)
+#define ARDUINO_PIN_A3 GPIO_PIN(PORT_F, 10)
+#define ARDUINO_PIN_A4 GPIO_PIN(PORT_A, 1)
+#define ARDUINO_PIN_A5 GPIO_PIN(PORT_C, 0)
+/** @} */
+
+/**
+ * @name Mapping of Arduino analog pins to RIOT ADC lines
+ * @{
+ */
+#define ARDUINO_A0 ADC_LINE(0)
+#define ARDUINO_A1 ADC_LINE(1)
+#define ARDUINO_A2 ADC_LINE(2)
+#define ARDUINO_A3 ADC_LINE(3)
+#define ARDUINO_A4 ADC_LINE(4)
+#define ARDUINO_A5 ADC_LINE(5)
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARDUINO_PINMAP_H */
+/** @} */
diff --git a/boards/stm32l496g-disco/include/board.h b/boards/stm32l496g-disco/include/board.h
new file mode 100644
index 0000000000000..2264bf550b988
--- /dev/null
+++ b/boards/stm32l496g-disco/include/board.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2018 Inria
+ * 2023 Gunar Schorcht
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License v2.1. See the file LICENSE in the top level
+ * directory for more details.
+ */
+
+/**
+ * @ingroup boards_stm32l496g-disco
+ * @{
+ *
+ * @file
+ * @brief Board specific definitions for the STM32L496G-DISCO board
+ *
+ * @author Alexandre Abadie
+ * @author Gunar Schorcht
+ */
+
+#ifndef BOARD_H
+#define BOARD_H
+
+#include
+
+#include "cpu.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @name LCD Backlight control defines
+ * @{
+ */
+#define BACKLIGHT_PIN GPIO_PIN(PORT_I, 0) /**< Backlight pin */
+#define BACKLIGHT_MASK (1 << 0) /**< Backlight pin mask */
+
+/** Set the backlight pin */
+#define BACKLIGHT_ON (GPIOK->BSRR = BACKLIGHT_MASK)
+/** Clear the backlight pin */
+#define BACKLIGHT_OFF (GPIOK->BSRR = (BACKLIGHT_MASK << 16))
+/** Toggle the backlight pin */
+#define BACKLIGHT_TOGGLE (GPIOK->ODR ^= BACKLIGHT_MASK)
+/** @} */
+
+/**
+ * @name LCD display definitions
+ * @{
+ */
+#define LCD_DISP_PIN GPIO_PIN(PORT_H, 0) /**< LCD screen enable pin */
+#define LCD_SCREEN_WIDTH 240 /**< LCD screen width */
+#define LCD_SCREEN_HEIGHT 240 /**< LCD screen height */
+/** @} */
+
+/**
+ * @name LED pin definitions and handlers
+ *
+ * The board has 3 user LEDs:
+ * - LD1 orange, active HIGH (not directly usable, connected to MFX GPIO4
+ * - LD2 green, active HIGH (connected to PB13)
+ * - LD3 green, active LOW (connected to PA5)
+ * @{
+ */
+#define LED0_PIN_NUM 13 /**< green LED (LD2) pin */
+#define LED0_PORT_NUM PORT_B /**< green LED (LD2) port */
+
+#define LED1_PIN_NUM 5 /**< green LED (LD3) pin */
+#define LED1_PORT_NUM PORT_A /**< green LED (LD3) port */
+#define LED1_IS_INVERTED 1 /**< green LED (LD3) is LOW active */
+/** @} */
+
+/**
+ * @name Joystick buttons
+ *
+ * The board has a joystick that is exposed as user buttons.
+ * @{
+ */
+#define BTN0_PIN GPIO_PIN(PORT_C, 13) /**< Center button pin */
+#define BTN0_MODE GPIO_IN_PD /**< Center button mode */
+
+#define BTN1_PIN GPIO_PIN(PORT_I, 9) /**< Left button pin */
+#define BTN1_MODE GPIO_IN_PD /**< Left button mode */
+
+#define BTN2_PIN GPIO_PIN(PORT_I, 10) /**< Down button pin */
+#define BTN2_MODE GPIO_IN_PD /**< Down button mode */
+
+#define BTN3_PIN GPIO_PIN(PORT_F, 11) /**< Right button pin */
+#define BTN3_MODE GPIO_IN_PD /**< Right button mode */
+
+#define BTN4_PIN GPIO_PIN(PORT_I, 8) /**< Up button pin */
+#define BTN4_MODE GPIO_IN_PD /**< Up button mode */
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include "stm32_leds.h"
+
+#endif /* BOARD_H */
+/** @} */
diff --git a/boards/stm32l496g-disco/include/gpio_params.h b/boards/stm32l496g-disco/include/gpio_params.h
new file mode 100644
index 0000000000000..672decc3fb57e
--- /dev/null
+++ b/boards/stm32l496g-disco/include/gpio_params.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2018 Inria
+ * 2023 Gunar Schorcht
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License v2.1. See the file LICENSE in the top level
+ * directory for more details.
+ */
+
+/**
+ * @ingroup boards_stm32l496g-disco
+ * @{
+ *
+ * @file
+ * @brief Board specific configuration of direct mapped GPIOs
+ *
+ * @author Alexandre Abadie
+ * @author Gunar Schorcht
+ */
+
+#ifndef GPIO_PARAMS_H
+#define GPIO_PARAMS_H
+
+#include "board.h"
+#include "saul/periph.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief GPIO pin configuration
+ */
+static const saul_gpio_params_t saul_gpio_params[] =
+{
+ {
+ .name = "LD2",
+ .pin = LED0_PIN,
+ .mode = GPIO_OUT
+ .flags = SAUL_GPIO_INIT_CLEAR,
+ },
+ {
+ .name = "LD3",
+ .pin = LED1_PIN,
+ .mode = GPIO_OUT,
+ .flags = SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR,
+ },
+ {
+ .name = "Joystick (Center)",
+ .pin = BTN0_PIN,
+ .mode = BTN0_MODE
+ },
+ {
+ .name = "Joystick (Left)",
+ .pin = BTN1_PIN,
+ .mode = BTN1_MODE
+ },
+ {
+ .name = "Joystick (Down)",
+ .pin = BTN2_PIN,
+ .mode = BTN2_MODE
+ },
+ {
+ .name = "Joystick (Right)",
+ .pin = BTN3_PIN,
+ .mode = BTN3_MODE
+ },
+ {
+ .name = "Joystick (Up)",
+ .pin = BTN4_PIN,
+ .mode = BTN4_MODE
+ },
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GPIO_PARAMS_H */
+/** @} */
diff --git a/boards/stm32l496g-disco/include/periph_conf.h b/boards/stm32l496g-disco/include/periph_conf.h
new file mode 100644
index 0000000000000..e8112844f872c
--- /dev/null
+++ b/boards/stm32l496g-disco/include/periph_conf.h
@@ -0,0 +1,430 @@
+/*
+ * Copyright (C) 2018 Inria
+ * 2023 Gunar Schorcht
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License v2.1. See the file LICENSE in the top level
+ * directory for more details.
+ */
+
+/**
+ * @ingroup boards_stm32l496g-disco
+ * @{
+ *
+ * @file
+ * @brief Peripheral MCU configuration for the STM32L496G-DISCO board
+ *
+ * @author Alexandre Abadie
+ * @author Gunar Schorcht
+ */
+
+#ifndef PERIPH_CONF_H
+#define PERIPH_CONF_H
+
+/* Add specific clock configuration (HSE, LSE) for this board here */
+#ifndef CONFIG_BOARD_HAS_LSE
+#define CONFIG_BOARD_HAS_LSE 1
+#endif
+
+#include "periph_cpu.h"
+#include "clk_conf.h"
+#include "cfg_rtt_default.h"
+#include "cfg_usb_otg_fs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @name DMA streams configuration
+ * @{
+ */
+static const dma_conf_t dma_config[] = {
+ { .stream = 1 }, /* DMA1 Channel 2 - SPI1_RX */
+ { .stream = 2 }, /* DMA1 Channel 3 - SPI1_TX */
+ { .stream = 3 }, /* DMA1 Channel 4 - SPI2_RX / USART1_TX */
+ { .stream = 4 }, /* DMA1 Channel 5 - SPI2_TX */
+ { .stream = 6 }, /* DMA1 Channel 7 - USART2_TX */
+ { .stream = 13 }, /* DMA2 Channel 6 - LPUART1_TX */
+ { .stream = 11 }, /* DMA2 Channel 4 - SDMMC1 */
+};
+
+#define DMA_0_ISR isr_dma1_channel2
+#define DMA_1_ISR isr_dma1_channel3
+#define DMA_2_ISR isr_dma1_channel4
+#define DMA_3_ISR isr_dma1_channel5
+#define DMA_4_ISR isr_dma1_channel7
+#define DMA_5_ISR isr_dma2_channel6
+#define DMA_6_ISR isr_dma2_channel4
+
+#define DMA_NUMOF ARRAY_SIZE(dma_config)
+/** @} */
+
+/**
+ * @name ADC configuration
+ *
+ * Note that we do not configure all ADC channels, and not in the STM32L496AG
+ * order. Instead, we define 6 ADC channels for the Arduino header pins
+ * A0-A5, one channel for V_REFINT and one channel that is used for the
+ * STMod+ header pin STMOD+_ADC or the DAC1 output if `periph_dac` is used.
+ *
+ * The pin assignment can be found in board's user manual in Table 15, page 26
+ * (Arduino compatible connectors) and Table 26, page 35 (32L496GDISCOVERY
+ * Discovery board I/O assignment). These tables are showing pin assignments and
+ * information about ADC - a text similar to `ADC[X]_IN[Y]`, where: \n
+ * `[X]` - describes used device - indexed from 0,
+ * for example `ADC3_IN13` is device 2, \n
+ * `[Y]` - describes used channel - indexed from 1,
+ * for example `ADC3_IN13` is channel 13
+ *
+ * Channels shared by multiple ADCs are referred to as `ADC[XXX]_IN[Y]`.
+ * `ADC12_IN13` means for example that channel 13 can be used either with ADC1
+ * or with ADC2.
+ *
+ * Output from internal reference voltage V_REFINT is connected to ADC1
+ * channel 0.
+ *
+ * The V_REF+ pin is not connected to an external reference voltage on the
+ * board by default. Instead the the VREFBUF must be used (`VREFBUF_ENABLE=1`).
+ * The output voltage of VREF is around 2.048 V in this case.
+ *
+ * If an external reference voltage is used as V_REF+, either by soldering
+ * R18 to use V_DDA as reference voltage or by using the AVVD pin of the
+ * Arduino connector by closing the solder bridge SB2, the VREFBUF must not
+ * be enabled by defining `VREFBUF_ENABLE=0`.
+ *
+ * @{
+ */
+
+static const adc_conf_t adc_config[] = {
+ { .pin = GPIO_PIN(PORT_C, 4), .dev = 0, .chan = 13 }, /* A0, ADC12_IN13 */
+ { .pin = GPIO_PIN(PORT_C, 1), .dev = 0, .chan = 2 }, /* A1, ADC123_IN2 */
+ { .pin = GPIO_PIN(PORT_C, 3), .dev = 0, .chan = 4 }, /* A2, ADC123_IN4 */
+ { .pin = GPIO_PIN(PORT_F, 10), .dev = 2, .chan = 13 }, /* A3, ADC3_IN13 */
+ { .pin = GPIO_PIN(PORT_A, 1), .dev = 0, .chan = 6 }, /* A4, ADC12_IN6, SB26 closed */
+ { .pin = GPIO_PIN(PORT_C, 0), .dev = 1, .chan = 13 }, /* A5, ADC12_IN13, SB28 closed */
+ { .pin = GPIO_UNDEF, .dev = 0, .chan = 0 }, /* V_REFINT, ADC1_IN0 */
+#ifndef MODULE_PERIPH_DAC
+ { .pin = GPIO_PIN(PORT_A, 4), .dev = 0, .chan = 9 }, /* STMOD+_ADC, ADC12_IN9 */
+#else
+ { .pin = GPIO_UNDEF, .dev = 1, .chan = 17 }, /* DAC1, ADC2_IN17 */
+#endif
+};
+
+/**
+ * @brief Number of ADC devices
+ */
+#define ADC_NUMOF ARRAY_SIZE(adc_config)
+
+/**
+ * @brief V_REFINT ADC line
+ */
+#define VREFINT_ADC ADC_LINE(6)
+
+/**
+ * @brief Enable VREFBUF as V_REF+
+ *
+ * If an external reference voltage is used as V_REF+, either by soldering
+ * R18 to use V_DDA as reference voltage or by using the AVVD pin of the
+ * Arduino connector by closing the solder bridge SB2, the VREFBUF must not
+ * be enabled by defining `VREFBUF_ENABLE=0`.
+ */
+#ifndef VREFBUF_ENABLE
+#define VREFBUF_ENABLE (1)
+#endif
+
+/** @} */
+
+/**
+ * @name DAC configuration
+ *
+ * The V_REF+ pin is not connected to an external reference voltage on the
+ * board by default. Instead the the VREFBUF must be used (`VREFBUF_ENABLE=1`).
+ * The output voltage of VREF is around 2.048 V in this case.
+ *
+ * @{
+ */
+static const dac_conf_t dac_config[] = {
+ { GPIO_PIN(PORT_A, 4), .chan = 0 }, /* STMod+_ADC pin */
+#ifndef MODULE_PERIPH_SPI
+ { GPIO_PIN(PORT_A, 5), .chan = 1 }, /* Arduino D13, conflicts with SPI_DEV(0) */
+#endif
+};
+/** @}*/
+
+/**
+ * @brief Number of DACs
+ * @{
+ */
+#define DAC_NUMOF ARRAY_SIZE(dac_config)
+/** @} */
+
+/**
+ * @name I2C configuration
+ *
+ * I2C1 is exposed at Arduino Connector D14/D15 (SDA/SCL) and STmod+ connector
+ * I2C2 is used for MFX (Multi Function eXpander)
+ * @{
+ */
+static const i2c_conf_t i2c_config[] = {
+ { /* Shared between Arduino D14/D15 and STMod+ connector */
+ .dev = I2C1,
+ .speed = I2C_SPEED_NORMAL,
+ .scl_pin = GPIO_PIN(PORT_B, 8),
+ .sda_pin = GPIO_PIN(PORT_B, 7),
+ .scl_af = GPIO_AF4,
+ .sda_af = GPIO_AF4,
+ .bus = APB1,
+ .rcc_mask = RCC_APB1ENR1_I2C1EN,
+ .rcc_sw_mask = RCC_CCIPR_I2C1SEL_1, /* HSI (16 MHz) */
+ .irqn = I2C1_ER_IRQn,
+ },
+ { /* Multi Function eXpander (MFX_x) I2C Address 0x42,
+ * Stereo Codec Cirrus Logic CS42L51-CNZ (CODEC_x), I2C Address 0x4a (AD0 = 0)
+ * Capacitive Touch Panel (CTP_x) FT6206, I2C Address 0x38
+ * Digital Camera Module (DCMI_x),
+ */
+ .dev = I2C2,
+ .speed = I2C_SPEED_NORMAL,
+ .scl_pin = GPIO_PIN(PORT_H, 4),
+ .sda_pin = GPIO_PIN(PORT_B, 14),
+ .scl_af = GPIO_AF4,
+ .sda_af = GPIO_AF4,
+ .bus = APB1,
+ .rcc_mask = RCC_APB1ENR1_I2C2EN,
+ .rcc_sw_mask = RCC_CCIPR_I2C2SEL_1, /* HSI (16 MHz) */
+ .irqn = I2C2_ER_IRQn,
+ },
+};
+
+#define I2C_0_ISR isr_i2c1_er
+#define I2C_1_ISR isr_i2c2_er
+
+#define I2C_NUMOF ARRAY_SIZE(i2c_config)
+/** @} */
+
+/**
+ * @name PWM configuration
+ *
+ * Four PWM channels are defined for the Arduino header pins D3, D5, D6 and D9,
+ * and one for the STMod+ header pin STMOD+_PWM.
+ *
+ * The pin assignment can be found in board's user manual in Table 15, page 26
+ * (Arduino compatible connectors) and Table 26, page 35 (32L496GDISCOVERY
+ * Discovery board I/O assignment).
+ *
+ * @{
+ */
+static const pwm_conf_t pwm_config[] = {
+ {
+ .dev = TIM8,
+ .rcc_mask = RCC_APB2ENR_TIM8EN,
+ .chan = { { .pin = GPIO_PIN(PORT_H, 15), .cc_chan = 6}, /* D3, TIM8_CH3N */
+ { .pin = GPIO_PIN(PORT_I, 6), .cc_chan = 1}, /* D6, TIM8_CH2 */
+ { .pin = GPIO_PIN(PORT_H, 13), .cc_chan = 4}, /* D9, TIM8_CH1N */
+ { .pin = GPIO_UNDEF, .cc_chan = 0} },
+ .af = GPIO_AF3,
+ .bus = APB2
+ },
+ {
+ .dev = TIM4,
+ .rcc_mask = RCC_APB1ENR1_TIM4EN,
+ .chan = { { .pin = GPIO_PIN(PORT_B, 9), .cc_chan = 3}, /* D5, TIM4_CH4 */
+ { .pin = GPIO_UNDEF, .cc_chan = 0},
+ { .pin = GPIO_UNDEF, .cc_chan = 0},
+ { .pin = GPIO_UNDEF, .cc_chan = 0} },
+ .af = GPIO_AF2,
+ .bus = APB1
+ },
+ {
+ .dev = TIM5,
+ .rcc_mask = RCC_APB1ENR1_TIM5EN,
+ .chan = { { .pin = GPIO_PIN(PORT_A, 0), .cc_chan = 0}, /* STMOD+_PWM, TIM5_CH1 */
+ { .pin = GPIO_UNDEF, .cc_chan = 0},
+ { .pin = GPIO_UNDEF, .cc_chan = 0},
+ { .pin = GPIO_UNDEF, .cc_chan = 0} },
+ .af = GPIO_AF2,
+ .bus = APB1
+ },
+};
+
+#define PWM_NUMOF ARRAY_SIZE(pwm_config)
+/** @} */
+
+/**
+ * @name SPI configuration
+ *
+ * @note By default, solder bridges SB6, SB7, SB8 are closed and USART1 is
+ * connected to the Pmod/STMmod+ connector. To use SPI2 on the Pmod/STMmod+
+ * connector, these jumpers have to be opened and solder bridges SB4, SB5
+ * and SB9 have to be closed instead. Use the `periph_spi_stmod` module
+ * to use this configuration, disable USART1 and enable SPI2. Otherwise
+ * SPI2 is not available.
+ *
+ * @{
+ */
+static const spi_conf_t spi_config[] = {
+ { /* Arduino connector */
+ .dev = SPI1,
+ .mosi_pin = GPIO_PIN(PORT_B, 5),
+ .miso_pin = GPIO_PIN(PORT_B, 4),
+ .sclk_pin = GPIO_PIN(PORT_A, 5),
+ .cs_pin = GPIO_PIN(PORT_A, 15),
+ .mosi_af = GPIO_AF5,
+ .miso_af = GPIO_AF5,
+ .sclk_af = GPIO_AF5,
+ .cs_af = GPIO_AF5,
+ .rccmask = RCC_APB2ENR_SPI1EN,
+ .apbbus = APB2,
+#if IS_USED(MODULE_PERIPH_DMA)
+ .rx_dma = 0, /* DMA1 Channel 2 */
+ .rx_dma_chan = 1, /* CxS = 1 */
+ .tx_dma = 1, /* DMA1 Channel 3 */
+ .tx_dma_chan = 1, /* CxS = 1 */
+#endif
+ },
+#if IS_USED(MODULE_PERIPH_SPI_STMOD)
+ { /* Pmod/STMod+ connector if solder bridges SB4, SB5, SB9 are closed */
+ .dev = SPI2,
+ .mosi_pin = GPIO_PIN(PORT_B, 15),
+ .miso_pin = GPIO_PIN(PORT_I, 2),
+ .sclk_pin = GPIO_PIN(PORT_I, 1),
+ .cs_pin = GPIO_PIN(PORT_G, 1),
+ .mosi_af = GPIO_AF5,
+ .miso_af = GPIO_AF5,
+ .sclk_af = GPIO_AF5,
+ .cs_af = GPIO_AF5,
+ .rccmask = RCC_APB1ENR1_SPI2EN,
+ .apbbus = APB1,
+#if IS_USED(MODULE_PERIPH_DMA)
+ .rx_dma = 2, /* DMA1 Channel 4 */
+ .rx_dma_chan = 1, /* CxS = 1 */
+ .tx_dma = 3, /* DMA1 Channel 5 */
+ .tx_dma_chan = 1, /* CxS = 1 */
+#endif
+ },
+#endif
+};
+
+#define SPI_NUMOF ARRAY_SIZE(spi_config)
+/** @} */
+
+/**
+ * @name Timer configuration
+ * @{
+ */
+static const timer_conf_t timer_config[] = {
+ {
+ .dev = TIM2,
+ .max = 0xffffffff,
+ .rcc_mask = RCC_APB1ENR1_TIM2EN,
+ .bus = APB1,
+ .irqn = TIM2_IRQn
+ },
+ {
+ .dev = TIM3,
+ .max = 0xffffffff,
+ .rcc_mask = RCC_APB1ENR1_TIM3EN,
+ .bus = APB1,
+ .irqn = TIM3_IRQn
+ },
+};
+
+#define TIMER_0_ISR isr_tim2
+#define TIMER_1_ISR isr_tim3
+
+#define TIMER_NUMOF ARRAY_SIZE(timer_config)
+/** @} */
+
+/**
+ * @name UART configuration
+ *
+ * @note By default, solder bridges SB6, SB7, SB8 are closed and USART1 is
+ * connected to the Pmod/STMmod+ connector. In this case the hardware flow
+ * control for USART1 is used. If these solder bridges are open and solder
+ * bridges SB4, SB5 and SB9 are closed instead, SPI2 is connected to the
+ * Pmod/STMmod+ connector and USART1 is not available.
+ *
+ * @{
+ */
+static const uart_conf_t uart_config[] = {
+ { /* Virtual COM Port / ST-Link */
+ .dev = USART2,
+ .rcc_mask = RCC_APB1ENR1_USART2EN,
+ .rx_pin = GPIO_PIN(PORT_D, 6),
+ .tx_pin = GPIO_PIN(PORT_A, 2),
+ .rx_af = GPIO_AF7,
+ .tx_af = GPIO_AF7,
+ .bus = APB1,
+ .irqn = USART2_IRQn,
+ .type = STM32_USART,
+ .clk_src = 0, /* Use APB clock */
+#if IS_USED(MODULE_PERIPH_UART_HW_FC)
+ .cts_pin = GPIO_UNDEF, /* CTS is not connected */
+ .rts_pin = GPIO_UNDEF, /* RTS is not connected */
+#endif
+#if IS_USED(MODULE_PERIPH_DMA)
+ .dma = 4, /* DMA1 Channel 7 */
+ .dma_chan = 2, /* CxS = 2 */
+#endif
+ },
+ { /* Arduino connector RX/TX (D0/D1) */
+ .dev = LPUART1,
+ .rcc_mask = RCC_APB1ENR2_LPUART1EN,
+ .rx_pin = GPIO_PIN(PORT_G, 8),
+ .tx_pin = GPIO_PIN(PORT_G, 7),
+ .rx_af = GPIO_AF8,
+ .tx_af = GPIO_AF8,
+ .bus = APB12,
+ .irqn = LPUART1_IRQn,
+ .type = STM32_LPUART,
+ .clk_src = 0, /* Use APB clock */
+#if IS_USED(MODULE_PERIPH_UART_HW_FC)
+ .cts_pin = GPIO_UNDEF, /* CTS is not connected */
+ .rts_pin = GPIO_UNDEF, /* RTS is not connected */
+#endif
+#if IS_USED(MODULE_PERIPH_DMA)
+ .dma = 5, /* DMA2 Channel 6 */
+ .dma_chan = 4, /* CxS = 4 */
+#endif
+ },
+
+#if !IS_USED(MODULE_PERIPH_SPI_STMOD)
+ { /* Pmod/STMod+ connector if solder bridges SB6, SB7, SB8 are closed (default) */
+ .dev = USART1,
+ .rcc_mask = RCC_APB2ENR_USART1EN,
+ .rx_pin = GPIO_PIN(PORT_G, 10),
+ .tx_pin = GPIO_PIN(PORT_B, 6),
+ .rx_af = GPIO_AF7,
+ .tx_af = GPIO_AF7,
+ .bus = APB2,
+ .irqn = USART1_IRQn,
+ .type = STM32_USART,
+ .clk_src = 0, /* Use APB clock */
+#if IS_USED(MODULE_PERIPH_UART_HW_FC)
+ .cts_pin = GPIO_PIN(PORT_G, 11),
+ .rts_pin = GPIO_PIN(PORT_G, 12),
+ .cts_af = GPIO_AF7,
+ .rts_af = GPIO_AF7,
+#endif
+#if IS_USED(MODULE_PERIPH_DMA)
+ .dma = 2, /* DMA1 Channel 4 */
+ .dma_chan = 2, /* CxS = 2 */
+#endif
+ },
+#endif /* !IS_USED(MODULE_PERIPH_SPI_STMOD) */
+};
+
+#define UART_0_ISR (isr_usart2)
+#define UART_1_ISR (isr_lpuart1)
+#define UART_2_ISR (isr_usart1)
+
+#define UART_NUMOF ARRAY_SIZE(uart_config)
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PERIPH_CONF_H */
+/** @} */