diff --git a/README.md b/README.md
index 80326d2375..4586b51862 100644
--- a/README.md
+++ b/README.md
@@ -358,6 +358,7 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
| :green_heart: | STM32F303RB
STM32F303RC | Generic Board | *2.0.0* | |
| :green_heart: | STM32F303RC | [OLIMEXINO-STM32F3](https://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32F3/) | *2.0.0* | |
| :green_heart: | STM32F303VBT
STM32F303VCT | Generic Board | *2.0.0* | |
+| :yellow_heart: | STM32F303VD
STM32F303VE | Generic Board | *3.0.0* | |
| :green_heart: | STM32F318C8 | Generic Board | *2.4.0* | |
| :green_heart: | STM32F318K8 | Generic Board | *2.4.0* | |
| :green_heart: | STM32F328C8 | Generic Board | *2.4.0* | |
diff --git a/boards.txt b/boards.txt
index f44537ced7..002bd1b8c8 100644
--- a/boards.txt
+++ b/boards.txt
@@ -4766,6 +4766,42 @@ GenF3.menu.pnum.GENERIC_F303VCTX.build.product_line=STM32F303xC
GenF3.menu.pnum.GENERIC_F303VCTX.build.variant=STM32F3xx/F303V(B-C)T
GenF3.menu.pnum.GENERIC_F303VCTX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32F3xx/STM32F303.svd
+# Generic F303VDHx
+GenF3.menu.pnum.GENERIC_F303VDHX=Generic F303VDHx
+GenF3.menu.pnum.GENERIC_F303VDHX.upload.maximum_size=393216
+GenF3.menu.pnum.GENERIC_F303VDHX.upload.maximum_data_size=65536
+GenF3.menu.pnum.GENERIC_F303VDHX.build.board=GENERIC_F303VDHX
+GenF3.menu.pnum.GENERIC_F303VDHX.build.product_line=STM32F303xE
+GenF3.menu.pnum.GENERIC_F303VDHX.build.variant=STM32F3xx/F303V(D-E)(H-T)
+GenF3.menu.pnum.GENERIC_F303VDHX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32F3xx/STM32F303.svd
+
+# Generic F303VDTx
+GenF3.menu.pnum.GENERIC_F303VDTX=Generic F303VDTx
+GenF3.menu.pnum.GENERIC_F303VDTX.upload.maximum_size=393216
+GenF3.menu.pnum.GENERIC_F303VDTX.upload.maximum_data_size=65536
+GenF3.menu.pnum.GENERIC_F303VDTX.build.board=GENERIC_F303VDTX
+GenF3.menu.pnum.GENERIC_F303VDTX.build.product_line=STM32F303xE
+GenF3.menu.pnum.GENERIC_F303VDTX.build.variant=STM32F3xx/F303V(D-E)(H-T)
+GenF3.menu.pnum.GENERIC_F303VDTX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32F3xx/STM32F303.svd
+
+# Generic F303VEHx
+GenF3.menu.pnum.GENERIC_F303VEHX=Generic F303VEHx
+GenF3.menu.pnum.GENERIC_F303VEHX.upload.maximum_size=524288
+GenF3.menu.pnum.GENERIC_F303VEHX.upload.maximum_data_size=65536
+GenF3.menu.pnum.GENERIC_F303VEHX.build.board=GENERIC_F303VEHX
+GenF3.menu.pnum.GENERIC_F303VEHX.build.product_line=STM32F303xE
+GenF3.menu.pnum.GENERIC_F303VEHX.build.variant=STM32F3xx/F303V(D-E)(H-T)
+GenF3.menu.pnum.GENERIC_F303VEHX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32F3xx/STM32F303.svd
+
+# Generic F303VETx
+GenF3.menu.pnum.GENERIC_F303VETX=Generic F303VETx
+GenF3.menu.pnum.GENERIC_F303VETX.upload.maximum_size=524288
+GenF3.menu.pnum.GENERIC_F303VETX.upload.maximum_data_size=65536
+GenF3.menu.pnum.GENERIC_F303VETX.build.board=GENERIC_F303VETX
+GenF3.menu.pnum.GENERIC_F303VETX.build.product_line=STM32F303xE
+GenF3.menu.pnum.GENERIC_F303VETX.build.variant=STM32F3xx/F303V(D-E)(H-T)
+GenF3.menu.pnum.GENERIC_F303VETX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32F3xx/STM32F303.svd
+
# Generic F318C8Tx
GenF3.menu.pnum.GENERIC_F318C8TX=Generic F318C8Tx
GenF3.menu.pnum.GENERIC_F318C8TX.upload.maximum_size=65536
diff --git a/variants/STM32F3xx/F303V(D-E)(H-T)/generic_clock.c b/variants/STM32F3xx/F303V(D-E)(H-T)/generic_clock.c
index 996035f01c..59cc9575ea 100644
--- a/variants/STM32F3xx/F303V(D-E)(H-T)/generic_clock.c
+++ b/variants/STM32F3xx/F303V(D-E)(H-T)/generic_clock.c
@@ -21,8 +21,28 @@
*/
WEAK void SystemClock_Config(void)
{
- /* SystemClock_Config can be generated by STM32CubeMX */
-#warning "SystemClock_Config() is empty. Default clock at reset is used."
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
+ RCC_PeriphCLKInitTypeDef PeriphClkInit = {};
+
+ /** 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.AHBCLKDivider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB;
+ PeriphClkInit.USBClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
+ {
+ Error_Handler();
+ }
}
#endif /* ARDUINO_GENERIC_* */
diff --git a/variants/STM32F3xx/F303V(D-E)(H-T)/ldscript.ld b/variants/STM32F3xx/F303V(D-E)(H-T)/ldscript.ld
new file mode 100644
index 0000000000..520fd4ae8e
--- /dev/null
+++ b/variants/STM32F3xx/F303V(D-E)(H-T)/ldscript.ld
@@ -0,0 +1,179 @@
+/**
+ ******************************************************************************
+ * @file LinkerScript.ld
+ * @author Auto-generated by STM32CubeIDE
+ * @brief Linker script for STM32F303VDxx / STM32F303VExx Devices from STM32F3 series
+ * 384 Kbytes (F303VDxx) or 512 Kbytes (F303VExx) FLASH
+ * 16Kbytes CCMRAM
+ * 64Kbytes RAM
+ *
+ * Set heap size, stack size and stack location according
+ * to application requirements.
+ *
+ * Set memory bank area and size if external memory is used
+ ******************************************************************************
+ * @attention
+ *
+ *