From ec95c4ce86e2d90b7c0276fd57dfb8676f23db43 Mon Sep 17 00:00:00 2001
From: "Zachary J. Fields" <zachary_fields@yahoo.com>
Date: Thu, 30 May 2024 14:01:05 -0500
Subject: [PATCH 1/3] Rename Blues Wireless to Blues

---
 README.md                          |   6 +-
 boards.txt                         | 170 +++++++++++++++--------------
 tools/platformio/boards_remap.json |   1 +
 3 files changed, 90 insertions(+), 87 deletions(-)

diff --git a/README.md b/README.md
index 065ac5818e..45bae03e5f 100644
--- a/README.md
+++ b/README.md
@@ -75,7 +75,7 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
  - [Generic STM32WBA boards](#generic-stm32wba-boards)
  - [Generic STM32WL boards](#generic-stm32wl-boards)
  - [3D printer boards](#3d-printer-boards)
- - [Blues Wireless boards](#blues-wireless-boards)
+ - [Blues boards](#blues-boards)
  - [Elecgator boards](#elecgator-boards)
  - [Electronic Speed Controller boards](#electronic-speed-controller-boards)
  - [Garatronic/McHobby boards](#garatronicmchobby-boards)
@@ -772,11 +772,11 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
 | :green_heart:  | STM32F446VE | [FYSETC_S6](https://wiki.fysetc.com/FYSETC_S6/) | *1.9.0* | |
 | :green_heart:  | STM32G0B1CB | [BTT EBB42 CAN V1.1](https://github.com/bigtreetech/EBB/tree/master/EBB%20CAN%20V1.1%20(STM32G0B1)/EBB42%20CAN%20V1.1) | *2.4.0* |  |
 
-### [Blues Wireless](https://blues.io/) boards
+### [Blues](https://blues.com/) boards
 
 | Status | Device(s) | Name | Release | Notes |
 | :----: | :-------: | ---- | :-----: | :---- |
-| :green_heart:  | STM32L4R5ZIYx | [Swan R5](https://blues.io/products/swan) | *2.1.0* |  |
+| :green_heart:  | STM32L4R5ZIYx | [Swan R5](https://blues.com/products/swan) | *2.1.0* |  |
 
 ### [Elecgator](https://www.elecgator.com/) boards
 
diff --git a/boards.txt b/boards.txt
index 3f9bc707bf..7863ea39b3 100644
--- a/boards.txt
+++ b/boards.txt
@@ -10779,46 +10779,48 @@ GenWL.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
 3dprinter.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
 
 ################################################################################
-# Blues Wireless boards
+# Blues boards
 
-BluesW.name=Blues Wireless boards
+Blues.name=Blues boards
 
-BluesW.build.core=arduino
-BluesW.build.board=BluesWireless
-BluesW.build.variant_h=variant_{build.board}.h
-BluesW.build.st_extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
-BluesW.build.flash_offset=0x0
-BluesW.upload.maximum_size=0
-BluesW.upload.maximum_data_size=0
+Blues.build.core=arduino
+Blues.build.board=Blues
+Blues.build.variant_h=variant_{build.board}.h
+Blues.build.st_extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
+Blues.build.flash_offset=0x0
+Blues.upload.maximum_size=0
+Blues.upload.maximum_data_size=0
 
 # Swan R5 board
-BluesW.menu.pnum.SWAN_R5=Swan R5
-BluesW.menu.pnum.SWAN_R5.upload.maximum_size=2097152
-BluesW.menu.pnum.SWAN_R5.upload.maximum_data_size=655360
-BluesW.menu.pnum.SWAN_R5.build.mcu=cortex-m4
-BluesW.menu.pnum.SWAN_R5.build.fpu=-mfpu=fpv4-sp-d16
-BluesW.menu.pnum.SWAN_R5.build.float-abi=-mfloat-abi=hard
-BluesW.menu.pnum.SWAN_R5.build.board=SWAN_R5
-BluesW.menu.pnum.SWAN_R5.build.series=STM32L4xx
-BluesW.menu.pnum.SWAN_R5.build.product_line=STM32L4R5xx
-BluesW.menu.pnum.SWAN_R5.build.variant=STM32L4xx/L4R5Z(G-I)Y_L4R9Z(G-I)Y_L4S5ZIY_L4S9ZIY
-BluesW.menu.pnum.SWAN_R5.build.peripheral_pins=-DCUSTOM_PERIPHERAL_PINS
+Blues.menu.pnum.SWAN_R5=Swan R5
+Blues.menu.pnum.SWAN_R5.upload.maximum_size=2097152
+Blues.menu.pnum.SWAN_R5.upload.maximum_data_size=655360
+Blues.menu.pnum.SWAN_R5.build.mcu=cortex-m4
+Blues.menu.pnum.SWAN_R5.build.fpu=-mfpu=fpv4-sp-d16
+Blues.menu.pnum.SWAN_R5.build.float-abi=-mfloat-abi=hard
+Blues.menu.pnum.SWAN_R5.build.board=SWAN_R5
+Blues.menu.pnum.SWAN_R5.build.series=STM32L4xx
+Blues.menu.pnum.SWAN_R5.build.product_line=STM32L4R5xx
+Blues.menu.pnum.SWAN_R5.build.variant=STM32L4xx/L4R5Z(G-I)Y_L4R9Z(G-I)Y_L4S5ZIY_L4S9ZIY
+Blues.menu.pnum.SWAN_R5.build.peripheral_pins=-DCUSTOM_PERIPHERAL_PINS
+Blues.menu.pnum.SWAN_R5.build.vid=0x30A4
+Blues.menu.pnum.SWAN_R5.build.pid=0x0002
 
 # Upload menu
-BluesW.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
-BluesW.menu.upload_method.swdMethod.upload.protocol=0
-BluesW.menu.upload_method.swdMethod.upload.options=
-BluesW.menu.upload_method.swdMethod.upload.tool=stm32CubeProg
+Blues.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
+Blues.menu.upload_method.swdMethod.upload.protocol=0
+Blues.menu.upload_method.swdMethod.upload.options=
+Blues.menu.upload_method.swdMethod.upload.tool=stm32CubeProg
 
-BluesW.menu.upload_method.serialMethod=STM32CubeProgrammer (Serial)
-BluesW.menu.upload_method.serialMethod.upload.protocol=1
-BluesW.menu.upload_method.serialMethod.upload.options={serial.port.file}
-BluesW.menu.upload_method.serialMethod.upload.tool=stm32CubeProg
+Blues.menu.upload_method.serialMethod=STM32CubeProgrammer (Serial)
+Blues.menu.upload_method.serialMethod.upload.protocol=1
+Blues.menu.upload_method.serialMethod.upload.options={serial.port.file}
+Blues.menu.upload_method.serialMethod.upload.tool=stm32CubeProg
 
-BluesW.menu.upload_method.dfuMethod=STM32CubeProgrammer (DFU)
-BluesW.menu.upload_method.dfuMethod.upload.protocol=2
-BluesW.menu.upload_method.dfuMethod.upload.options=
-BluesW.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
+Blues.menu.upload_method.dfuMethod=STM32CubeProgrammer (DFU)
+Blues.menu.upload_method.dfuMethod.upload.protocol=2
+Blues.menu.upload_method.dfuMethod.upload.options=
+Blues.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
 
 ################################################################################
 # Elecgator boards
@@ -11549,11 +11551,11 @@ GenWL.menu.xserial.disabled.build.xSerial=
 3dprinter.menu.xserial.disabled=Disabled (no Serial support)
 3dprinter.menu.xserial.disabled.build.xSerial=
 
-BluesW.menu.xserial.generic=Enabled (generic 'Serial')
-BluesW.menu.xserial.none=Enabled (no generic 'Serial')
-BluesW.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
-BluesW.menu.xserial.disabled=Disabled (no Serial support)
-BluesW.menu.xserial.disabled.build.xSerial=
+Blues.menu.xserial.generic=Enabled (generic 'Serial')
+Blues.menu.xserial.none=Enabled (no generic 'Serial')
+Blues.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
+Blues.menu.xserial.disabled=Disabled (no Serial support)
+Blues.menu.xserial.disabled.build.xSerial=
 
 Elecgator.menu.xserial.generic=Enabled (generic 'Serial')
 Elecgator.menu.xserial.none=Enabled (no generic 'Serial')
@@ -11874,18 +11876,18 @@ GenWB.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS
 3dprinter.menu.xusb.HSFS=High Speed in Full Speed mode
 3dprinter.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS
 
-BluesW.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
-BluesW.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
-BluesW.menu.usb.CDC=CDC (no generic 'Serial')
-BluesW.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB
-BluesW.menu.usb.HID=HID (keyboard and mouse)
-BluesW.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE
-BluesW.menu.usb.none=None
-BluesW.menu.xusb.FS=Low/Full Speed
-BluesW.menu.xusb.HS=High Speed
-BluesW.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS
-BluesW.menu.xusb.HSFS=High Speed in Full Speed mode
-BluesW.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS
+Blues.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
+Blues.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
+Blues.menu.usb.CDC=CDC (no generic 'Serial')
+Blues.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB
+Blues.menu.usb.HID=HID (keyboard and mouse)
+Blues.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE
+Blues.menu.usb.none=None
+Blues.menu.xusb.FS=Low/Full Speed
+Blues.menu.xusb.HS=High Speed
+Blues.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS
+Blues.menu.xusb.HSFS=High Speed in Full Speed mode
+Blues.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS
 
 Elecgator.menu.usb.none=None
 Elecgator.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
@@ -12479,25 +12481,25 @@ GenWL.menu.opt.o0std.build.flags.optimize=-O0
 3dprinter.menu.opt.o0std=No Optimization (-O0)
 3dprinter.menu.opt.o0std.build.flags.optimize=-O0
 
-BluesW.menu.opt.osstd=Smallest (-Os default)
-BluesW.menu.opt.oslto=Smallest (-Os) with LTO
-BluesW.menu.opt.oslto.build.flags.optimize=-Os -flto
-BluesW.menu.opt.o1std=Fast (-O1)
-BluesW.menu.opt.o1std.build.flags.optimize=-O1
-BluesW.menu.opt.o1lto=Fast (-O1) with LTO
-BluesW.menu.opt.o1lto.build.flags.optimize=-O1 -flto
-BluesW.menu.opt.o2std=Faster (-O2)
-BluesW.menu.opt.o2std.build.flags.optimize=-O2
-BluesW.menu.opt.o2lto=Faster (-O2) with LTO
-BluesW.menu.opt.o2lto.build.flags.optimize=-O2 -flto
-BluesW.menu.opt.o3std=Fastest (-O3)
-BluesW.menu.opt.o3std.build.flags.optimize=-O3
-BluesW.menu.opt.o3lto=Fastest (-O3) with LTO
-BluesW.menu.opt.o3lto.build.flags.optimize=-O3 -flto
-BluesW.menu.opt.ogstd=Debug (-Og)
-BluesW.menu.opt.ogstd.build.flags.optimize=-Og
-BluesW.menu.opt.o0std=No Optimization (-O0)
-BluesW.menu.opt.o0std.build.flags.optimize=-O0
+Blues.menu.opt.osstd=Smallest (-Os default)
+Blues.menu.opt.oslto=Smallest (-Os) with LTO
+Blues.menu.opt.oslto.build.flags.optimize=-Os -flto
+Blues.menu.opt.o1std=Fast (-O1)
+Blues.menu.opt.o1std.build.flags.optimize=-O1
+Blues.menu.opt.o1lto=Fast (-O1) with LTO
+Blues.menu.opt.o1lto.build.flags.optimize=-O1 -flto
+Blues.menu.opt.o2std=Faster (-O2)
+Blues.menu.opt.o2std.build.flags.optimize=-O2
+Blues.menu.opt.o2lto=Faster (-O2) with LTO
+Blues.menu.opt.o2lto.build.flags.optimize=-O2 -flto
+Blues.menu.opt.o3std=Fastest (-O3)
+Blues.menu.opt.o3std.build.flags.optimize=-O3
+Blues.menu.opt.o3lto=Fastest (-O3) with LTO
+Blues.menu.opt.o3lto.build.flags.optimize=-O3 -flto
+Blues.menu.opt.ogstd=Debug (-Og)
+Blues.menu.opt.ogstd.build.flags.optimize=-Og
+Blues.menu.opt.o0std=No Optimization (-O0)
+Blues.menu.opt.o0std.build.flags.optimize=-O0
 
 Elecgator.menu.opt.osstd=Smallest (-Os default)
 Elecgator.menu.opt.oslto=Smallest (-Os) with LTO
@@ -12876,13 +12878,13 @@ GenWL.menu.dbg.enable_all.build.flags.debug=-g
 3dprinter.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
 3dprinter.menu.dbg.enable_all.build.flags.debug=-g
 
-BluesW.menu.dbg.none=None
-BluesW.menu.dbg.enable_sym=Symbols Enabled (-g)
-BluesW.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
-BluesW.menu.dbg.enable_log=Core logs Enabled
-BluesW.menu.dbg.enable_log.build.flags.debug=
-BluesW.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
-BluesW.menu.dbg.enable_all.build.flags.debug=-g
+Blues.menu.dbg.none=None
+Blues.menu.dbg.enable_sym=Symbols Enabled (-g)
+Blues.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
+Blues.menu.dbg.enable_log=Core logs Enabled
+Blues.menu.dbg.enable_log.build.flags.debug=
+Blues.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
+Blues.menu.dbg.enable_all.build.flags.debug=-g
 
 Elecgator.menu.dbg.none=None
 Elecgator.menu.dbg.enable_sym=Symbols Enabled (-g)
@@ -13217,15 +13219,15 @@ GenWL.menu.rtlib.full.build.flags.ldspecs=
 3dprinter.menu.rtlib.full=Newlib Standard
 3dprinter.menu.rtlib.full.build.flags.ldspecs=
 
-BluesW.menu.rtlib.nano=Newlib Nano (default)
-BluesW.menu.rtlib.nanofp=Newlib Nano + Float Printf
-BluesW.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
-BluesW.menu.rtlib.nanofs=Newlib Nano + Float Scanf
-BluesW.menu.rtlib.nanofs.build.flags.ldspecs=--specs=nano.specs -u _scanf_float
-BluesW.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
-BluesW.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
-BluesW.menu.rtlib.full=Newlib Standard
-BluesW.menu.rtlib.full.build.flags.ldspecs=
+Blues.menu.rtlib.nano=Newlib Nano (default)
+Blues.menu.rtlib.nanofp=Newlib Nano + Float Printf
+Blues.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
+Blues.menu.rtlib.nanofs=Newlib Nano + Float Scanf
+Blues.menu.rtlib.nanofs.build.flags.ldspecs=--specs=nano.specs -u _scanf_float
+Blues.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
+Blues.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
+Blues.menu.rtlib.full=Newlib Standard
+Blues.menu.rtlib.full.build.flags.ldspecs=
 
 Elecgator.menu.rtlib.nano=Newlib Nano (default)
 Elecgator.menu.rtlib.nanofp=Newlib Nano + Float Printf
diff --git a/tools/platformio/boards_remap.json b/tools/platformio/boards_remap.json
index 9a622e4666..3e7e6fef64 100644
--- a/tools/platformio/boards_remap.json
+++ b/tools/platformio/boards_remap.json
@@ -31,6 +31,7 @@
     "vccgnd_f103zet6": "VCCGND_F103ZET6_MINI",
     "waveshare_open103z": "GENERIC_F103ZEHX",
     "bw_swan_r5": "SWAN_R5",
+    "blues_swan_r5": "SWAN_R5",
     "disco_b_g431b_esc1": "B_G431B_ESC1",
     "disco_b_u585i_iot02a": "B_U585I_IOT02A",
     "nucleo_wl55jc": "NUCLEO_WL55JC1"

From 4aeebcda6c7bc88250786e1365855e3a18cc5a88 Mon Sep 17 00:00:00 2001
From: "Zachary J. Fields" <zachary_fields@yahoo.com>
Date: Tue, 11 Jun 2024 12:25:34 -0500
Subject: [PATCH 2/3] chore: cleanup Swan PWM

---
 .../PeripheralPins_SWAN_R5.c                  | 161 +++++++++---------
 .../variant_SWAN_R5.cpp                       |  32 ++--
 2 files changed, 97 insertions(+), 96 deletions(-)

diff --git a/variants/STM32L4xx/L4R5Z(G-I)Y_L4R9Z(G-I)Y_L4S5ZIY_L4S9ZIY/PeripheralPins_SWAN_R5.c b/variants/STM32L4xx/L4R5Z(G-I)Y_L4R9Z(G-I)Y_L4S5ZIY_L4S9ZIY/PeripheralPins_SWAN_R5.c
index a07288f0c1..f8e5b71b54 100644
--- a/variants/STM32L4xx/L4R5Z(G-I)Y_L4R9Z(G-I)Y_L4S5ZIY_L4S9ZIY/PeripheralPins_SWAN_R5.c
+++ b/variants/STM32L4xx/L4R5Z(G-I)Y_L4R9Z(G-I)Y_L4S5ZIY_L4S9ZIY/PeripheralPins_SWAN_R5.c
@@ -108,87 +108,88 @@ WEAK const PinMap PinMap_I2C_SCL[] = {
 
 #ifdef HAL_TIM_MODULE_ENABLED
 WEAK const PinMap PinMap_TIM[] = {
-  // {PA_0,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 - BAT VOLTAGE
-  // {PA_0_ALT1,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 - BAT VOLTAGE
-  {PA_1,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
-  {PA_1_ALT1,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2
-  {PA_1_ALT2,  TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 1)}, // TIM15_CH1N
-  {PA_2,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
-  {PA_2_ALT1,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3
-  {PA_2_ALT2,  TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 0)}, // TIM15_CH1
-  {PA_3,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
-  {PA_3_ALT1,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4
-  {PA_3_ALT2,  TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 2, 0)}, // TIM15_CH2
-  {PA_5,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
-  {PA_5_ALT1,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N
-  {PA_6,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
-  {PA_6_ALT1,  TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 0)}, // TIM16_CH1
-  {PA_7,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
-  {PA_7_ALT1,  TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
-  {PA_7_ALT2,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N
-  {PA_7_ALT3,  TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM17, 1, 0)}, // TIM17_CH1
-  // {PA_8,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 - NC
-  {PA_9,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
-  {PA_10,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
-  // {PA_11,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 - USB DM
-  // {PA_15,      TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 - JTDI
-  {PB_0,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
-  {PB_0_ALT1,  TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
-  {PB_0_ALT2,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N
-  {PB_1,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
-  {PB_1_ALT1,  TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
-  {PB_1_ALT2,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N
-  // {PB_3,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 - JTDO
-  {PB_4,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
-  // {PB_5,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 - NC
-  {PB_6,       TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1
-  {PB_6_ALT1,  TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 1)}, // TIM16_CH1N
-  {PB_7,       TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
-  {PB_7_ALT1,  TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM17, 1, 1)}, // TIM17_CH1N
-  // {PB_8,       TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 - NC
-  // {PB_8_ALT1,  TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 0)}, // TIM16_CH1 - NC
-  {PB_9,       TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
-  {PB_9_ALT1,  TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM17, 1, 0)}, // TIM17_CH1
-  {PB_10,      TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
-  {PB_11,      TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
-  {PB_13,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
-  {PB_13_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 1)}, // TIM15_CH1N
-  {PB_14,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
-  {PB_14_ALT1, TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N
-  {PB_14_ALT2, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 0)}, // TIM15_CH1
-  {PB_15,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
-  {PB_15_ALT1, TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N
-  {PB_15_ALT2, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 2, 0)}, // TIM15_CH2
-  // {PC_6,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 - USB_DETECT
-  // {PC_6_ALT1,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1 - USB_DETECT
-  // {PC_7,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 - NC
-  // {PC_7_ALT1,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 - NC
-  // {PC_8,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 - NC
-  // {PC_8_ALT1,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3 - NC
-  {PC_9,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
-  {PC_9_ALT1,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 4, 0)}, // TIM8_CH4
-  // {PD_12,      TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 - NC
-  // {PD_13,      TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 - NC
-  // {PD_14,      TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 - NC
-  {PD_15,      TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
-  // {PE_0,       TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 0)}, // TIM16_CH1 - NC
-  {PE_1,       TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM17, 1, 0)}, // TIM17_CH1
-  {PE_3,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
-  // {PE_4,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 - Power Switch EN
-  // {PE_5,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 - NC
-  // {PE_6,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 - DISCHARGE
-  // {PE_8,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N - NC
-  {PE_9,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
-  {PE_10,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
-  {PE_11,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
-  {PE_12,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
-  {PE_13,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
-  {PE_14,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
-  // {PF_6,       TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 - NC
-  // {PF_7,       TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 - NC
-  // {PF_10,      TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 2, 0)}, // TIM15_CH2 - NC
+  // {PA_0,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   1, 0)}, // TIM2_CH1   - BAT VOLTAGE
+  // {PA_0_ALT1,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5,   1, 0)}, // TIM5_CH1   - BAT VOLTAGE
+  {PA_1,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   2, 0)}, // TIM2_CH2   - A1
+  // {PA_1_ALT1,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5,   2, 0)}, // TIM5_CH2   - A1
+  // {PA_1_ALT2,  TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 1)}, // TIM15_CH1N - A1
+  {PA_2,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   3, 0)}, // TIM2_CH3   - TX2
+  // {PA_2_ALT1,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5,   3, 0)}, // TIM5_CH3   - TX2
+  // {PA_2_ALT2,  TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 0)}, // TIM15_CH1  - TX2
+  {PA_3,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   4, 0)}, // TIM2_CH4   - A0
+  // {PA_3_ALT1,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5,   4, 0)}, // TIM5_CH4   - A0
+  // {PA_3_ALT2,  TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 2, 0)}, // TIM15_CH2  - A0
+  {PA_5,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   1, 0)}, // TIM2_CH1   - D13, A12
+  // {PA_5_ALT1,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8,   1, 1)}, // TIM8_CH1N  - D13, A12
+  {PA_6,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   1, 0)}, // TIM3_CH1   - D12, A11
+  // {PA_6_ALT1,  TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 0)}, // TIM16_CH1  - D12, A11
+  // {PA_7,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   1, 1)}, // TIM1_CH1N  - D11, A10
+  {PA_7,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   2, 0)}, // TIM3_CH2   - D11, A10
+  // {PA_7_ALT1,  TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   2, 0)}, // TIM3_CH2   - D11, A10
+  // {PA_7_ALT2,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8,   1, 1)}, // TIM8_CH1N  - D11, A10
+  // {PA_7_ALT3,  TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM17, 1, 0)}, // TIM17_CH1  - D11, A10
+  // {PA_8,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   1, 0)}, // TIM1_CH1   - NC
+  // {PA_9,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   2, 0)}, // TIM1_CH2   - TX
+  // {PA_10,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   3, 0)}, // TIM1_CH3   - RX
+  // {PA_11,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   4, 0)}, // TIM1_CH4   - USB DM
+  // {PA_15,      TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   1, 0)}, // TIM2_CH1   - JTDI
+  // {PB_0,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   2, 1)}, // TIM1_CH2N  - QIO1
+  {PB_0_ALT1,  TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   3, 0)}, // TIM3_CH3   - QIO1
+  // {PB_0_ALT2,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8,   2, 1)}, // TIM8_CH2N  - QIO1
+  {PB_1,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   3, 1)}, // TIM1_CH3N  - A6
+  // {PB_1_ALT1,  TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   4, 0)}, // TIM3_CH4   - A6
+  // {PB_1_ALT2,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8,   3, 1)}, // TIM8_CH3N  - A6
+  // {PB_3,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   2, 0)}, // TIM2_CH2   - JTDO
+  // {PB_4,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   1, 0)}, // TIM3_CH1   - CTS
+  // {PB_5,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   2, 0)}, // TIM3_CH2   - NC
+  {PB_6,       TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4,   1, 0)}, // TIM4_CH1   - SCL
+  // {PB_6_ALT1,  TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 1)}, // TIM16_CH1N - SCL
+  {PB_7,       TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4,   2, 0)}, // TIM4_CH2   - SDA
+  // {PB_7_ALT1,  TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM17, 1, 1)}, // TIM17_CH1N - SDA
+  // {PB_8,       TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4,   3, 0)}, // TIM4_CH3   - NC
+  // {PB_8_ALT1,  TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 0)}, // TIM16_CH1  - NC
+  // {PB_9,       TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4,   4, 0)}, // TIM4_CH4   - D14
+  {PB_9_ALT1,  TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM17, 1, 0)}, // TIM17_CH1  - D14
+  // {PB_10,      TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   3, 0)}, // TIM2_CH3   - TX3
+  // {PB_11,      TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   4, 0)}, // TIM2_CH4   - RX3
+  // {PB_13,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   1, 1)}, // TIM1_CH1N  - CTS3
+  // {PB_13_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 1)}, // TIM15_CH1N - CTS3
+  // {PB_14,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   2, 1)}, // TIM1_CH2N  - MI
+  {PB_14_ALT1, TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8,   2, 1)}, // TIM8_CH2N  - MI
+  {PB_14_ALT2, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 0)}, // TIM15_CH1  - MI
+  // {PB_15,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   3, 1)}, // TIM1_CH3N  - MO
+  {PB_15_ALT1, TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8,   3, 1)}, // TIM8_CH3N  - MO
+  {PB_15_ALT2, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 2, 0)}, // TIM15_CH2  - MO
+  // {PC_6,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   1, 0)}, // TIM3_CH1   - USB_DETECT
+  // {PC_6_ALT1,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8,   1, 0)}, // TIM8_CH1   - USB_DETECT
+  // {PC_7,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   2, 0)}, // TIM3_CH2   - NC
+  // {PC_7_ALT1,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8,   2, 0)}, // TIM8_CH2   - NC
+  // {PC_8,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   3, 0)}, // TIM3_CH3   - NC
+  // {PC_8_ALT1,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8,   3, 0)}, // TIM8_CH3   - NC
+  {PC_9,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   4, 0)}, // TIM3_CH4   - SDA3
+  {PC_9_ALT1,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8,   4, 0)}, // TIM8_CH4   - SDA3
+  // {PD_12,      TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4,   1, 0)}, // TIM4_CH1   - NC
+  // {PD_13,      TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4,   2, 0)}, // TIM4_CH2   - NC
+  // {PD_14,      TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4,   3, 0)}, // TIM4_CH3   - NC
+  {PD_15,      TIM4,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4,   4, 0)}, // TIM4_CH4   - D9
+  // {PE_0,       TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 0)}, // TIM16_CH1  - NC
+  // {PE_1,       TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM17, 1, 0)}, // TIM17_CH1  - D15
+  // {PE_3,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   1, 0)}, // TIM3_CH1   - D4
+  // {PE_4,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   2, 0)}, // TIM3_CH2   - Power Switch EN
+  // {PE_5,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   3, 0)}, // TIM3_CH3   - NC
+  // {PE_6,       TIM3,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3,   4, 0)}, // TIM3_CH4   - DISCHARGE
+  // {PE_8,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   1, 1)}, // TIM1_CH1N  - NC
+  {PE_9,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   1, 0)}, // TIM1_CH1   - D6
+  // {PE_10,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   2, 1)}, // TIM1_CH2N  - QCLK
+  {PE_11,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   2, 0)}, // TIM1_CH2   - D5
+  // {PE_12,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   3, 1)}, // TIM1_CH3N  - QIO0
+  // {PE_13,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   3, 0)}, // TIM1_CH3   - D3
+  {PE_14,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   4, 0)}, // TIM1_CH4   - QIO2
+  // {PF_6,       TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5,   1, 0)}, // TIM5_CH1   - NC
+  // {PF_7,       TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5,   2, 0)}, // TIM5_CH2   - NC
+  // {PF_10,      TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 2, 0)}, // TIM15_CH2  - NC
   // {PG_9,       TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 1)}, // TIM15_CH1N - NC
-  // {PG_10,      TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 0)}, // TIM15_CH1 - NC
+  // {PG_10,      TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 0)}, // TIM15_CH1  - NC
   {NC,         NP,    0}
 };
 #endif
diff --git a/variants/STM32L4xx/L4R5Z(G-I)Y_L4R9Z(G-I)Y_L4S5ZIY_L4S9ZIY/variant_SWAN_R5.cpp b/variants/STM32L4xx/L4R5Z(G-I)Y_L4R9Z(G-I)Y_L4S5ZIY_L4S9ZIY/variant_SWAN_R5.cpp
index d223d2edd3..dfab747844 100644
--- a/variants/STM32L4xx/L4R5Z(G-I)Y_L4R9Z(G-I)Y_L4S5ZIY_L4S9ZIY/variant_SWAN_R5.cpp
+++ b/variants/STM32L4xx/L4R5Z(G-I)Y_L4R9Z(G-I)Y_L4S5ZIY_L4S9ZIY/variant_SWAN_R5.cpp
@@ -94,22 +94,22 @@ const PinName digitalPin[] = {
 
 // Analog (Ax) pin number array
 const uint32_t analogInputPin[] = {
-  16, // A0,  PA3
-  17, // A1,  PA1
-  18, // A2,  PC3
-  19, // A3,  PC1
-  20, // A4,  PC4
-  21, // A5,  PC5
-  22, // A6,  PB1
-  23, // A7,  PC2
-  24, // A8,  PA0
-  10, // A9,  PA4
-  11, // A10, PA7
-  12, // A11, PA6
-  13, // A12, PA5
-  30, // A13, PA2
-  44, // A14, PC0
-  53  // A15, PB0
+  16, // PA3, A0,
+  17, // PA1, A1,
+  18, // PC3, A2,
+  19, // PC1, A3,
+  20, // PC4, A4,
+  21, // PC5, A5,
+  22, // PB1, A6,
+  23, // PC2, A7,
+  24, // PA0, A8,
+  10, // PA4, A9,  D10
+  11, // PA7, A10, D11
+  12, // PA6, A11, D12
+  13, // PA5, A12, D13
+  30, // PA2, A13,
+  44, // PC0, A14,
+  53  // PB0, A15,
 };
 
 // ----------------------------------------------------------------------------

From e800b7285c0a4ca8eaefd55315953c7e501a9471 Mon Sep 17 00:00:00 2001
From: "Zachary J. Fields" <zachary_fields@yahoo.com>
Date: Thu, 30 May 2024 14:37:49 -0500
Subject: [PATCH 3/3] feat: Blues CYGNET

---
 README.md                                     |   3 +-
 boards.txt                                    |  15 +
 cmake/boards_db.cmake                         |  82 +++++
 tools/platformio/boards_remap.json            |   1 +
 .../CMakeLists.txt                            |   2 +
 .../PeripheralPins_CYGNET.c                   | 307 ++++++++++++++++++
 .../variant_CYGNET.cpp                        | 180 ++++++++++
 .../variant_CYGNET.h                          | 208 ++++++++++++
 8 files changed, 797 insertions(+), 1 deletion(-)
 create mode 100644 variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/PeripheralPins_CYGNET.c
 create mode 100644 variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/variant_CYGNET.cpp
 create mode 100644 variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/variant_CYGNET.h

diff --git a/README.md b/README.md
index 45bae03e5f..c1a0eb5d8f 100644
--- a/README.md
+++ b/README.md
@@ -776,7 +776,8 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
 
 | Status | Device(s) | Name | Release | Notes |
 | :----: | :-------: | ---- | :-----: | :---- |
-| :green_heart:  | STM32L4R5ZIYx | [Swan R5](https://blues.com/products/swan) | *2.1.0* |  |
+| :green_heart:  | STM32L4R5ZIYx | [Swan R5](https://blues.com/products/swan)  |  *2.1.0*  | |
+| :yellow_heart: | STM32L433CC   | [Cygnet](https://blues.com/products) | **2.8.0** | |
 
 ### [Elecgator](https://www.elecgator.com/) boards
 
diff --git a/boards.txt b/boards.txt
index 7863ea39b3..f17493bd94 100644
--- a/boards.txt
+++ b/boards.txt
@@ -10806,6 +10806,21 @@ Blues.menu.pnum.SWAN_R5.build.peripheral_pins=-DCUSTOM_PERIPHERAL_PINS
 Blues.menu.pnum.SWAN_R5.build.vid=0x30A4
 Blues.menu.pnum.SWAN_R5.build.pid=0x0002
 
+# Cygnet board
+Blues.menu.pnum.CYGNET=Cygnet
+Blues.menu.pnum.CYGNET.upload.maximum_size=262144
+Blues.menu.pnum.CYGNET.upload.maximum_data_size=65536
+Blues.menu.pnum.CYGNET.build.mcu=cortex-m4
+Blues.menu.pnum.CYGNET.build.fpu=-mfpu=fpv4-sp-d16
+Blues.menu.pnum.CYGNET.build.float-abi=-mfloat-abi=hard
+Blues.menu.pnum.CYGNET.build.board=CYGNET
+Blues.menu.pnum.CYGNET.build.series=STM32L4xx
+Blues.menu.pnum.CYGNET.build.product_line=STM32L433xx
+Blues.menu.pnum.CYGNET.build.variant=STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)
+Blues.menu.pnum.CYGNET.build.peripheral_pins=-DCUSTOM_PERIPHERAL_PINS
+Blues.menu.pnum.CYGNET_L4.build.vid=0x30A4
+Blues.menu.pnum.CYGNET_L4.build.pid=0x0003
+
 # Upload menu
 Blues.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
 Blues.menu.upload_method.swdMethod.upload.protocol=0
diff --git a/cmake/boards_db.cmake b/cmake/boards_db.cmake
index 6cf6b65092..df3fdff42f 100644
--- a/cmake/boards_db.cmake
+++ b/cmake/boards_db.cmake
@@ -106100,6 +106100,88 @@ target_compile_options(SWAN_R5_xusb_HSFS INTERFACE
   "SHELL:-DUSE_USB_HS -DUSE_USB_HS_IN_FS"
 )
 
+# CYGNET
+# -----------------------------------------------------------------------------
+
+set(CYGNET_VARIANT_PATH "${CMAKE_CURRENT_LIST_DIR}/../variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)")
+set(CYGNET_MAXSIZE 262144)
+set(CYGNET_MAXDATASIZE 65536)
+set(CYGNET_MCU cortex-m4)
+set(CYGNET_FPCONF "fpv4-sp-d16-hard")
+add_library(CYGNET INTERFACE)
+target_compile_options(CYGNET INTERFACE
+  "SHELL:-DSTM32L4xx  "
+  "SHELL:-DCUSTOM_PERIPHERAL_PINS"
+  "SHELL:"
+  "SHELL:-mfpu=fpv4-sp-d16 -mfloat-abi=hard"
+  -mcpu=${CYGNET_MCU}
+)
+target_compile_definitions(CYGNET INTERFACE
+  "STM32L4xx"
+	"ARDUINO_CYGNET"
+	"BOARD_NAME=\"CYGNET\""
+	"BOARD_ID=CYGNET"
+	"VARIANT_H=\"variant_CYGNET.h\""
+)
+target_include_directories(CYGNET INTERFACE
+  ${CMAKE_CURRENT_LIST_DIR}/../system/STM32L4xx
+  ${CMAKE_CURRENT_LIST_DIR}/../system/Drivers/STM32L4xx_HAL_Driver/Inc
+  ${CMAKE_CURRENT_LIST_DIR}/../system/Drivers/STM32L4xx_HAL_Driver/Src
+  ${CMAKE_CURRENT_LIST_DIR}/../system/Drivers/CMSIS/Device/ST/STM32L4xx/Include/
+  ${CMAKE_CURRENT_LIST_DIR}/../system/Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/gcc/
+  ${CYGNET_VARIANT_PATH}
+)
+
+target_link_options(CYGNET INTERFACE
+  "LINKER:--default-script=${CYGNET_VARIANT_PATH}/ldscript.ld"
+  "LINKER:--defsym=LD_FLASH_OFFSET=0x0"
+	"LINKER:--defsym=LD_MAX_SIZE=262144"
+	"LINKER:--defsym=LD_MAX_DATA_SIZE=65536"
+  "SHELL:-mfpu=fpv4-sp-d16 -mfloat-abi=hard"
+  -mcpu=${CYGNET_MCU}
+)
+
+add_library(CYGNET_serial_disabled INTERFACE)
+target_compile_options(CYGNET_serial_disabled INTERFACE
+  "SHELL:"
+)
+add_library(CYGNET_serial_generic INTERFACE)
+target_compile_options(CYGNET_serial_generic INTERFACE
+  "SHELL:-DHAL_UART_MODULE_ENABLED"
+)
+add_library(CYGNET_serial_none INTERFACE)
+target_compile_options(CYGNET_serial_none INTERFACE
+  "SHELL:-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE"
+)
+add_library(CYGNET_usb_CDC INTERFACE)
+target_compile_options(CYGNET_usb_CDC INTERFACE
+  "SHELL:-DUSBCON  -DUSBD_VID=0 -DUSBD_PID=-1 -DHAL_PCD_MODULE_ENABLED -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB"
+)
+add_library(CYGNET_usb_CDCgen INTERFACE)
+target_compile_options(CYGNET_usb_CDCgen INTERFACE
+  "SHELL:-DUSBCON  -DUSBD_VID=0 -DUSBD_PID=-1 -DHAL_PCD_MODULE_ENABLED -DUSBD_USE_CDC"
+)
+add_library(CYGNET_usb_HID INTERFACE)
+target_compile_options(CYGNET_usb_HID INTERFACE
+  "SHELL:-DUSBCON  -DUSBD_VID=0 -DUSBD_PID=-1 -DHAL_PCD_MODULE_ENABLED -DUSBD_USE_HID_COMPOSITE"
+)
+add_library(CYGNET_usb_none INTERFACE)
+target_compile_options(CYGNET_usb_none INTERFACE
+  "SHELL:"
+)
+add_library(CYGNET_xusb_FS INTERFACE)
+target_compile_options(CYGNET_xusb_FS INTERFACE
+  "SHELL:"
+)
+add_library(CYGNET_xusb_HS INTERFACE)
+target_compile_options(CYGNET_xusb_HS INTERFACE
+  "SHELL:-DUSE_USB_HS"
+)
+add_library(CYGNET_xusb_HSFS INTERFACE)
+target_compile_options(CYGNET_xusb_HSFS INTERFACE
+  "SHELL:-DUSE_USB_HS -DUSE_USB_HS_IN_FS"
+)
+
 # THUNDERPACK_F411
 # -----------------------------------------------------------------------------
 
diff --git a/tools/platformio/boards_remap.json b/tools/platformio/boards_remap.json
index 3e7e6fef64..c3a8aa22b8 100644
--- a/tools/platformio/boards_remap.json
+++ b/tools/platformio/boards_remap.json
@@ -32,6 +32,7 @@
     "waveshare_open103z": "GENERIC_F103ZEHX",
     "bw_swan_r5": "SWAN_R5",
     "blues_swan_r5": "SWAN_R5",
+    "blues_cygnet": "CYGNET",
     "disco_b_g431b_esc1": "B_G431B_ESC1",
     "disco_b_u585i_iot02a": "B_U585I_IOT02A",
     "nucleo_wl55jc": "NUCLEO_WL55JC1"
diff --git a/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/CMakeLists.txt b/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/CMakeLists.txt
index 2a4d55b6b1..7ec950c2d3 100644
--- a/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/CMakeLists.txt
+++ b/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/CMakeLists.txt
@@ -21,7 +21,9 @@ target_link_libraries(variant INTERFACE variant_usage)
 add_library(variant_bin STATIC EXCLUDE_FROM_ALL
   generic_clock.c
   PeripheralPins.c
+  PeripheralPins_CYGNET.c
   variant_generic.cpp
+  variant_CYGNET.cpp
 )
 target_link_libraries(variant_bin PUBLIC variant_usage)
 
diff --git a/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/PeripheralPins_CYGNET.c b/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/PeripheralPins_CYGNET.c
new file mode 100644
index 0000000000..36f73b9213
--- /dev/null
+++ b/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/PeripheralPins_CYGNET.c
@@ -0,0 +1,307 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2020, STMicroelectronics
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *                        opensource.org/licenses/BSD-3-Clause
+ *
+ *******************************************************************************
+ */
+/*
+ * Manually generated by Blues with knowledge of the CYGNET schematic
+ */
+#if defined(ARDUINO_CYGNET)
+#include "Arduino.h"
+#include "PeripheralPins.h"
+
+/* =====
+ * Notes:
+ * - The pins mentioned Px_y_ALTz are alternative possibilities which use other
+ *   HW peripheral instances. You can use them the same way as any other "normal"
+ *   pin (i.e. analogWrite(PA7_ALT1, 128);).
+ *
+ * - Commented lines are alternative possibilities which are not used per default.
+ *   If you change them, you will have to know what you do
+ * =====
+ */
+
+//*** ADC ***
+
+#ifdef HAL_ADC_MODULE_ENABLED
+WEAK const PinMap PinMap_ADC[] = {
+  {PA_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5,  0)}, // ADC1_IN5  - A0
+  {PA_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6,  0)}, // ADC1_IN6  - A1
+  {PA_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7,  0)}, // ADC1_IN7  - A2
+  {PA_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8,  0)}, // ADC1_IN8  - A3
+  {PA_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9,  0)}, // ADC1_IN9  - BAT_VOLTAGE
+  {PA_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10 - CK
+  {PA_6, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11 - MI
+  {PA_7, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12 - A5
+  {PB_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15 - D11
+  {PB_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC1_IN16 - A4
+  {NC,   NP,   0}
+};
+#endif
+
+//*** DAC ***
+
+#ifdef HAL_DAC_MODULE_ENABLED
+WEAK const PinMap PinMap_DAC[] = {
+  // {PA_4, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC1_OUT1 - BAT_VOLTAGE
+  {PA_5, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC1_OUT2 - CK
+  {NC,   NP,   0}
+};
+#endif
+
+//*** I2C ***
+
+#ifdef HAL_I2C_MODULE_ENABLED
+WEAK const PinMap PinMap_I2C_SDA[] = {
+  {PA_10, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // - RX
+  {PB_4,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, // - D13
+  {PB_7,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // - SDA
+  {PB_9,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // - D6
+  // {PB_11, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, // - LPUART1_VCP_TX
+  {PB_14, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, // - D9
+  {NC,    NP,   0}
+};
+#endif
+
+#ifdef HAL_I2C_MODULE_ENABLED
+WEAK const PinMap PinMap_I2C_SCL[] = {
+  {PA_7,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, // - A5
+  {PA_9,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // - TX
+  {PB_6,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // - SCL
+  {PB_8,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // - D5
+  // {PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, // - LPUART1_VCP_RX
+  {PB_13, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, // - D10
+  {NC,    NP,   0}
+};
+#endif
+
+//*** No I3C ***
+
+//*** TIM ***
+
+#ifdef HAL_TIM_MODULE_ENABLED
+WEAK const PinMap PinMap_TIM[] = {
+  {PA_0,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   1, 0)}, // TIM2_CH1   - A0
+  {PA_1,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   2, 0)}, // TIM2_CH2   - A1
+  // {PA_1_ALT1,  TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 1)}, // TIM15_CH1N - A1
+  {PA_2,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   3, 0)}, // TIM2_CH3   - A2
+  // {PA_2_ALT1,  TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 0)}, // TIM15_CH1  - A2
+  {PA_3,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   4, 0)}, // TIM2_CH4   - A3
+  // {PA_3_ALT1,  TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 2, 0)}, // TIM15_CH2  - A3
+  // {PA_5,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   1, 0)}, // TIM2_CH1   - CK
+  // {PA_6,       TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 0)}, // TIM16_CH1  - MI
+  {PA_7,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   1, 1)}, // TIM1_CH1N  - A5
+  // {PA_8,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   1, 0)}, // TIM1_CH1   - LED_BUILTIN
+  // {PA_9,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   2, 0)}, // TIM1_CH2   - TX
+  // {PA_10,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   3, 0)}, // TIM1_CH3   - RX
+  // {PA_11,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   4, 0)}, // TIM1_CH4   - USB_DM
+  // {PA_15,      TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   1, 0)}, // TIM2_CH1   - CHARGE_DETECT
+  {PB_0,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   2, 1)}, // TIM1_CH2N  - D11
+  {PB_1,       TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   3, 1)}, // TIM1_CH3N  - A4
+  // {PB_3,       TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   2, 0)}, // TIM2_CH2   - USER_BTN
+  // {PB_6,       TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 1)}, // TIM16_CH1N - SCL
+  {PB_8,       TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM16, 1, 0)}, // TIM16_CH1  - D5
+  // {PB_10,      TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   3, 0)}, // TIM2_CH3   - LPUART1_VCP_RX
+  // {PB_11,      TIM2,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2,   4, 0)}, // TIM2_CH4   - LPUART1_VCP_TX
+  // {PB_13,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   1, 1)}, // TIM1_CH1N  - D10
+  // {PB_13_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 1)}, // TIM15_CH1N - D10
+  // {PB_14,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   2, 1)}, // TIM1_CH2N  - D9
+  {PB_14,      TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 0)}, // TIM15_CH1  - D9
+  // {PB_14_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 1, 0)}, // TIM15_CH1  - D9
+  // {PB_15,      TIM1,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1,   3, 1)}, // TIM1_CH3N  - D12
+  {PB_15,      TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 2, 0)}, // TIM15_CH2  - D12
+  // {PB_15_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_TIM15, 2, 0)}, // TIM15_CH2  - D12
+  {NC,         NP,    0}
+};
+#endif
+
+//*** UART ***
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_TX[] = {
+  {PA_2,      LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART1)}, // - A2
+  {PA_2_ALT1, USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},  // - A2
+  {PA_9,      USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},  // - TX
+  {PB_6,      USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},  // - SCL
+  {PB_10,     USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},  // - LPUART1_VCP_RX
+  {PB_11,     LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART1)}, // - LPUART1_VCP_TX
+  {NC,        NP,      0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_RX[] = {
+  {PA_3,      LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART1)}, // - A3
+  {PA_3_ALT1, USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},  // - A3
+  {PA_10,     USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},  // - RX
+  // {PA_15,     USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART2)},  // - CHARGE_DETECT
+  {PB_7,      USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},  // - SDA
+  {PB_10,     LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART1)}, // - LPUART1_VCP_RX
+  {PB_11,     USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},  // - LPUART1_VCP_TX
+  {NC,        NP,      0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_RTS[] = {
+  {PA_1,      USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},  // - A1
+  // {PA_12,     USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},  // - USB_DP
+  // {PA_15,     USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},  // - CHARGE_DETECT
+  {PB_1,      LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART1)}, // - A4
+  {PB_1_ALT1, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},  // - A4
+  // {PB_3,      USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},  // - USER_BTN
+  // {PB_12,     LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART1)}, // - NC
+  {PB_14,     USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},  // - D9
+  {NC,        NP,      0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_CTS[] = {
+  {PA_0,       USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},  // - A0
+  {PA_6,       LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART1)}, // - MI
+  {PA_6_ALT1,  USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},  // - MI
+  // {PA_11,      USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},  // - USB_DM
+  {PB_4,       USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},  // - D13
+  {PB_13,      LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART1)}, // - D10
+  {PB_13_ALT1, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},  // - D10
+  {NC,         NP,      0}
+};
+#endif
+
+//*** SPI ***
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_MOSI[] = {
+  {PA_7,      SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - A5
+  // {PA_12,     SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - USB_DP
+  {PB_5,      SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - MO
+  {PB_5_ALT1, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, // - MO
+  {PB_15,     SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, // - D12
+  {NC,        NP,   0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_MISO[] = {
+  {PA_6,      SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - MI
+  // {PA_11,     SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - USB_DM
+  {PB_4,      SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - D13
+  {PB_4_ALT1, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, // - D13
+  {PB_14,     SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, // - D9
+  {NC,        NP,   0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_SCLK[] = {
+  {PA_1,      SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - A1
+  {PA_5,      SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - CK
+  // {PB_3,      SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - USER_BTN
+  // {PB_3_ALT1, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, // - USER_BTN
+  // {PB_10,     SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, // - LPUART1_VCP_RX
+  {PB_13,     SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, // - D10
+  {NC,        NP,   0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_SSEL[] = {
+  // {PA_4,       SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - BAT_VOLTAGE
+  // {PA_4_ALT1,  SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, // - BAT_VOLTAGE
+  // {PA_15,      SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - CHARGE_DETECT
+  // {PA_15_ALT1, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, // - CHARGE_DETECT
+  {PB_0,       SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // - D11
+  {PB_9,       SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, // - D6
+  // {PB_12,      SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, // - NC
+  {NC,         NP,   0}
+};
+#endif
+
+//*** CAN ***
+
+#if defined(HAL_CAN_MODULE_ENABLED) || defined(HAL_CAN_LEGACY_MODULE_ENABLED)
+WEAK const PinMap PinMap_CAN_RD[] = {
+  // {PA_11, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, // - USB_DM
+  {PB_8,  CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, // - D5
+  {NC,    NP,   0}
+};
+#endif
+
+#if defined(HAL_CAN_MODULE_ENABLED) || defined(HAL_CAN_LEGACY_MODULE_ENABLED)
+WEAK const PinMap PinMap_CAN_TD[] = {
+  // {PA_12, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, // - USB_DP
+  {PB_9,  CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, // - D6
+  {NC,    NP,   0}
+};
+#endif
+
+//*** No ETHERNET ***
+
+//*** QUADSPI ***
+
+#ifdef HAL_QSPI_MODULE_ENABLED
+WEAK const PinMap PinMap_QUADSPI_DATA0[] = {
+  {PB_1, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_IO0 - A4
+  {NC,   NP,      0}
+};
+#endif
+
+#ifdef HAL_QSPI_MODULE_ENABLED
+WEAK const PinMap PinMap_QUADSPI_DATA1[] = {
+  {PB_0, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_IO1 - D11
+  {NC,   NP,      0}
+};
+#endif
+
+#ifdef HAL_QSPI_MODULE_ENABLED
+WEAK const PinMap PinMap_QUADSPI_DATA2[] = {
+  {PA_7, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_IO2 - A5
+  {NC,   NP,      0}
+};
+#endif
+
+#ifdef HAL_QSPI_MODULE_ENABLED
+WEAK const PinMap PinMap_QUADSPI_DATA3[] = {
+  {PA_6, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_IO3 - MI
+  {NC,   NP,      0}
+};
+#endif
+
+#ifdef HAL_QSPI_MODULE_ENABLED
+WEAK const PinMap PinMap_QUADSPI_SCLK[] = {
+  {PA_3,  QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_CLK - A3
+  // {PB_10, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_CLK - LPUART1_VCP_RX
+  {NC,    NP,      0}
+};
+#endif
+
+#ifdef HAL_QSPI_MODULE_ENABLED
+WEAK const PinMap PinMap_QUADSPI_SSEL[] = {
+  {PA_2,  QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_NCS - A2
+  // {PB_11, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_NCS - LPUART1_VCP_TX
+  {NC,    NP,      0}
+};
+#endif
+
+//*** USB ***
+
+#if defined(HAL_PCD_MODULE_ENABLED) || defined(HAL_HCD_MODULE_ENABLED)
+WEAK const PinMap PinMap_USB[] = {
+  {PA_11, USB, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_USB_FS)}, // USB_DM
+  {PA_12, USB, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_USB_FS)}, // USB_DP
+  // {PA_13, USB, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_USB_FS)}, // USB_NOE - SWDIO
+  {NC,    NP,  0}
+};
+#endif
+
+//*** No SD ***
+
+#endif /* ARDUINO_CYGNET */
diff --git a/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/variant_CYGNET.cpp b/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/variant_CYGNET.cpp
new file mode 100644
index 0000000000..994d61ab0e
--- /dev/null
+++ b/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/variant_CYGNET.cpp
@@ -0,0 +1,180 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2020, STMicroelectronics
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *                        opensource.org/licenses/BSD-3-Clause
+ *
+ *******************************************************************************
+ */
+
+#if defined(ARDUINO_CYGNET)
+#include "pins_arduino.h"
+
+// Digital PinName array
+const PinName digitalPin[] = {
+  PA_0,   // 0 - D0/A0
+  PA_1,   // 1 - D1/A1
+  PA_2,   // 2 - D2/A2
+  PA_3,   // 3 - D3/A3
+  PB_1,   // 4 - D4/A4
+  PB_8,   // 5 - D5
+  PB_9,   // 6 - D6
+  PA_4,   // 7 - BAT_VOLTAGE
+  PA_8,   // 8 - LED_BUILTIN
+  PB_14,  // 9 - D9
+  PB_13,  // 10 - D10
+  PB_0,   // 11 - D11
+  PB_15,  // 12 - D12
+  PB_4,   // 13 - D13
+  PA_5,   // 14 - CK
+  PA_6,   // 15 - MI
+  PA_7,   // 16 - A5
+  PA_9,   // 17 - TX
+  PA_10,  // 18 - RX
+  PA_11,  // 19 - USB_DM
+  PA_12,  // 20 - USB_DP
+  PA_13,  // 21 - SWDIO
+  PA_14,  // 22 - SWCLK
+  PA_15,  // 23 - CHARGE_DETECT
+  PB_3,   // 24 - USER_BTN
+  PB_5,   // 25 - MO
+  PB_6,   // 26 - SCL
+  PB_7,   // 27 - SDA
+  PB_10,  // 28 - LPUART1_VCP_RX
+  PB_11,  // 29 - LPUART1_VCP_TX
+  PC_13,  // 30 - USB_DETECT
+  PC_14,  // 31 - OSC32_IN
+  PC_15,  // 32 - OSC32_OUT
+  PH_0,   // 33 - ENABLE_3V3
+  PH_1,   // 34 - DISCHARGE_3V3
+  PH_3    // 35 - B
+};
+
+// Analog (Ax) to digital pin number array
+const uint32_t analogInputPin[] = {
+  0,  // PA0, A0
+  1,  // PA1, A1
+  2,  // PA2, A2
+  3,  // PA3, A3
+  4,  // PB1, A4
+  16, // PA7, A5
+  7   // PA4, BAT_VOLTAGE
+};
+
+// ----------------------------------------------------------------------------
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+WEAK void initVariant(void)
+{
+  GPIO_InitTypeDef  GPIO_InitStruct;
+
+  // Init lines that we'll be using below
+  __HAL_RCC_GPIOA_CLK_ENABLE();
+  __HAL_RCC_GPIOC_CLK_ENABLE();
+  __HAL_RCC_GPIOH_CLK_ENABLE();
+
+  /* Set DISCHARGE_3V3 as well as the pins we're not initially using to FLOAT */
+  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Pin = GPIO_PIN_1;
+  HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); /* PH1 DISCHARGE_3V3 */
+  GPIO_InitStruct.Pin = GPIO_PIN_13;
+  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /* PC13 is USB_DETECT */
+  GPIO_InitStruct.Pin = GPIO_PIN_15;
+  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* PA15 is CHARGE_DETECT */
+  GPIO_InitStruct.Pin = GPIO_PIN_4;
+  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* PA4 is BAT_VOLTAGE */
+
+  /* Turn on the 3V3 regulator */
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+  GPIO_InitStruct.Pin = GPIO_PIN_0;
+  HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
+  HAL_GPIO_WritePin(GPIOH, GPIO_InitStruct.Pin, GPIO_PIN_SET);
+}
+
+/**
+  * @brief  System Clock Configuration
+  * @param  None
+  * @retval None
+  */
+WEAK void SystemClock_Config(void)
+{
+  RCC_OscInitTypeDef RCC_OscInitStruct = {};
+  RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
+  RCC_PeriphCLKInitTypeDef PeriphClkInit = {};
+
+  /** Configure the main internal regulator output voltage
+  */
+  if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) {
+    Error_Handler();
+  }
+
+  /** Configure LSE Drive Capability
+  */
+  HAL_PWR_EnableBkUpAccess();
+  __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
+
+  /** Initializes the RCC Oscillators according to the specified parameters
+  * in the RCC_OscInitTypeDef structure.
+  */
+  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE
+                                     | RCC_OSCILLATORTYPE_MSI
+                                     | RCC_OSCILLATORTYPE_HSI;
+  RCC_OscInitStruct.LSEState = RCC_LSE_ON;
+  RCC_OscInitStruct.MSIState = RCC_MSI_ON;
+  RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
+  RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11;
+  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
+  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
+  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
+  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
+    Error_Handler();
+  }
+
+  /** Initializes the CPU, AHB and APB buses clocks
+  */
+  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
+                                | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
+  // RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
+  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
+  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
+  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
+    Error_Handler();
+  }
+
+  /** Initializes the Peripheral clocks
+  */
+  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB | RCC_PERIPHCLK_SDMMC1
+                                       | RCC_PERIPHCLK_ADC /* | RCC_PERIPHCLK_OSPI */;
+  PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_SYSCLK;
+  // PeriphClkInit.OspiClockSelection = RCC_OSPICLKSOURCE_SYSCLK;
+  PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_MSI;
+  PeriphClkInit.Sdmmc1ClockSelection = RCC_SDMMC1CLKSOURCE_MSI;
+  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
+    Error_Handler();
+  }
+
+  /** Enable MSI Auto calibration
+  */
+  HAL_RCCEx_EnableMSIPLLMode();
+
+  /** Ensure that MSI is wake-up system clock
+  */
+  __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ARDUINO_CYGNET */
diff --git a/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/variant_CYGNET.h b/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/variant_CYGNET.h
new file mode 100644
index 0000000000..901a7bd440
--- /dev/null
+++ b/variants/STM32L4xx/L433C(B-C)(T-U)_L443CC(T-U)/variant_CYGNET.h
@@ -0,0 +1,208 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2020, STMicroelectronics
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *                        opensource.org/licenses/BSD-3-Clause
+ *
+ *******************************************************************************
+ */
+#pragma once
+
+/*----------------------------------------------------------------------------
+ *        Arduino digital pin numbers on the right (indexes into the digitalPin[] array)
+ *        and the STM32 pins they correspond to on the left.  The only apparent
+ *        function I can see is to reference a pin in a sketch in something
+ *        like digitalWrite() and have it index into digitalPin[] to find the
+ *        actual pin.  On the other hand, PIN_A* are numbers offset by PNUM_ANALOG_BASE,
+ *        which serves to say that this IS an analog pin and which tells analogWrite
+ *        to index into the digitalPin[] array to find the actual pin.
+ *----------------------------------------------------------------------------*/
+#define PA0                     PIN_A0  // A0/D0
+#define PA1                     PIN_A1  // A1/D1
+#define PA2                     PIN_A2  // A2/D2
+#define PA3                     PIN_A3  // A3/D3
+#define PB1                     PIN_A4  // A4/D4
+#define PB8                     5       // D5
+#define PB9                     6       // D6
+#define PA4                     PIN_A6  // BAT_VOLTAGE
+#define PA8                     8       // LED_BUILTIN
+#define PB14                    9       // D9
+#define PB13                    10      // D10
+#define PB0                     11      // D11
+#define PB15                    12      // D12
+#define PB4                     13      // D13
+#define PA5                     14      // CK
+#define PA6                     15      // MI
+#define PA7                     PIN_A5  // A5
+#define PA9                     17      // TX
+#define PA10                    18      // RX
+#define PA11                    19      // USB_DM
+#define PA12                    20      // USB_DP
+#define PA13                    21      // SWDIO
+#define PA14                    22      // SWCLK
+#define PA15                    23      // CHARGE_DETECT
+#define PB3                     24      // USER_BTN
+#define PB5                     25      // MO
+#define PB6                     26      // SCL
+#define PB7                     27      // SDA
+#define PB10                    28      // LPUART1_VCP_RX
+#define PB11                    29      // LPUART1_VCP_TX
+#define PC13                    30      // USB_DETECT
+#define PC14                    31      // OSC32_IN
+#define PC15                    32      // OSC32_OUT
+#define PH0                     33      // ENABLE_3V3
+#define PH1                     34      // DISCHARGE_3V3
+#define PH3                     35      // B
+
+// Alternate pins number
+#define PA1_ALT1                (PA1  | ALT1)
+#define PA2_ALT1                (PA2  | ALT1)
+#define PA3_ALT1                (PA3  | ALT1)
+#define PA4_ALT1                (PA4  | ALT1)
+#define PA6_ALT1                (PA6  | ALT1)
+#define PA15_ALT1               (PA15 | ALT1)
+#define PB1_ALT1                (PB1  | ALT1)
+#define PB3_ALT1                (PB3  | ALT1)
+#define PB4_ALT1                (PB4  | ALT1)
+#define PB5_ALT1                (PB5  | ALT1)
+#define PB13_ALT1               (PB13 | ALT1)
+#define PB14_ALT1               (PB14 | ALT1)
+#define PB15_ALT1               (PB15 | ALT1)
+
+#define NUM_DIGITAL_PINS        36
+#define NUM_ANALOG_INPUTS       7
+
+// On-board LED pin number
+#ifndef LED_BUILTIN
+  #define LED_BUILTIN           PA8
+#endif
+
+// On-board user button
+#ifndef USER_BTN
+  #define USER_BTN              PB3
+#endif
+
+// Power switch ENABLE and DISCHARGE pins
+#ifndef ENABLE_3V3
+  #define ENABLE_3V3            PH0
+#endif
+#ifndef DISCHARGE_3V3
+  #define DISCHARGE_3V3         PH1
+  #define DISABLE_DISCHARGING   HIGH
+  #define ENABLE_DISCHARGING    LOW
+#endif
+#ifndef CHARGE_DETECT
+  #define CHARGE_DETECT         PA15
+#endif
+
+// SPI definitions
+#ifndef PIN_SPI_SS
+  #define PIN_SPI_SS            PB8  // Just default to D5, because we don't have a CS pin
+#endif
+#ifndef PIN_SPI_SS1
+  #define PIN_SPI_SS1           PNUM_NOT_DEFINED
+#endif
+#ifndef PIN_SPI_SS2
+  #define PIN_SPI_SS2           PNUM_NOT_DEFINED
+#endif
+#ifndef PIN_SPI_SS3
+  #define PIN_SPI_SS3           PNUM_NOT_DEFINED
+#endif
+#ifndef PIN_SPI_MOSI
+  #define PIN_SPI_MOSI          PB5
+#endif
+#ifndef PIN_SPI_MISO
+  #define PIN_SPI_MISO          PA6
+#endif
+#ifndef PIN_SPI_SCK
+  #define PIN_SPI_SCK           PA5
+#endif
+
+// I2C definitions
+#ifndef PIN_WIRE_SDA
+  #define PIN_WIRE_SDA          PB7
+#endif
+#ifndef PIN_WIRE_SCL
+  #define PIN_WIRE_SCL          PB6
+#endif
+
+// Timer Definitions
+// Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin
+#ifndef TIMER_TONE
+  #define TIMER_TONE            TIM6
+#endif
+#ifndef TIMER_SERVO
+  #define TIMER_SERVO           TIM7
+#endif
+
+// UART Definitions
+#ifndef SERIAL_UART_INSTANCE
+  #define SERIAL_UART_INSTANCE  1
+#endif
+
+// Default pin used for generic 'Serial' instance
+// Mandatory for Firmata
+#ifndef PIN_SERIAL_RX
+  #define PIN_SERIAL_RX         PA10
+#endif
+#ifndef PIN_SERIAL_TX
+  #define PIN_SERIAL_TX         PA9
+#endif
+
+// LPUART1
+#ifndef PIN_SERIAL_LP1_RX
+  #define PIN_SERIAL_LP1_RX     PB10
+#endif
+#ifndef PIN_SERIAL_LP1_TX
+  #define PIN_SERIAL_LP1_TX     PB11
+#endif
+
+// Virtual COM Port for Cygnet with a 14-pin STLink Connector mounted.
+// To use the STLINK's Virtual COM port, this would be added to an Arduino project:
+//     HardwareSerial SerialVCP(PIN_VCP_RX, PIN_VCP_TX);
+#ifndef PIN_VCP_RX
+  #define PIN_VCP_RX     PIN_SERIAL_LP1_RX
+#endif
+#ifndef PIN_VCP_TX
+  #define PIN_VCP_TX     PIN_SERIAL_LP1_TX
+#endif
+
+// Extra HAL modules
+#if !defined(HAL_DAC_MODULE_DISABLED)
+  #define HAL_DAC_MODULE_ENABLED
+#endif
+#if !defined(HAL_QSPI_MODULE_DISABLED)
+  #define HAL_QSPI_MODULE_ENABLED
+#endif
+
+/*----------------------------------------------------------------------------
+ *        Arduino objects - C++ only
+ *----------------------------------------------------------------------------*/
+
+#ifdef __cplusplus
+  // These serial port names are intended to allow libraries and architecture-neutral
+  // sketches to automatically default to the correct port name for a particular type
+  // of use.  For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
+  // the first hardware serial port whose RX/TX pins are not dedicated to another use.
+  //
+  // SERIAL_PORT_MONITOR        Port which normally prints to the Arduino Serial Monitor
+  //
+  // SERIAL_PORT_USBVIRTUAL     Port which is USB virtual serial
+  //
+  // SERIAL_PORT_LINUXBRIDGE    Port which connects to a Linux system via Bridge library
+  //
+  // SERIAL_PORT_HARDWARE       Hardware serial port, physical RX & TX pins.
+  //
+  // SERIAL_PORT_HARDWARE_OPEN  Hardware serial ports which are open for use.  Their RX & TX
+  //                            pins are NOT connected to anything by default.
+  #ifndef SERIAL_PORT_MONITOR
+    #define SERIAL_PORT_MONITOR   Serial
+  #endif
+  #ifndef SERIAL_PORT_HARDWARE
+    #define SERIAL_PORT_HARDWARE  Serial
+  #endif
+#endif