diff --git a/IDE/OPENSTM32/.cproject b/IDE/OPENSTM32/.cproject
deleted file mode 100644
index 7b2bae139..000000000
--- a/IDE/OPENSTM32/.cproject
+++ /dev/null
@@ -1,323 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/IDE/OPENSTM32/.project b/IDE/OPENSTM32/.project
deleted file mode 100644
index f4d367236..000000000
--- a/IDE/OPENSTM32/.project
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
- wolfSTM32_CubeMX
-
-
-
-
-
- org.eclipse.cdt.managedbuilder.core.genmakebuilder
- clean,full,incremental,
-
-
-
-
- org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
- full,incremental,
-
-
-
-
-
- org.eclipse.cdt.core.cnature
- org.eclipse.cdt.managedbuilder.core.managedBuildNature
- org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
- fr.ac6.mcu.ide.core.MCUProjectNature
-
-
diff --git a/IDE/OPENSTM32/Inc/user_settings.h b/IDE/OPENSTM32/Inc/user_settings.h
deleted file mode 100644
index 1c4282fb0..000000000
--- a/IDE/OPENSTM32/Inc/user_settings.h
+++ /dev/null
@@ -1,474 +0,0 @@
-/* user_settings.h
- *
- * Copyright (C) 2006-2020 wolfSSL Inc.
- *
- * This file is part of wolfSSL.
- *
- * wolfSSL is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * wolfSSL is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
- */
-
-/* Example wolfSSL user settings for STM32F4 with CubeMX */
-
-#ifndef WOLFSSL_USER_SETTINGS_H
-#define WOLFSSL_USER_SETTINGS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* ------------------------------------------------------------------------- */
-/* Platform */
-/* ------------------------------------------------------------------------- */
-#undef WOLFSSL_GENERAL_ALIGNMENT
-#define WOLFSSL_GENERAL_ALIGNMENT 4
-
-#undef SINGLE_THREADED
-//#define SINGLE_THREADED
-
-#undef WOLFSSL_SMALL_STACK
-#define WOLFSSL_SMALL_STACK
-
-#undef WOLFSSL_STM32F4
-#define WOLFSSL_STM32F4
-
-#undef WOLFSSL_STM32_CUBEMX
-#define WOLFSSL_STM32_CUBEMX
-
-#undef FREERTOS
-#define FREERTOS
-
-#undef WOLFSSL_USER_IO
-#define WOLFSSL_USER_IO
-
-#undef WOLFSSL_NO_SOCK
-#define WOLFSSL_NO_SOCK
-
-
-/* ------------------------------------------------------------------------- */
-/* HW Crypto Acceleration */
-/* ------------------------------------------------------------------------- */
-// See settings.h STM32F4 section
-/* Optionally Disable Hardware Hashing Support */
-//#define NO_STM32_HASH
-//#define NO_STM32_RNG
-//#define NO_STM32_CRYPTO
-//#define WOLFSSL_STM32_PKA /* WB55 and L5 only */
-
-
-/* ------------------------------------------------------------------------- */
-/* Math Configuration */
-/* ------------------------------------------------------------------------- */
-#undef USE_FAST_MATH
-#define USE_FAST_MATH
-
-#ifdef USE_FAST_MATH
- #undef TFM_TIMING_RESISTANT
- #define TFM_TIMING_RESISTANT
-
- #undef TFM_NO_ASM
- //#define TFM_NO_ASM
-
- /* Optimizations (TFM_ARM, TFM_ASM or none) */
- //#define TFM_ASM
-#endif
-
-/* Wolf Single Precision Math */
-#undef WOLFSSL_SP
-#if 0
- #define WOLFSSL_SP
- #define WOLFSSL_SP_SMALL /* use smaller version of code */
- #define WOLFSSL_HAVE_SP_RSA
- //#define WOLFSSL_HAVE_SP_DH
- #define WOLFSSL_HAVE_SP_ECC
- #define WOLFSSL_SP_CACHE_RESISTANT
- #define WOLFSSL_SP_MATH /* only SP math - eliminates fast math code */
-
- //#define WOLFSSL_SP_ASM /* required if using the ASM versions */
- //#define WOLFSSL_SP_ARM_CORTEX_M_ASM
-#endif
-
-
-/* ------------------------------------------------------------------------- */
-/* Crypto */
-/* ------------------------------------------------------------------------- */
-/* RSA */
-#undef NO_RSA
-#if 1
- #ifdef USE_FAST_MATH
- /* Maximum math bits (Max RSA key bits * 2) */
- #undef FP_MAX_BITS
- #define FP_MAX_BITS 4096
- #endif
-
- /* half as much memory but twice as slow */
- #undef RSA_LOW_MEM
- //#define RSA_LOW_MEM
-
- /* Enables blinding mode, to prevent timing attacks */
- #undef WC_RSA_BLINDING
- #define WC_RSA_BLINDING
-
- /* RSA PSS Support (required for TLS v1.3)*/
- #if 0
- #define WC_RSA_PSS
- #endif
-#else
- #define NO_RSA
-#endif
-
-/* ECC */
-#if 1
- #undef HAVE_ECC
- #define HAVE_ECC
-
- /* Manually define enabled curves */
- #undef ECC_USER_CURVES
- #define ECC_USER_CURVES
-
- //#define HAVE_ECC192
- //#define HAVE_ECC224
- #undef NO_ECC256
- //#define HAVE_ECC384
- //#define HAVE_ECC521
-
- /* Fixed point cache (speeds repeated operations against same private key) */
- #undef FP_ECC
- //#define FP_ECC
- #ifdef FP_ECC
- /* Bits / Entries */
- #undef FP_ENTRIES
- #define FP_ENTRIES 2
- #undef FP_LUT
- #define FP_LUT 4
- #endif
-
- /* Optional ECC calculation method */
- /* Note: doubles heap usage, but slightly faster */
- #undef ECC_SHAMIR
- #define ECC_SHAMIR
-
- /* Reduces heap usage, but slower */
- #undef ECC_TIMING_RESISTANT
- #define ECC_TIMING_RESISTANT
-
- #ifdef USE_FAST_MATH
- #ifdef NO_RSA
- /* Custom fastmath size if not using RSA */
- /* MAX = ROUND32(ECC BITS 256) + SIZE_OF_MP_DIGIT(32) */
- #undef FP_MAX_BITS
- #define FP_MAX_BITS (256 + 32)
- #else
- #undef ALT_ECC_SIZE
- #define ALT_ECC_SIZE
- #endif
-
- /* Enable TFM optimizations for ECC */
- //#define TFM_ECC192
- //#define TFM_ECC224
- #define TFM_ECC256
- //#define TFM_ECC384
- //#define TFM_ECC521
- #endif
-#endif
-
-/* DH */
-#undef NO_DH
-#if 0
- #define HAVE_DH /* freeRTOS settings.h requires this */
-#else
- //#define NO_DH
-#endif
-
-/* AES */
-#undef NO_AES
-#if 1
- #undef HAVE_AESGCM
- #define HAVE_AESGCM
-
- /* GCM Method: GCM_SMALL, GCM_WORD32 or GCM_TABLE */
- #undef GCM_SMALL
- #define GCM_SMALL
-
- #undef WOLFSSL_AES_COUNTER
- #define WOLFSSL_AES_COUNTER
-
- #undef WOLFSSL_AES_DIRECT
- #define WOLFSSL_AES_DIRECT
-
- #undef HAVE_AES_ECB
- #define HAVE_AES_ECB
-#else
- #define NO_AES
-#endif
-
-/* DES */
-#undef NO_DES3
-#if 1
-
-#else
- #define NO_DES3
-#endif
-
-/* ChaCha20 / Poly1305 */
-#undef HAVE_CHACHA
-#undef HAVE_POLY1305
-#if 1
- #define HAVE_CHACHA
- #define HAVE_POLY1305
-
- /* Needed for Poly1305 */
- #undef HAVE_ONE_TIME_AUTH
- #define HAVE_ONE_TIME_AUTH
-#endif
-
-/* Ed25519 / Curve25519 */
-#undef HAVE_CURVE25519
-#undef HAVE_ED25519
-#if 0
- #define HAVE_CURVE25519
- #define HAVE_ED25519
-
- /* Optionally use small math (less flash usage, but much slower) */
- #if 0
- #define CURVED25519_SMALL
- #endif
-#endif
-
-
-/* ------------------------------------------------------------------------- */
-/* Hashing */
-/* ------------------------------------------------------------------------- */
-/* Sha */
-#undef NO_SHA
-#if 1
- /* 1k smaller, but 25% slower */
- //#define USE_SLOW_SHA
-#else
- #define NO_SHA
-#endif
-
-/* Sha256 */
-#undef NO_SHA256
-#if 1
- /* not unrolled - ~2k smaller and ~25% slower */
- //#define USE_SLOW_SHA256
-
- /* Sha224 */
- #if 0
- #define WOLFSSL_SHA224
- #endif
-#else
- #define NO_SHA256
-#endif
-
-/* Sha512 */
-#undef WOLFSSL_SHA512
-#if 1
- /* over twice as small, but 50% slower */
- //#define USE_SLOW_SHA512
-
- #define WOLFSSL_SHA512
- #define HAVE_SHA512 /* freeRTOS settings.h requires this */
-
- /* Sha384 */
- #undef WOLFSSL_SHA384
- #if 1
- #define WOLFSSL_SHA384
- #endif
-#endif
-
-/* MD5 */
-#if 1
- /* enabled */
-#else
- #define NO_MD5
-#endif
-
-
-/* ------------------------------------------------------------------------- */
-/* Benchmark / Test */
-/* ------------------------------------------------------------------------- */
-/* Use reduced benchmark / test sizes */
-#undef BENCH_EMBEDDED
-#define BENCH_EMBEDDED
-
-#undef USE_CERT_BUFFERS_2048
-#define USE_CERT_BUFFERS_2048
-
-#undef USE_CERT_BUFFERS_256
-#define USE_CERT_BUFFERS_256
-
-
-/* ------------------------------------------------------------------------- */
-/* Debugging */
-/* ------------------------------------------------------------------------- */
-#undef DEBUG_WOLFSSL
-//#define DEBUG_WOLFSSL
-
-#ifdef DEBUG_WOLFSSL
- /* Use this to measure / print heap usage */
- #if 0
- #undef USE_WOLFSSL_MEMORY
- #define USE_WOLFSSL_MEMORY
-
- #undef WOLFSSL_TRACK_MEMORY
- #define WOLFSSL_TRACK_MEMORY
-
- #define WOLFSSL_DEBUG_MEMORY
- #define WOLFSSL_DEBUG_MEMORY_PRINT
- #endif
-#else
- #undef NO_WOLFSSL_MEMORY
- //#define NO_WOLFSSL_MEMORY
-
- #undef NO_ERROR_STRINGS
- //#define NO_ERROR_STRINGS
-#endif
-
-
-/* ------------------------------------------------------------------------- */
-/* Port */
-/* ------------------------------------------------------------------------- */
-
-/* Override Current Time */
-/* Allows custom "custom_time()" function to be used for benchmark */
-#define WOLFSSL_USER_CURRTIME
-
-
-/* ------------------------------------------------------------------------- */
-/* RNG */
-/* ------------------------------------------------------------------------- */
-/* Size of returned HW RNG value */
-#define NO_OLD_RNGNAME
-
-/* Choose RNG method */
-#if 1
- #ifndef STM32_RNG
- #define WOLFSSL_GENSEED_FORTEST
- #endif
-
- /* Use built-in P-RNG (SHA256 based) with HW RNG */
- /* P-RNG + HW RNG (P-RNG is ~8K) */
- #undef HAVE_HASHDRBG
- #define HAVE_HASHDRBG
-#else
- /* Bypass P-RNG and use only HW RNG */
- extern int custom_rand_generate_block(unsigned char* output, unsigned int sz);
- #undef CUSTOM_RAND_GENERATE_BLOCK
- #define CUSTOM_RAND_GENERATE_BLOCK custom_rand_generate_block
-#endif
-
-
-/* ------------------------------------------------------------------------- */
-/* Enable Features */
-/* ------------------------------------------------------------------------- */
-#undef WOLFSSL_TLS13
-#if 0
- #define WOLFSSL_TLS13
-#endif
-
-#undef KEEP_PEER_CERT
-//#define KEEP_PEER_CERT
-
-#undef HAVE_COMP_KEY
-//#define HAVE_COMP_KEY
-
-#undef HAVE_TLS_EXTENSIONS
-#define HAVE_TLS_EXTENSIONS
-
-#undef HAVE_SUPPORTED_CURVES
-#define HAVE_SUPPORTED_CURVES
-
-#undef WOLFSSL_BASE64_ENCODE
-//#define WOLFSSL_BASE64_ENCODE
-
-/* TLS Session Cache */
-#if 0
- #define SMALL_SESSION_CACHE
-#else
- #define NO_SESSION_CACHE
-#endif
-
-
-/* ------------------------------------------------------------------------- */
-/* Disable Features */
-/* ------------------------------------------------------------------------- */
-#undef NO_WOLFSSL_SERVER
-//#define NO_WOLFSSL_SERVER
-
-#undef NO_WOLFSSL_CLIENT
-//#define NO_WOLFSSL_CLIENT
-
-#undef NO_CRYPT_TEST
-//#define NO_CRYPT_TEST
-
-#undef NO_CRYPT_BENCHMARK
-//#define NO_CRYPT_BENCHMARK
-
-/* In-lining of misc.c functions */
-/* If defined, must include wolfcrypt/src/misc.c in build */
-/* Slower, but about 1k smaller */
-#undef NO_INLINE
-//#define NO_INLINE
-
-#undef NO_FILESYSTEM
-#define NO_FILESYSTEM
-
-#undef NO_WRITEV
-#define NO_WRITEV
-
-#undef NO_MAIN_DRIVER
-#define NO_MAIN_DRIVER
-
-#undef NO_DEV_RANDOM
-#define NO_DEV_RANDOM
-
-#undef NO_DSA
-#define NO_DSA
-
-#undef NO_RC4
-#define NO_RC4
-
-#undef NO_OLD_TLS
-#define NO_OLD_TLS
-
-#undef NO_HC128
-#define NO_HC128
-
-#undef NO_RABBIT
-#define NO_RABBIT
-
-#undef NO_PSK
-#define NO_PSK
-
-#undef NO_MD4
-#define NO_MD4
-
-#undef NO_PWDBASED
-#define NO_PWDBASED
-
-#undef NO_CODING
-//#define NO_CODING
-
-/* bypass certificate date checking, due to lack of properly configured RTC source */
-#undef NO_ASN_TIME
-#define NO_ASN_TIME
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* WOLFSSL_USER_SETTINGS_H */
diff --git a/IDE/OPENSTM32/README.md b/IDE/OPENSTM32/README.md
deleted file mode 100644
index 30adb473b..000000000
--- a/IDE/OPENSTM32/README.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# wolfSSL STM32 Example for System Workbench for STM32 (Open STM32 Tools)
-
-This example includes:
-
-* wolfCrypt test
-* wolfCrypt benchmark
-* wolfSSL TLS client/server test using in-memory transfers
-
-These examples use the CubeMX Hal for STM32. If you'd like to use the older Standard Peripheral library undefine `WOLFSSL_STM32_CUBEMX` in `user_settings.h`.
-
-## Requirements
-
-* STM32CubeMX: STM32 CubeMX HAL code generation tool - [http://www.st.com/en/development-tools/stm32cubemx.html](http://www.st.com/en/development-tools/stm32cubemx.html)
-* SystemWorkbench for STM32 - [http://www.st.com/en/development-tools/sw4stm32.html](http://www.st.com/en/development-tools/sw4stm32.html)
-
-## Setup
-
-1. Using the STM32CubeMX tool, load the `/IDE/OPENSTM32/wolfSTM32.ioc` file.
-2. Adjust the HAL options based on your specific micro-controller.
-3. Generate source code.
-4. Run `SystemWorkbench` and choose a new workspace location for this project.
-5. Import `wolfSTM32` project from `/IDE/OPENSTM32/`.
-6. Adjust the micro-controller define in `Project Settings -> C/C++ General -> Paths and Symbols -> Symbols -> GNU C`. Example uses `STM32F437xx`, but should be changed to reflect your micro-controller type.
-7. Build and Run
-
-If you hardware support crypto acceleration then:
-1. Manually copy over the CubeMX HAL files for `stm32f4xx_hal_cryp.c`, `stm32f4xx_hal_cryp_ex.c`, `stm32f4xx_hal_cryp.h`, `stm32f4xx_hal_cryp_ex.h`.
-2. Uncomment the `#define HAL_CRYP_MODULE_ENABLED` line in `stm32f4xx_hal_conf.h`.
-
-## Configuration
-
-The settings for the wolfSTM32 project are located in `/IDE/OPENSTM32/Inc/user_settings.h`.
-
-* To enable STM32F2 support define `WOLFSSL_STM32F2`.
-* To enable STM32F4 support define `WOLFSSL_STM32F4`.
-* To enable STM32F7 support define `WOLFSSL_STM32F7`.
-* To enable STM32L4 support define `WOLFSSL_STM32L4`.
-
-If you are using FreeRTOS make sure your `FreeRTOSConfig.h` has its `configTOTAL_HEAP_SIZE` increased.
-
-The TLS client/server benchmark example requires about 76 KB for allocated tasks (with stack) and peak heap.
-
-## Example Output
-
-```
-....MENU
-
-.t. WolfCrypt Test
-.b. WolfCrypt Benchmark
-.l. WolfSSL TLS Bench
-.e. Show Cipher List
-
-Please select one of the above options:
-```
-
-## Support
-
-For questions please email [support@wolfssl.com](mailto:support@wolfssl.com)
diff --git a/IDE/OPENSTM32/Src/main.c b/IDE/OPENSTM32/Src/main.c
deleted file mode 100644
index 70efb5a0a..000000000
--- a/IDE/OPENSTM32/Src/main.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/* main.c
- *
- * Copyright (C) 2006-2020 wolfSSL Inc.
- *
- * This file is part of wolfSSL.
- *
- * wolfSSL is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * wolfSSL is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
- */
-
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "wolfssl_example.h"
-
-
-/* Private variables ---------------------------------------------------------*/
-
-RNG_HandleTypeDef hrng;
-RTC_HandleTypeDef hrtc;
-SPI_HandleTypeDef hspi1;
-UART_HandleTypeDef huart4;
-CRYP_HandleTypeDef CrypHandle;
-HASH_HandleTypeDef HashHandle;
-
-osThreadId defaultTaskHandle;
-
-int __errno;
-
-/* Private function prototypes -----------------------------------------------*/
-static void SystemClock_Config(void);
-static void Error_Handler(void);
-
-static void MX_GPIO_Init(void);
-static void MX_RNG_Init(void);
-static void MX_RTC_Init(void);
-static void MX_SPI1_Init(void);
-static void MX_UART4_Init(void);
-
-
-int main(void)
-{
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
-
- /* Configure the system clock */
- SystemClock_Config();
-
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_RNG_Init();
- MX_RTC_Init();
- MX_SPI1_Init();
- MX_UART4_Init();
-
-#ifndef FREERTOS
- wolfCryptDemo(NULL);
-#else
- /* Create the thread(s) */
- /* definition and creation of defaultTask */
- osThreadDef(defaultTask, wolfCryptDemo, osPriorityNormal, 0, WOLF_EXAMPLES_STACK);
- defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
-
- /* Start scheduler */
- osKernelStart();
-
- /* We should never get here as control is now taken by the scheduler */
-
- /* Infinite loop */
- while (1) {}
-#endif
-}
-
-/** System Clock Configuration
-*/
-static void SystemClock_Config(void)
-{
-
- RCC_OscInitTypeDef RCC_OscInitStruct;
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
- RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
-
- __HAL_RCC_PWR_CLK_ENABLE();
-
- __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
-
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
- RCC_OscInitStruct.LSEState = RCC_LSE_ON;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLM = 15;
- RCC_OscInitStruct.PLL.PLLN = 144;
- RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
- RCC_OscInitStruct.PLL.PLLQ = 5;
- if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
- {
- Error_Handler();
- }
-
- 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_DIV4;
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
- if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
- {
- Error_Handler();
- }
-
- PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
- PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
- if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
- {
- Error_Handler();
- }
-
- HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
-
- HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
-
- /* SysTick_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);
-}
-
-/* RNG init function */
-static void MX_RNG_Init(void)
-{
-
- hrng.Instance = RNG;
- if (HAL_RNG_Init(&hrng) != HAL_OK)
- {
- Error_Handler();
- }
-
-}
-
-/* RTC init function */
-#define RTC_ASYNCH_PREDIV 0x7F /* LSE as RTC clock */
-#define RTC_SYNCH_PREDIV 0x00FF /* LSE as RTC clock */
-static void MX_RTC_Init(void)
-{
-
- RTC_TimeTypeDef sTime;
- RTC_DateTypeDef sDate;
-
- /**Initialize RTC and set the Time and Date
- */
- hrtc.Instance = RTC;
- hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
- hrtc.Init.AsynchPrediv = RTC_ASYNCH_PREDIV;
- hrtc.Init.SynchPrediv = RTC_SYNCH_PREDIV;
- hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
- hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
- hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
- if (HAL_RTC_Init(&hrtc) != HAL_OK)
- {
- Error_Handler();
- }
-
- sTime.Hours = 0x0;
- sTime.Minutes = 0x0;
- sTime.Seconds = 0x0;
- sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
- sTime.StoreOperation = RTC_STOREOPERATION_RESET;
- if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
- {
- Error_Handler();
- }
-
- sDate.WeekDay = RTC_WEEKDAY_MONDAY;
- sDate.Month = RTC_MONTH_JANUARY;
- sDate.Date = 0x1;
- sDate.Year = 0x0;
-
- if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
- {
- Error_Handler();
- }
-
- /**Enable the TimeStamp
- */
- if (HAL_RTCEx_SetTimeStamp(&hrtc, RTC_TIMESTAMPEDGE_RISING, RTC_TIMESTAMPPIN_DEFAULT) != HAL_OK)
- {
- Error_Handler();
- }
-
- /**Enable the reference Clock input
- */
- if (HAL_RTCEx_SetRefClock(&hrtc) != HAL_OK)
- {
- Error_Handler();
- }
-}
-
-
-/* SPI1 init function */
-static void MX_SPI1_Init(void)
-{
-
- hspi1.Instance = SPI1;
- hspi1.Init.Mode = SPI_MODE_MASTER;
- hspi1.Init.Direction = SPI_DIRECTION_2LINES;
- hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
- hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
- hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
- hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
- hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
- hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
- hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
- hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
- hspi1.Init.CRCPolynomial = 10;
- if (HAL_SPI_Init(&hspi1) != HAL_OK)
- {
- Error_Handler();
- }
-
-}
-
-/* UART4 init function */
-static void MX_UART4_Init(void)
-{
-
- huart4.Instance = UART4;
- huart4.Init.BaudRate = 115200;
- huart4.Init.WordLength = UART_WORDLENGTH_8B;
- huart4.Init.StopBits = UART_STOPBITS_1;
- huart4.Init.Parity = UART_PARITY_NONE;
- huart4.Init.Mode = UART_MODE_TX_RX;
- huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- huart4.Init.OverSampling = UART_OVERSAMPLING_16;
- if (HAL_UART_Init(&huart4) != HAL_OK)
- {
- Error_Handler();
- }
-
- // Turn off buffers, so I/O occurs immediately
- setvbuf(stdin, NULL, _IONBF, 0);
- setvbuf(stdout, NULL, _IONBF, 0);
- setvbuf(stderr, NULL, _IONBF, 0);
-}
-
-int _write (int fd, char *ptr, int len)
-{
- (void)fd;
-
- /* Write "len" of char from "ptr" to file id "fd"
- * Return number of char written.
- * Need implementing with UART here. */
- HAL_UART_Transmit(&huart4, (uint8_t *)ptr, len, 0xFFFF);
-
- return len;
-}
-
-int _read (int fd, char *ptr, int len)
-{
- /* Read "len" of char to "ptr" from file id "fd"
- * Return number of char read.
- * Need implementing with UART here. */
- (void)fd;
-
- return HAL_UART_Receive(&huart4, (uint8_t*)ptr, len, 0xFFFF);
-}
-
-void _ttywrch(int ch) {
- /* Write one char "ch" to the default console
- * Need implementing with UART here. */
- _write(0, (char*)&ch, 1);
-}
-
-
-/** Configure pins as
- * Analog
- * Input
- * Output
- * EVENT_OUT
- * EXTI
-*/
-static void MX_GPIO_Init(void)
-{
-
- /* GPIO Ports Clock Enable */
- __HAL_RCC_GPIOE_CLK_ENABLE();
- __HAL_RCC_GPIOG_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOH_CLK_ENABLE();
-
-}
-
-
-/**
- * @brief Period elapsed callback in non blocking mode
- * @note This function is called when TIM1 interrupt took place, inside
- * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
- * a global variable "uwTick" used as application time base.
- * @param htim : TIM handle
- * @retval None
- */
-void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
-{
- if (htim->Instance == TIM1) {
- HAL_IncTick();
- }
-}
-
-/**
- * @brief This function is executed in case of error occurrence.
- * @param None
- * @retval None
- */
-static void Error_Handler(void)
-{
- /* USER CODE BEGIN Error_Handler */
- /* User can add his own implementation to report the HAL error return state */
- while(1)
- {
- }
- /* USER CODE END Error_Handler */
-}
-
-#ifdef USE_FULL_ASSERT
-
-/**
- * @brief Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval None
- */
-void assert_failed(uint8_t* file, uint32_t line)
-{
- /* USER CODE BEGIN 6 */
- /* User can add his own implementation to report the file name and line number,
- ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* USER CODE END 6 */
-
-}
-
-#endif
diff --git a/IDE/OPENSTM32/include.am b/IDE/OPENSTM32/include.am
deleted file mode 100644
index 2c1835e0d..000000000
--- a/IDE/OPENSTM32/include.am
+++ /dev/null
@@ -1,14 +0,0 @@
-# vim:ft=automake
-# included from Top Level Makefile.am
-# All paths should be given relative to the root
-
-EXTRA_DIST+= IDE/OPENSTM32/README.md
-EXTRA_DIST+= IDE/OPENSTM32/.cproject
-EXTRA_DIST+= IDE/OPENSTM32/.project
-EXTRA_DIST+= IDE/OPENSTM32/wolfSTM32.cfg
-EXTRA_DIST+= IDE/OPENSTM32/wolfSTM32.ioc
-EXTRA_DIST+= IDE/OPENSTM32/wolfSTM32.xml
-EXTRA_DIST+= IDE/OPENSTM32/Src/main.c
-EXTRA_DIST+= IDE/OPENSTM32/Src/wolfssl_example.c
-EXTRA_DIST+= IDE/OPENSTM32/Inc/user_settings.h
-EXTRA_DIST+= IDE/OPENSTM32/Inc/wolfssl_example.h
diff --git a/IDE/OPENSTM32/wolfSTM32.cfg b/IDE/OPENSTM32/wolfSTM32.cfg
deleted file mode 100644
index f9b02ce4c..000000000
--- a/IDE/OPENSTM32/wolfSTM32.cfg
+++ /dev/null
@@ -1,13 +0,0 @@
-# This is an wolfSTM32 board with a single STM32F437IIHx chip.
-# Generated by System Workbench for STM32
-
-source [find interface/stlink-v2-1.cfg]
-
-set WORKAREASIZE 0x30000
-transport select "hla_jtag"
-set CPUTAPID 0x4ba00477
-
-source [find target/stm32f4x_stlink.cfg]
-
-# use hardware reset, connect under reset
-reset_config srst_only srst_nogate
diff --git a/IDE/OPENSTM32/wolfSTM32.ioc b/IDE/OPENSTM32/wolfSTM32.ioc
deleted file mode 100644
index d91e1d25c..000000000
--- a/IDE/OPENSTM32/wolfSTM32.ioc
+++ /dev/null
@@ -1,213 +0,0 @@
-#MicroXplorer Configuration settings - do not modify
-FREERTOS.IPParameters=Tasks01
-FREERTOS.Tasks01=defaultTask,0,128,StartDefaultTask,Default
-File.Version=6
-KeepUserPlacement=false
-LWIP.Version=v1.5.0_RC0_20160211_Cube
-Mcu.Family=STM32F4
-Mcu.IP0=CRC
-Mcu.IP1=ETH
-Mcu.IP2=FREERTOS
-Mcu.IP3=LWIP
-Mcu.IP4=NVIC
-Mcu.IP5=RCC
-Mcu.IP6=RNG
-Mcu.IP7=RTC
-Mcu.IP8=SYS
-Mcu.IP9=UART4
-Mcu.IPNb=10
-Mcu.Name=STM32F437I(G-I)Hx
-Mcu.Package=UFBGA176
-Mcu.Pin0=PE2
-Mcu.Pin1=PG14
-Mcu.Pin10=PC10
-Mcu.Pin11=PC13
-Mcu.Pin12=PC14/OSC32_IN
-Mcu.Pin13=PC15/OSC32_OUT
-Mcu.Pin14=PH2
-Mcu.Pin15=PH0/OSC_IN
-Mcu.Pin16=PH3
-Mcu.Pin17=PH1/OSC_OUT
-Mcu.Pin18=PC1
-Mcu.Pin19=PC2
-Mcu.Pin2=PG13
-Mcu.Pin20=PC3
-Mcu.Pin21=PH6
-Mcu.Pin22=PA1
-Mcu.Pin23=PC4
-Mcu.Pin24=PH7
-Mcu.Pin25=PA2
-Mcu.Pin26=PC5
-Mcu.Pin27=PA7
-Mcu.Pin28=PB15
-Mcu.Pin29=VP_CRC_VS_CRC
-Mcu.Pin3=PB4
-Mcu.Pin30=VP_FREERTOS_VS_ENABLE
-Mcu.Pin31=VP_LWIP_VS_Enabled
-Mcu.Pin32=VP_RNG_VS_RNG
-Mcu.Pin33=VP_SYS_VS_tim1
-Mcu.Pin4=PB3
-Mcu.Pin5=PA15
-Mcu.Pin6=PA14
-Mcu.Pin7=PA13
-Mcu.Pin8=PG11
-Mcu.Pin9=PC11
-Mcu.PinsNb=34
-Mcu.UserConstants=
-Mcu.UserName=STM32F437IIHx
-MxCube.Version=4.16.1
-MxDb.Version=DB.4.0.161
-NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false
-NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false
-NVIC.ETH_IRQn=true\:0\:0\:false\:false\:true\:false
-NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false
-NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false
-NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false
-NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true
-NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
-NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false
-NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:true
-NVIC.TIM1_UP_TIM10_IRQn=true\:0\:0\:false\:false\:true\:false
-NVIC.TimeBase=TIM1_UP_TIM10_IRQn
-NVIC.TimeBaseIP=TIM1
-NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false
-PA1.Mode=MII
-PA1.Signal=ETH_RX_CLK
-PA13.Mode=JTAG_5_pins
-PA13.Signal=SYS_JTMS-SWDIO
-PA14.Mode=JTAG_5_pins
-PA14.Signal=SYS_JTCK-SWCLK
-PA15.Mode=JTAG_5_pins
-PA15.Signal=SYS_JTDI
-PA2.Mode=MII
-PA2.Signal=ETH_MDIO
-PA7.Mode=MII
-PA7.Signal=ETH_RX_DV
-PB15.Mode=Reference_Clock_Detection_Activate
-PB15.Signal=RTC_REFIN
-PB3.Mode=JTAG_5_pins
-PB3.Signal=SYS_JTDO-SWO
-PB4.Mode=JTAG_5_pins
-PB4.Signal=SYS_JTRST
-PC1.Mode=MII
-PC1.Signal=ETH_MDC
-PC10.Mode=Asynchronous
-PC10.Signal=UART4_TX
-PC11.Mode=Asynchronous
-PC11.Signal=UART4_RX
-PC13.Mode=Timestamp enabled - Input Enabled to AF1
-PC13.Signal=RTC_AF1
-PC14/OSC32_IN.Mode=LSE-External-Oscillator
-PC14/OSC32_IN.Signal=RCC_OSC32_IN
-PC15/OSC32_OUT.Mode=LSE-External-Oscillator
-PC15/OSC32_OUT.Signal=RCC_OSC32_OUT
-PC2.Mode=MII
-PC2.Signal=ETH_TXD2
-PC3.Mode=MII
-PC3.Signal=ETH_TX_CLK
-PC4.Mode=MII
-PC4.Signal=ETH_RXD0
-PC5.Mode=MII
-PC5.Signal=ETH_RXD1
-PCC.Checker=false
-PCC.Line=STM32F427/437
-PCC.MCU=STM32F437I(G-I)Hx
-PCC.MXVersion=4.16.1
-PCC.PartNumber=STM32F437IIHx
-PCC.Seq0=0
-PCC.Series=STM32F4
-PCC.Temperature=25
-PCC.Vdd=null
-PE2.Mode=MII
-PE2.Signal=ETH_TXD3
-PG11.Mode=MII
-PG11.Signal=ETH_TX_EN
-PG13.Mode=MII
-PG13.Signal=ETH_TXD0
-PG14.Mode=MII
-PG14.Signal=ETH_TXD1
-PH0/OSC_IN.Mode=HSE-External-Oscillator
-PH0/OSC_IN.Signal=RCC_OSC_IN
-PH1/OSC_OUT.Mode=HSE-External-Oscillator
-PH1/OSC_OUT.Signal=RCC_OSC_OUT
-PH2.Mode=MII
-PH2.Signal=ETH_CRS
-PH3.Mode=MII
-PH3.Signal=ETH_COL
-PH6.Mode=MII
-PH6.Signal=ETH_RXD2
-PH7.Mode=MII
-PH7.Signal=ETH_RXD3
-ProjectManager.AskForMigrate=true
-ProjectManager.BackupPrevious=false
-ProjectManager.CompilerOptimize=2
-ProjectManager.ComputerToolchain=false
-ProjectManager.CoupleFile=false
-ProjectManager.DeletePrevious=true
-ProjectManager.DeviceId=STM32F437IIHx
-ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.13.0
-ProjectManager.FreePins=false
-ProjectManager.HalAssertFull=false
-ProjectManager.HeapSize=0x10000
-ProjectManager.KeepUserCode=true
-ProjectManager.LastFirmware=true
-ProjectManager.LibraryCopy=1
-ProjectManager.PreviousToolchain=SW4STM32
-ProjectManager.ProjectBuild=false
-ProjectManager.ProjectFileName=wolfSTM32.ioc
-ProjectManager.ProjectName=wolfSTM32
-ProjectManager.StackSize=0x4000
-ProjectManager.TargetToolchain=SW4STM32
-ProjectManager.ToolChainLocation=
-ProjectManager.UnderRoot=true
-ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false,2-MX_CRC_Init-CRC-false,3-MX_RNG_Init-RNG-false,4-MX_UART4_Init-UART4-false,5-MX_LWIP_Init-LWIP-false,6-MX_RTC_Init-RTC-false
-RCC.48MHZClocksFreq_Value=48000000
-RCC.AHBFreq_Value=120000000
-RCC.APB1CLKDivider=RCC_HCLK_DIV4
-RCC.APB1Freq_Value=30000000
-RCC.APB1TimFreq_Value=60000000
-RCC.APB2CLKDivider=RCC_HCLK_DIV2
-RCC.APB2Freq_Value=60000000
-RCC.APB2TimFreq_Value=120000000
-RCC.CortexFreq_Value=120000000
-RCC.EthernetFreq_Value=120000000
-RCC.FCLKCortexFreq_Value=120000000
-RCC.FamilyName=M
-RCC.HCLKFreq_Value=120000000
-RCC.HSE_VALUE=25000000
-RCC.HSI_VALUE=16000000
-RCC.I2SClocksFreq_Value=160000000
-RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLSourceVirtual,RCC_RTC_Clock_Source,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VcooutputI2S,VcooutputI2SQ
-RCC.LSI_VALUE=32000
-RCC.MCO2PinFreq_Value=120000000
-RCC.PLLCLKFreq_Value=120000000
-RCC.PLLM=15
-RCC.PLLN=144
-RCC.PLLQ=5
-RCC.PLLQCLKFreq_Value=48000000
-RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
-RCC.RCC_RTC_Clock_Source=RCC_RTCCLKSOURCE_LSE
-RCC.RTCFreq_Value=32768
-RCC.RTCHSEDivFreq_Value=12500000
-RCC.SAI_AClocksFreq_Value=20416666.666666668
-RCC.SAI_BClocksFreq_Value=20416666.666666668
-RCC.SYSCLKFreq_VALUE=120000000
-RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
-RCC.VCOI2SOutputFreq_Value=320000000
-RCC.VCOInputFreq_Value=1666666.6666666667
-RCC.VCOOutputFreq_Value=240000000
-RCC.VCOSAIOutputFreq_Value=81666666.66666667
-RCC.VCOSAIOutputFreq_ValueQ=20416666.666666668
-RCC.VcooutputI2S=160000000
-RCC.VcooutputI2SQ=160000000
-VP_CRC_VS_CRC.Mode=CRC_Activate
-VP_CRC_VS_CRC.Signal=CRC_VS_CRC
-VP_FREERTOS_VS_ENABLE.Mode=Enabled
-VP_FREERTOS_VS_ENABLE.Signal=FREERTOS_VS_ENABLE
-VP_LWIP_VS_Enabled.Mode=Enabled
-VP_LWIP_VS_Enabled.Signal=LWIP_VS_Enabled
-VP_RNG_VS_RNG.Mode=RNG_Activate
-VP_RNG_VS_RNG.Signal=RNG_VS_RNG
-VP_SYS_VS_tim1.Mode=TIM1
-VP_SYS_VS_tim1.Signal=SYS_VS_tim1
-board=wolfSTM32
diff --git a/IDE/OPENSTM32/wolfSTM32.xml b/IDE/OPENSTM32/wolfSTM32.xml
deleted file mode 100644
index a45880924..000000000
--- a/IDE/OPENSTM32/wolfSTM32.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
- wolfSTM32
- stm32f437iihx
- JTAG
- ST-LinkV2-1
-
-
diff --git a/IDE/STM32Cube/Boards/STM32F407.ioc b/IDE/STM32Cube/Boards/STM32F407.ioc
new file mode 100644
index 000000000..64a41f67b
--- /dev/null
+++ b/IDE/STM32Cube/Boards/STM32F407.ioc
@@ -0,0 +1,128 @@
+#MicroXplorer Configuration settings - do not modify
+FREERTOS.FootprintOK=true
+FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,FootprintOK
+FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;wolfCrypt,8,8960,wolfCryptDemo,As external,NULL,Dynamic,NULL,NULL
+FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2
+FREERTOS.configTOTAL_HEAP_SIZE=122880
+FREERTOS.configUSE_MALLOC_FAILED_HOOK=1
+File.Version=6
+KeepUserPlacement=false
+Mcu.Family=STM32F4
+Mcu.IP0=FREERTOS
+Mcu.IP1=NVIC
+Mcu.IP2=RCC
+Mcu.IP3=RNG
+Mcu.IP4=RTC
+Mcu.IP5=SYS
+Mcu.IP6=USART2
+Mcu.IPNb=7
+Mcu.Name=STM32F407V(E-G)Tx
+Mcu.Package=LQFP100
+Mcu.Pin0=PA2
+Mcu.Pin1=PA3
+Mcu.Pin2=PC10
+Mcu.Pin3=PC11
+Mcu.Pin4=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin5=VP_RNG_VS_RNG
+Mcu.Pin6=VP_RTC_VS_RTC_Activate
+Mcu.Pin7=VP_SYS_VS_tim1
+Mcu.Pin8=VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+Mcu.PinsNb=9
+Mcu.ThirdParty0=wolfSSL.wolfSSL.4.4.1
+Mcu.ThirdPartyNb=1
+Mcu.UserConstants=
+Mcu.UserName=STM32F407VGTx
+MxCube.Version=5.6.1
+MxDb.Version=DB.5.0.60
+NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.ForceEnableDMAVector=true
+NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
+NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
+NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.TIM1_UP_TIM10_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
+NVIC.TimeBase=TIM1_UP_TIM10_IRQn
+NVIC.TimeBaseIP=TIM1
+NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+PA2.Mode=Asynchronous
+PA2.Signal=USART2_TX
+PA3.Mode=Asynchronous
+PA3.Signal=USART2_RX
+PC10.Locked=true
+PC10.Signal=UART4_TX
+PC11.Locked=true
+PC11.Signal=UART4_RX
+PinOutPanel.RotationAngle=0
+ProjectManager.AskForMigrate=true
+ProjectManager.BackupPrevious=false
+ProjectManager.CompilerOptimize=6
+ProjectManager.ComputerToolchain=false
+ProjectManager.CoupleFile=false
+ProjectManager.CustomerFirmwarePackage=
+ProjectManager.DefaultFWLocation=true
+ProjectManager.DeletePrevious=true
+ProjectManager.DeviceId=STM32F407VGTx
+ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.25.0
+ProjectManager.FreePins=false
+ProjectManager.HalAssertFull=false
+ProjectManager.HeapSize=0x200
+ProjectManager.KeepUserCode=true
+ProjectManager.LastFirmware=true
+ProjectManager.LibraryCopy=1
+ProjectManager.MainLocation=Core/Src
+ProjectManager.NoMain=false
+ProjectManager.PreviousToolchain=
+ProjectManager.ProjectBuild=false
+ProjectManager.ProjectFileName=STM32F407.ioc
+ProjectManager.ProjectName=STM32F407
+ProjectManager.StackSize=0x400
+ProjectManager.TargetToolchain=STM32CubeIDE
+ProjectManager.ToolChainLocation=
+ProjectManager.UnderRoot=true
+ProjectManager.functionlistsort=2-SystemClock_Config-RCC-false-HAL-false
+RCC.AHBFreq_Value=16000000
+RCC.APB1Freq_Value=16000000
+RCC.APB2Freq_Value=16000000
+RCC.CortexFreq_Value=16000000
+RCC.FamilyName=M
+RCC.HSE_VALUE=25000000
+RCC.HSI_VALUE=16000000
+RCC.I2SClocksFreq_Value=96000000
+RCC.IPParameters=AHBFreq_Value,APB1Freq_Value,APB2Freq_Value,CortexFreq_Value,FamilyName,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,PLLCLKFreq_Value,PLLQCLKFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S
+RCC.LSE_VALUE=32768
+RCC.LSI_VALUE=32000
+RCC.PLLCLKFreq_Value=96000000
+RCC.PLLQCLKFreq_Value=48000000
+RCC.RTCFreq_Value=32000
+RCC.RTCHSEDivFreq_Value=12500000
+RCC.SYSCLKFreq_VALUE=16000000
+RCC.VCOI2SOutputFreq_Value=192000000
+RCC.VCOInputFreq_Value=1000000
+RCC.VCOOutputFreq_Value=192000000
+RCC.VcooutputI2S=96000000
+USART2.IPParameters=VirtualMode
+USART2.VirtualMode=VM_ASYNC
+VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
+VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
+VP_RNG_VS_RNG.Mode=RNG_Activate
+VP_RNG_VS_RNG.Signal=RNG_VS_RNG
+VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
+VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
+VP_SYS_VS_tim1.Mode=TIM1
+VP_SYS_VS_tim1.Signal=SYS_VS_tim1
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Mode=wolfSSLJjwolfSSL
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Signal=wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+board=custom
+wolfSSL.wolfSSL.4.4.1.IPParameters=wolfSSLCcwolfSSLJjwolfSSLJjCore,wolfSSLCcwolfSSLJjwolfCryptJjCore,wolfSSLCcwolfSSLJjwolfCryptJjTest,WOLF_CONF_MATH,WOLF_CONF_RTOS
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_MATH=4
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_RTOS=2
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjTest=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfSSLJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLJjwolfSSL_Checked=true
+wolfSSL.wolfSSL.4.4.1_SwParameter=wolfSSLCcwolfSSLJjwolfCryptJjCore\:true;wolfSSLCcwolfSSLJjwolfCryptJjTest\:true;wolfSSLCcwolfSSLJjwolfSSLJjCore\:true;
+isbadioc=false
diff --git a/IDE/STM32Cube/Boards/STM32F437.ioc b/IDE/STM32Cube/Boards/STM32F437.ioc
new file mode 100644
index 000000000..61da0ee11
--- /dev/null
+++ b/IDE/STM32Cube/Boards/STM32F437.ioc
@@ -0,0 +1,308 @@
+#MicroXplorer Configuration settings - do not modify
+FREERTOS.FootprintOK=true
+FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,FootprintOK
+FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;wolfCrypt,8,8960,wolfCryptDemo,As external,NULL,Dynamic,NULL,NULL
+FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2
+FREERTOS.configTOTAL_HEAP_SIZE=131072
+FREERTOS.configUSE_MALLOC_FAILED_HOOK=1
+File.Version=6
+KeepUserPlacement=false
+Mcu.Family=STM32F4
+Mcu.IP0=CRYP
+Mcu.IP1=FMC
+Mcu.IP2=FREERTOS
+Mcu.IP3=HASH
+Mcu.IP4=NVIC
+Mcu.IP5=RCC
+Mcu.IP6=RNG
+Mcu.IP7=RTC
+Mcu.IP8=SYS
+Mcu.IP9=UART4
+Mcu.IPNb=10
+Mcu.Name=STM32F437I(G-I)Hx
+Mcu.Package=UFBGA176
+Mcu.Pin0=PE3
+Mcu.Pin1=PD7
+Mcu.Pin10=PF1
+Mcu.Pin11=PF3
+Mcu.Pin12=PF4
+Mcu.Pin13=PF5
+Mcu.Pin14=PG5
+Mcu.Pin15=PG4
+Mcu.Pin16=PG3
+Mcu.Pin17=PD15
+Mcu.Pin18=PG2
+Mcu.Pin19=PG1
+Mcu.Pin2=PD0
+Mcu.Pin20=PD14
+Mcu.Pin21=PD13
+Mcu.Pin22=PF13
+Mcu.Pin23=PG0
+Mcu.Pin24=PE13
+Mcu.Pin25=PD12
+Mcu.Pin26=PD11
+Mcu.Pin27=PD10
+Mcu.Pin28=PF12
+Mcu.Pin29=PF15
+Mcu.Pin3=PC11
+Mcu.Pin30=PE8
+Mcu.Pin31=PE9
+Mcu.Pin32=PE11
+Mcu.Pin33=PE14
+Mcu.Pin34=PD9
+Mcu.Pin35=PD8
+Mcu.Pin36=PF14
+Mcu.Pin37=PE7
+Mcu.Pin38=PE10
+Mcu.Pin39=PE12
+Mcu.Pin4=PC10
+Mcu.Pin40=PE15
+Mcu.Pin41=VP_CRYP_VS_CRYP
+Mcu.Pin42=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin43=VP_HASH_VS_HASH
+Mcu.Pin44=VP_RNG_VS_RNG
+Mcu.Pin45=VP_RTC_VS_RTC_Activate
+Mcu.Pin46=VP_RTC_VS_RTC_Calendar
+Mcu.Pin47=VP_SYS_VS_tim1
+Mcu.Pin48=VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+Mcu.Pin5=PD5
+Mcu.Pin6=PD1
+Mcu.Pin7=PD4
+Mcu.Pin8=PF0
+Mcu.Pin9=PF2
+Mcu.PinsNb=49
+Mcu.ThirdParty0=wolfSSL.wolfSSL.4.4.1
+Mcu.ThirdPartyNb=1
+Mcu.UserConstants=
+Mcu.UserName=STM32F437IIHx
+MxCube.Version=5.6.1
+MxDb.Version=DB.5.0.60
+NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.ForceEnableDMAVector=true
+NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
+NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
+NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.TIM1_UP_TIM10_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
+NVIC.TimeBase=TIM1_UP_TIM10_IRQn
+NVIC.TimeBaseIP=TIM1
+NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+PC10.Mode=Asynchronous
+PC10.Signal=UART4_TX
+PC11.Mode=Asynchronous
+PC11.Signal=UART4_RX
+PD0.Signal=FMC_D2_DA2
+PD1.Signal=FMC_D3_DA3
+PD10.Signal=FMC_D15_DA15
+PD11.Signal=FMC_A16_CLE
+PD12.Signal=FMC_A17_ALE
+PD13.Signal=FMC_A18
+PD14.Signal=FMC_D0_DA0
+PD15.Signal=FMC_D1_DA1
+PD4.Signal=FMC_NOE
+PD5.Signal=FMC_NWE
+PD7.Mode=NorPsramChipSelect1_1
+PD7.Signal=FMC_NE1
+PD8.Signal=FMC_D13_DA13
+PD9.Signal=FMC_D14_DA14
+PE10.Signal=FMC_D7_DA7
+PE11.Signal=FMC_D8_DA8
+PE12.Signal=FMC_D9_DA9
+PE13.Signal=FMC_D10_DA10
+PE14.Signal=FMC_D11_DA11
+PE15.Signal=FMC_D12_DA12
+PE3.Signal=FMC_A19
+PE7.Signal=FMC_D4_DA4
+PE8.Signal=FMC_D5_DA5
+PE9.Signal=FMC_D6_DA6
+PF0.Signal=FMC_A0
+PF1.Signal=FMC_A1
+PF12.Signal=FMC_A6
+PF13.Signal=FMC_A7
+PF14.Signal=FMC_A8
+PF15.Signal=FMC_A9
+PF2.Signal=FMC_A2
+PF3.Signal=FMC_A3
+PF4.Signal=FMC_A4
+PF5.Signal=FMC_A5
+PG0.Signal=FMC_A10
+PG1.Signal=FMC_A11
+PG2.Signal=FMC_A12
+PG3.Signal=FMC_A13
+PG4.Signal=FMC_A14_BA0
+PG5.Signal=FMC_A15_BA1
+PinOutPanel.CurrentBGAView=Top
+PinOutPanel.RotationAngle=0
+ProjectManager.AskForMigrate=true
+ProjectManager.BackupPrevious=false
+ProjectManager.CompilerOptimize=6
+ProjectManager.ComputerToolchain=false
+ProjectManager.CoupleFile=false
+ProjectManager.CustomerFirmwarePackage=
+ProjectManager.DefaultFWLocation=true
+ProjectManager.DeletePrevious=true
+ProjectManager.DeviceId=STM32F437IIHx
+ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.25.0
+ProjectManager.FreePins=false
+ProjectManager.HalAssertFull=false
+ProjectManager.HeapSize=0x2000
+ProjectManager.KeepUserCode=true
+ProjectManager.LastFirmware=true
+ProjectManager.LibraryCopy=1
+ProjectManager.MainLocation=Core/Src
+ProjectManager.NoMain=false
+ProjectManager.PreviousToolchain=
+ProjectManager.ProjectBuild=false
+ProjectManager.ProjectFileName=STM32F437.ioc
+ProjectManager.ProjectName=STM32F437
+ProjectManager.StackSize=0x4000
+ProjectManager.TargetToolchain=STM32CubeIDE
+ProjectManager.ToolChainLocation=
+ProjectManager.UnderRoot=true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_CRYP_Init-CRYP-false-HAL-true,4-MX_HASH_Init-HASH-false-HAL-true,5-MX_RNG_Init-RNG-false-HAL-true,6-MX_UART4_Init-UART4-false-HAL-true,7-MX_RTC_Init-RTC-false-HAL-true,8-MX_FMC_Init-FMC-false-HAL-true
+RCC.48MHZClocksFreq_Value=45714285.71428572
+RCC.AHBFreq_Value=160000000
+RCC.APB1CLKDivider=RCC_HCLK_DIV4
+RCC.APB1Freq_Value=40000000
+RCC.APB1TimFreq_Value=80000000
+RCC.APB2CLKDivider=RCC_HCLK_DIV2
+RCC.APB2Freq_Value=80000000
+RCC.APB2TimFreq_Value=160000000
+RCC.CortexFreq_Value=160000000
+RCC.EthernetFreq_Value=160000000
+RCC.FCLKCortexFreq_Value=160000000
+RCC.FamilyName=M
+RCC.HCLKFreq_Value=160000000
+RCC.HSE_VALUE=25000000
+RCC.HSI_VALUE=16000000
+RCC.I2SClocksFreq_Value=192000000
+RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VcooutputI2S,VcooutputI2SQ
+RCC.LSE_VALUE=32768
+RCC.LSI_VALUE=32000
+RCC.MCO2PinFreq_Value=160000000
+RCC.PLLCLKFreq_Value=160000000
+RCC.PLLM=8
+RCC.PLLN=160
+RCC.PLLQ=7
+RCC.PLLQCLKFreq_Value=45714285.71428572
+RCC.RTCFreq_Value=32000
+RCC.RTCHSEDivFreq_Value=12500000
+RCC.SAI_AClocksFreq_Value=24500000
+RCC.SAI_BClocksFreq_Value=24500000
+RCC.SYSCLKFreq_VALUE=160000000
+RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
+RCC.VCOI2SOutputFreq_Value=384000000
+RCC.VCOInputFreq_Value=2000000
+RCC.VCOOutputFreq_Value=320000000
+RCC.VCOSAIOutputFreq_Value=98000000
+RCC.VCOSAIOutputFreq_ValueQ=24500000
+RCC.VcooutputI2S=192000000
+RCC.VcooutputI2SQ=192000000
+SH.FMC_A0.0=FMC_A0,20b-a1
+SH.FMC_A0.ConfNb=1
+SH.FMC_A1.0=FMC_A1,20b-a1
+SH.FMC_A1.ConfNb=1
+SH.FMC_A10.0=FMC_A10,20b-a1
+SH.FMC_A10.ConfNb=1
+SH.FMC_A11.0=FMC_A11,20b-a1
+SH.FMC_A11.ConfNb=1
+SH.FMC_A12.0=FMC_A12,20b-a1
+SH.FMC_A12.ConfNb=1
+SH.FMC_A13.0=FMC_A13,20b-a1
+SH.FMC_A13.ConfNb=1
+SH.FMC_A14_BA0.0=FMC_A14,20b-a1
+SH.FMC_A14_BA0.ConfNb=1
+SH.FMC_A15_BA1.0=FMC_A15,20b-a1
+SH.FMC_A15_BA1.ConfNb=1
+SH.FMC_A16_CLE.0=FMC_A16,20b-a1
+SH.FMC_A16_CLE.ConfNb=1
+SH.FMC_A17_ALE.0=FMC_A17,20b-a1
+SH.FMC_A17_ALE.ConfNb=1
+SH.FMC_A18.0=FMC_A18,20b-a1
+SH.FMC_A18.ConfNb=1
+SH.FMC_A19.0=FMC_A19,20b-a1
+SH.FMC_A19.ConfNb=1
+SH.FMC_A2.0=FMC_A2,20b-a1
+SH.FMC_A2.ConfNb=1
+SH.FMC_A3.0=FMC_A3,20b-a1
+SH.FMC_A3.ConfNb=1
+SH.FMC_A4.0=FMC_A4,20b-a1
+SH.FMC_A4.ConfNb=1
+SH.FMC_A5.0=FMC_A5,20b-a1
+SH.FMC_A5.ConfNb=1
+SH.FMC_A6.0=FMC_A6,20b-a1
+SH.FMC_A6.ConfNb=1
+SH.FMC_A7.0=FMC_A7,20b-a1
+SH.FMC_A7.ConfNb=1
+SH.FMC_A8.0=FMC_A8,20b-a1
+SH.FMC_A8.ConfNb=1
+SH.FMC_A9.0=FMC_A9,20b-a1
+SH.FMC_A9.ConfNb=1
+SH.FMC_D0_DA0.0=FMC_D0,16b-d1
+SH.FMC_D0_DA0.ConfNb=1
+SH.FMC_D10_DA10.0=FMC_D10,16b-d1
+SH.FMC_D10_DA10.ConfNb=1
+SH.FMC_D11_DA11.0=FMC_D11,16b-d1
+SH.FMC_D11_DA11.ConfNb=1
+SH.FMC_D12_DA12.0=FMC_D12,16b-d1
+SH.FMC_D12_DA12.ConfNb=1
+SH.FMC_D13_DA13.0=FMC_D13,16b-d1
+SH.FMC_D13_DA13.ConfNb=1
+SH.FMC_D14_DA14.0=FMC_D14,16b-d1
+SH.FMC_D14_DA14.ConfNb=1
+SH.FMC_D15_DA15.0=FMC_D15,16b-d1
+SH.FMC_D15_DA15.ConfNb=1
+SH.FMC_D1_DA1.0=FMC_D1,16b-d1
+SH.FMC_D1_DA1.ConfNb=1
+SH.FMC_D2_DA2.0=FMC_D2,16b-d1
+SH.FMC_D2_DA2.ConfNb=1
+SH.FMC_D3_DA3.0=FMC_D3,16b-d1
+SH.FMC_D3_DA3.ConfNb=1
+SH.FMC_D4_DA4.0=FMC_D4,16b-d1
+SH.FMC_D4_DA4.ConfNb=1
+SH.FMC_D5_DA5.0=FMC_D5,16b-d1
+SH.FMC_D5_DA5.ConfNb=1
+SH.FMC_D6_DA6.0=FMC_D6,16b-d1
+SH.FMC_D6_DA6.ConfNb=1
+SH.FMC_D7_DA7.0=FMC_D7,16b-d1
+SH.FMC_D7_DA7.ConfNb=1
+SH.FMC_D8_DA8.0=FMC_D8,16b-d1
+SH.FMC_D8_DA8.ConfNb=1
+SH.FMC_D9_DA9.0=FMC_D9,16b-d1
+SH.FMC_D9_DA9.ConfNb=1
+SH.FMC_NOE.0=FMC_NOE,Sram1
+SH.FMC_NOE.ConfNb=1
+SH.FMC_NWE.0=FMC_NWE,Sram1
+SH.FMC_NWE.ConfNb=1
+UART4.IPParameters=VirtualMode
+UART4.VirtualMode=Asynchronous
+VP_CRYP_VS_CRYP.Mode=CRYP_Activate
+VP_CRYP_VS_CRYP.Signal=CRYP_VS_CRYP
+VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
+VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
+VP_HASH_VS_HASH.Mode=HASH_Activate
+VP_HASH_VS_HASH.Signal=HASH_VS_HASH
+VP_RNG_VS_RNG.Mode=RNG_Activate
+VP_RNG_VS_RNG.Signal=RNG_VS_RNG
+VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
+VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
+VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar
+VP_RTC_VS_RTC_Calendar.Signal=RTC_VS_RTC_Calendar
+VP_SYS_VS_tim1.Mode=TIM1
+VP_SYS_VS_tim1.Signal=SYS_VS_tim1
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Mode=wolfSSLJjwolfSSL
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Signal=wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+board=custom
+wolfSSL.wolfSSL.4.4.1.IPParameters=wolfSSLCcwolfSSLJjwolfSSLJjCore,wolfSSLCcwolfSSLJjwolfCryptJjTest,WOLFCRYPT_ONLY,WOLF_CONF_MATH,WOLF_CONF_RTOS
+wolfSSL.wolfSSL.4.4.1.WOLFCRYPT_ONLY=False
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_MATH=4
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_RTOS=2
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjTest=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfSSLJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLJjwolfSSL_Checked=true
+wolfSSL.wolfSSL.4.4.1_SwParameter=wolfSSLCcwolfSSLJjwolfCryptJjTest\:true;wolfSSLCcwolfSSLJjwolfSSLJjCore\:true;
+isbadioc=false
diff --git a/IDE/STM32Cube/Boards/STM32F777.ioc b/IDE/STM32Cube/Boards/STM32F777.ioc
new file mode 100644
index 000000000..1b3eda7e9
--- /dev/null
+++ b/IDE/STM32Cube/Boards/STM32F777.ioc
@@ -0,0 +1,193 @@
+#MicroXplorer Configuration settings - do not modify
+FREERTOS.FootprintOK=true
+FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,FootprintOK
+FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;wolfCrypt,8,8960,wolfCryptDemo,As external,NULL,Dynamic,NULL,NULL
+FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2
+FREERTOS.configTOTAL_HEAP_SIZE=131072
+FREERTOS.configUSE_MALLOC_FAILED_HOOK=1
+File.Version=6
+KeepUserPlacement=false
+Mcu.Family=STM32F7
+Mcu.IP0=CORTEX_M7
+Mcu.IP1=CRYP
+Mcu.IP10=USART3
+Mcu.IP2=FREERTOS
+Mcu.IP3=HASH
+Mcu.IP4=NVIC
+Mcu.IP5=RCC
+Mcu.IP6=RNG
+Mcu.IP7=RTC
+Mcu.IP8=SYS
+Mcu.IP9=USART2
+Mcu.IPNb=11
+Mcu.Name=STM32F777NIHx
+Mcu.Package=TFBGA216
+Mcu.Pin0=PD6
+Mcu.Pin1=PI8
+Mcu.Pin10=VP_RTC_VS_RTC_Calendar
+Mcu.Pin11=VP_SYS_VS_tim1
+Mcu.Pin12=VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+Mcu.Pin2=PD5
+Mcu.Pin3=PD9
+Mcu.Pin4=PD8
+Mcu.Pin5=VP_CRYP_VS_CRYP
+Mcu.Pin6=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin7=VP_HASH_VS_HASH
+Mcu.Pin8=VP_RNG_VS_RNG
+Mcu.Pin9=VP_RTC_VS_RTC_Activate
+Mcu.PinsNb=13
+Mcu.ThirdParty0=wolfSSL.wolfSSL.4.4.1
+Mcu.ThirdPartyNb=1
+Mcu.UserConstants=
+Mcu.UserName=STM32F777NIHx
+MxCube.Version=5.6.1
+MxDb.Version=DB.5.0.60
+NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.ForceEnableDMAVector=true
+NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
+NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
+NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.TIM1_UP_TIM10_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
+NVIC.TimeBase=TIM1_UP_TIM10_IRQn
+NVIC.TimeBaseIP=TIM1
+NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+PD5.Mode=Asynchronous
+PD5.Signal=USART2_TX
+PD6.Mode=Asynchronous
+PD6.Signal=USART2_RX
+PD8.Locked=true
+PD8.Mode=Asynchronous
+PD8.Signal=USART3_TX
+PD9.Locked=true
+PD9.Mode=Asynchronous
+PD9.Signal=USART3_RX
+PI8.Mode=Timestamp enabled - Input Enabled to TS
+PI8.Signal=RTC_TS
+PinOutPanel.CurrentBGAView=Top
+PinOutPanel.RotationAngle=0
+ProjectManager.AskForMigrate=true
+ProjectManager.BackupPrevious=false
+ProjectManager.CompilerOptimize=6
+ProjectManager.ComputerToolchain=false
+ProjectManager.CoupleFile=false
+ProjectManager.CustomerFirmwarePackage=
+ProjectManager.DefaultFWLocation=true
+ProjectManager.DeletePrevious=true
+ProjectManager.DeviceId=STM32F777NIHx
+ProjectManager.FirmwarePackage=STM32Cube FW_F7 V1.16.0
+ProjectManager.FreePins=false
+ProjectManager.HalAssertFull=false
+ProjectManager.HeapSize=0x200
+ProjectManager.KeepUserCode=true
+ProjectManager.LastFirmware=true
+ProjectManager.LibraryCopy=1
+ProjectManager.MainLocation=Core/Src
+ProjectManager.NoMain=false
+ProjectManager.PreviousToolchain=
+ProjectManager.ProjectBuild=false
+ProjectManager.ProjectFileName=STM32F777.ioc
+ProjectManager.ProjectName=STM32F777
+ProjectManager.StackSize=0x400
+ProjectManager.TargetToolchain=STM32CubeIDE
+ProjectManager.ToolChainLocation=
+ProjectManager.UnderRoot=true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_CRYP_Init-CRYP-false-HAL-true,4-MX_HASH_Init-HASH-false-HAL-true,5-MX_RNG_Init-RNG-false-HAL-true,6-MX_USART3_UART_Init-USART3-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
+RCC.AHBFreq_Value=216000000
+RCC.APB1CLKDivider=RCC_HCLK_DIV4
+RCC.APB1Freq_Value=54000000
+RCC.APB1TimFreq_Value=108000000
+RCC.APB2CLKDivider=RCC_HCLK_DIV2
+RCC.APB2Freq_Value=108000000
+RCC.APB2TimFreq_Value=216000000
+RCC.CECFreq_Value=32786.88524590164
+RCC.CortexFreq_Value=216000000
+RCC.DFSDMAudioFreq_Value=192000000
+RCC.DFSDMFreq_Value=108000000
+RCC.EthernetFreq_Value=216000000
+RCC.FCLKCortexFreq_Value=216000000
+RCC.FamilyName=M
+RCC.HCLKFreq_Value=216000000
+RCC.HSE_VALUE=25000000
+RCC.HSI_VALUE=16000000
+RCC.I2C1Freq_Value=54000000
+RCC.I2C2Freq_Value=54000000
+RCC.I2C3Freq_Value=54000000
+RCC.I2C4Freq_Value=54000000
+RCC.I2SFreq_Value=192000000
+RCC.IPParameters=AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CECFreq_Value,CortexFreq_Value,DFSDMAudioFreq_Value,DFSDMFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SFreq_Value,LCDTFTFreq_Value,LPTIM1Freq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SPCLKFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLI2SRoutputFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLQoutputFreq_Value,PLLRFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PLLSAIRCLKFreq_Value,PLLSAIoutputFreq_Value,RNGFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMC2Freq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,UART7Freq_Value,UART8Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USART6Freq_Value,USBFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value
+RCC.LCDTFTFreq_Value=96000000
+RCC.LPTIM1Freq_Value=54000000
+RCC.LSE_VALUE=32768
+RCC.LSI_VALUE=32000
+RCC.MCO2PinFreq_Value=216000000
+RCC.PLLCLKFreq_Value=216000000
+RCC.PLLI2SPCLKFreq_Value=192000000
+RCC.PLLI2SQCLKFreq_Value=192000000
+RCC.PLLI2SRCLKFreq_Value=192000000
+RCC.PLLI2SRoutputFreq_Value=192000000
+RCC.PLLM=8
+RCC.PLLN=216
+RCC.PLLQ=9
+RCC.PLLQCLKFreq_Value=48000000
+RCC.PLLQoutputFreq_Value=48000000
+RCC.PLLRFreq_Value=216000000
+RCC.PLLSAIPCLKFreq_Value=192000000
+RCC.PLLSAIQCLKFreq_Value=192000000
+RCC.PLLSAIRCLKFreq_Value=192000000
+RCC.PLLSAIoutputFreq_Value=192000000
+RCC.RNGFreq_Value=48000000
+RCC.SAI1Freq_Value=192000000
+RCC.SAI2Freq_Value=192000000
+RCC.SDMMC2Freq_Value=216000000
+RCC.SDMMCFreq_Value=216000000
+RCC.SPDIFRXFreq_Value=192000000
+RCC.SYSCLKFreq_VALUE=216000000
+RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
+RCC.UART4Freq_Value=54000000
+RCC.UART5Freq_Value=54000000
+RCC.UART7Freq_Value=54000000
+RCC.UART8Freq_Value=54000000
+RCC.USART1Freq_Value=108000000
+RCC.USART2Freq_Value=54000000
+RCC.USART3Freq_Value=54000000
+RCC.USART6Freq_Value=108000000
+RCC.USBFreq_Value=48000000
+RCC.VCOI2SOutputFreq_Value=384000000
+RCC.VCOInputFreq_Value=2000000
+RCC.VCOOutputFreq_Value=432000000
+RCC.VCOSAIOutputFreq_Value=384000000
+USART2.IPParameters=VirtualMode-Asynchronous
+USART2.VirtualMode-Asynchronous=VM_ASYNC
+USART3.IPParameters=VirtualMode-Asynchronous
+USART3.VirtualMode-Asynchronous=VM_ASYNC
+VP_CRYP_VS_CRYP.Mode=CRYP_Activate
+VP_CRYP_VS_CRYP.Signal=CRYP_VS_CRYP
+VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
+VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
+VP_HASH_VS_HASH.Mode=HASH_Activate
+VP_HASH_VS_HASH.Signal=HASH_VS_HASH
+VP_RNG_VS_RNG.Mode=RNG_Activate
+VP_RNG_VS_RNG.Signal=RNG_VS_RNG
+VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
+VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
+VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar
+VP_RTC_VS_RTC_Calendar.Signal=RTC_VS_RTC_Calendar
+VP_SYS_VS_tim1.Mode=TIM1
+VP_SYS_VS_tim1.Signal=SYS_VS_tim1
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Mode=wolfSSLJjwolfSSL
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Signal=wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+board=custom
+wolfSSL.wolfSSL.4.4.1.IPParameters=wolfSSLCcwolfSSLJjwolfSSLJjCore,wolfSSLCcwolfSSLJjwolfCryptJjCore,wolfSSLCcwolfSSLJjwolfCryptJjTest,WOLF_CONF_MATH,WOLF_CONF_RTOS
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_MATH=4
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_RTOS=2
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjTest=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfSSLJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLJjwolfSSL_Checked=true
+wolfSSL.wolfSSL.4.4.1_SwParameter=wolfSSLCcwolfSSLJjwolfCryptJjCore\:true;wolfSSLCcwolfSSLJjwolfCryptJjTest\:true;wolfSSLCcwolfSSLJjwolfSSLJjCore\:true;
+isbadioc=false
diff --git a/IDE/STM32Cube/Boards/STM32H753.ioc b/IDE/STM32Cube/Boards/STM32H753.ioc
new file mode 100644
index 000000000..48ba80756
--- /dev/null
+++ b/IDE/STM32Cube/Boards/STM32H753.ioc
@@ -0,0 +1,338 @@
+#MicroXplorer Configuration settings - do not modify
+CORTEX_M7.CPU_DCache=Disabled
+CORTEX_M7.CPU_ICache=Disabled
+CORTEX_M7.IPParameters=CPU_ICache,CPU_DCache,MPU_Control
+CORTEX_M7.MPU_Control=__NULL
+ETH.ETH_RX_DESC_CNT=4
+ETH.ETH_TX_DESC_CNT=4
+ETH.IPParameters=MACAddr,MediaInterface,ETH_TX_DESC_CNT,TxDescAddress,ETH_RX_DESC_CNT,RxDescAddress,RxBuffAddress,RxBuffLen
+ETH.MACAddr=00\:80\:E1\:00\:00\:00
+ETH.MediaInterface=HAL_ETH_RMII_MODE
+ETH.RxBuffAddress=0x30040200
+ETH.RxBuffLen=1524
+ETH.RxDescAddress=0x30040000
+ETH.TxDescAddress=0x30040060
+FREERTOS.FootprintOK=true
+FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,FootprintOK
+FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;wolfCrypt,8,8960,wolfCryptDemo,As external,NULL,Dynamic,NULL,NULL
+FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2
+FREERTOS.configTOTAL_HEAP_SIZE=180000
+FREERTOS.configUSE_MALLOC_FAILED_HOOK=1
+File.Version=6
+KeepUserPlacement=false
+Mcu.Family=STM32H7
+Mcu.IP0=CORTEX_M7
+Mcu.IP1=CRYP
+Mcu.IP10=USART3
+Mcu.IP11=USB_OTG_FS
+Mcu.IP2=ETH
+Mcu.IP3=FREERTOS
+Mcu.IP4=HASH
+Mcu.IP5=NVIC
+Mcu.IP6=RCC
+Mcu.IP7=RNG
+Mcu.IP8=RTC
+Mcu.IP9=SYS
+Mcu.IPNb=12
+Mcu.Name=STM32H753ZITx
+Mcu.Package=LQFP144
+Mcu.Pin0=PC13
+Mcu.Pin1=PC14-OSC32_IN (OSC32_IN)
+Mcu.Pin10=PC5
+Mcu.Pin11=PB0
+Mcu.Pin12=PB13
+Mcu.Pin13=PB14
+Mcu.Pin14=PD8
+Mcu.Pin15=PD9
+Mcu.Pin16=PD10
+Mcu.Pin17=PG7
+Mcu.Pin18=PA8
+Mcu.Pin19=PA9
+Mcu.Pin2=PC15-OSC32_OUT (OSC32_OUT)
+Mcu.Pin20=PA11
+Mcu.Pin21=PA12
+Mcu.Pin22=PG11
+Mcu.Pin23=PG13
+Mcu.Pin24=PE1
+Mcu.Pin25=VP_CRYP_VS_CRYP
+Mcu.Pin26=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin27=VP_HASH_VS_HASH
+Mcu.Pin28=VP_RNG_VS_RNG
+Mcu.Pin29=VP_RTC_VS_RTC_Activate
+Mcu.Pin3=PH0-OSC_IN (PH0)
+Mcu.Pin30=VP_SYS_VS_tim1
+Mcu.Pin31=VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+Mcu.Pin4=PH1-OSC_OUT (PH1)
+Mcu.Pin5=PC1
+Mcu.Pin6=PA1
+Mcu.Pin7=PA2
+Mcu.Pin8=PA7
+Mcu.Pin9=PC4
+Mcu.PinsNb=32
+Mcu.ThirdParty0=wolfSSL.wolfSSL.4.4.1
+Mcu.ThirdPartyNb=1
+Mcu.UserConstants=
+Mcu.UserName=STM32H753ZITx
+MxCube.Version=5.6.1
+MxDb.Version=DB.5.0.60
+NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.ForceEnableDMAVector=true
+NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
+NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
+NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.TIM1_UP_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
+NVIC.TimeBase=TIM1_UP_IRQn
+NVIC.TimeBaseIP=TIM1
+NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+PA1.Locked=true
+PA1.Mode=RMII
+PA1.Signal=ETH_REF_CLK
+PA11.Locked=true
+PA11.Mode=Device_Only
+PA11.Signal=USB_OTG_FS_DM
+PA12.Locked=true
+PA12.Mode=Device_Only
+PA12.Signal=USB_OTG_FS_DP
+PA2.Locked=true
+PA2.Mode=RMII
+PA2.Signal=ETH_MDIO
+PA7.Locked=true
+PA7.Mode=RMII
+PA7.Signal=ETH_CRS_DV
+PA8.Locked=true
+PA8.Mode=Activate_SOF_FS
+PA8.Signal=USB_OTG_FS_SOF
+PA9.Locked=true
+PA9.Mode=Activate_VBUS
+PA9.Signal=USB_OTG_FS_VBUS
+PB0.GPIOParameters=GPIO_Label
+PB0.GPIO_Label=LD1 [Green Led]
+PB0.Locked=true
+PB0.Signal=GPIO_Output
+PB13.Locked=true
+PB13.Mode=RMII
+PB13.Signal=ETH_TXD1
+PB14.GPIOParameters=GPIO_Label
+PB14.GPIO_Label=LD3 [Red Led]
+PB14.Locked=true
+PB14.Signal=GPIO_Output
+PC1.Locked=true
+PC1.Mode=RMII
+PC1.Signal=ETH_MDC
+PC13.GPIOParameters=GPIO_Label
+PC13.GPIO_Label=B1 [Blue PushButton]
+PC13.Locked=true
+PC13.Signal=GPIO_Input
+PC14-OSC32_IN\ (OSC32_IN).Locked=true
+PC14-OSC32_IN\ (OSC32_IN).Mode=LSE-External-Oscillator
+PC14-OSC32_IN\ (OSC32_IN).Signal=RCC_OSC32_IN
+PC15-OSC32_OUT\ (OSC32_OUT).Locked=true
+PC15-OSC32_OUT\ (OSC32_OUT).Mode=LSE-External-Oscillator
+PC15-OSC32_OUT\ (OSC32_OUT).Signal=RCC_OSC32_OUT
+PC4.Locked=true
+PC4.Mode=RMII
+PC4.Signal=ETH_RXD0
+PC5.Locked=true
+PC5.Mode=RMII
+PC5.Signal=ETH_RXD1
+PD10.GPIOParameters=GPIO_Label
+PD10.GPIO_Label=USB_OTG_FS_PWR_EN
+PD10.Locked=true
+PD10.Signal=GPIO_Output
+PD8.GPIOParameters=GPIO_Label
+PD8.GPIO_Label=STLINK_RX
+PD8.Locked=true
+PD8.Mode=Asynchronous
+PD8.Signal=USART3_TX
+PD9.GPIOParameters=GPIO_Label
+PD9.GPIO_Label=STLINK_TX
+PD9.Locked=true
+PD9.Mode=Asynchronous
+PD9.Signal=USART3_RX
+PE1.GPIOParameters=GPIO_Label
+PE1.GPIO_Label=LD2 [Yellow Led]
+PE1.Locked=true
+PE1.Signal=GPIO_Output
+PG11.Locked=true
+PG11.Mode=RMII
+PG11.Signal=ETH_TX_EN
+PG13.Locked=true
+PG13.Mode=RMII
+PG13.Signal=ETH_TXD0
+PG7.GPIOParameters=GPIO_Label
+PG7.GPIO_Label=USB_OTG_FS_OVCR
+PG7.Locked=true
+PG7.Signal=GPXTI7
+PH0-OSC_IN\ (PH0).Locked=true
+PH0-OSC_IN\ (PH0).Mode=HSE-External-Clock-Source
+PH0-OSC_IN\ (PH0).Signal=RCC_OSC_IN
+PH1-OSC_OUT\ (PH1).Locked=true
+PH1-OSC_OUT\ (PH1).Signal=RCC_OSC_OUT
+PinOutPanel.RotationAngle=0
+ProjectManager.AskForMigrate=true
+ProjectManager.BackupPrevious=false
+ProjectManager.CompilerOptimize=6
+ProjectManager.ComputerToolchain=false
+ProjectManager.CoupleFile=false
+ProjectManager.CustomerFirmwarePackage=
+ProjectManager.DefaultFWLocation=true
+ProjectManager.DeletePrevious=true
+ProjectManager.DeviceId=STM32H753ZITx
+ProjectManager.FirmwarePackage=STM32Cube FW_H7 V1.7.0
+ProjectManager.FreePins=false
+ProjectManager.HalAssertFull=false
+ProjectManager.HeapSize=0x200
+ProjectManager.KeepUserCode=true
+ProjectManager.LastFirmware=true
+ProjectManager.LibraryCopy=1
+ProjectManager.MainLocation=Core/Src
+ProjectManager.NoMain=false
+ProjectManager.PreviousToolchain=
+ProjectManager.ProjectBuild=false
+ProjectManager.ProjectFileName=STM32H753.ioc
+ProjectManager.ProjectName=STM32H753
+ProjectManager.StackSize=0x400
+ProjectManager.TargetToolchain=STM32CubeIDE
+ProjectManager.ToolChainLocation=
+ProjectManager.UnderRoot=true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_ETH_Init-ETH-false-HAL-true,4-MX_USART3_UART_Init-USART3-false-HAL-true,5-MX_USB_OTG_FS_PCD_Init-USB_OTG_FS-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
+RCC.ADCFreq_Value=16125000
+RCC.AHB12Freq_Value=240000000
+RCC.AHB4Freq_Value=240000000
+RCC.APB1Freq_Value=120000000
+RCC.APB2Freq_Value=120000000
+RCC.APB3Freq_Value=120000000
+RCC.APB4Freq_Value=120000000
+RCC.AXIClockFreq_Value=240000000
+RCC.CECFreq_Value=32000
+RCC.CKPERFreq_Value=64000000
+RCC.CortexFreq_Value=480000000
+RCC.CpuClockFreq_Value=480000000
+RCC.D1CPREFreq_Value=480000000
+RCC.D1PPRE=RCC_APB3_DIV2
+RCC.D2PPRE1=RCC_APB1_DIV2
+RCC.D2PPRE2=RCC_APB2_DIV2
+RCC.D3PPRE=RCC_APB4_DIV2
+RCC.DFSDMACLkFreq_Value=48000000
+RCC.DFSDMFreq_Value=120000000
+RCC.DIVM1=1
+RCC.DIVN1=120
+RCC.DIVP1Freq_Value=480000000
+RCC.DIVP2Freq_Value=16125000
+RCC.DIVP3Freq_Value=16125000
+RCC.DIVQ1=20
+RCC.DIVQ1Freq_Value=48000000
+RCC.DIVQ2Freq_Value=16125000
+RCC.DIVQ3Freq_Value=16125000
+RCC.DIVR1Freq_Value=480000000
+RCC.DIVR2Freq_Value=16125000
+RCC.DIVR3Freq_Value=16125000
+RCC.FDCANFreq_Value=48000000
+RCC.FMCFreq_Value=240000000
+RCC.FamilyName=M
+RCC.HCLK3ClockFreq_Value=240000000
+RCC.HCLKFreq_Value=240000000
+RCC.HPRE=RCC_HCLK_DIV2
+RCC.HRTIMFreq_Value=240000000
+RCC.HSE_VALUE=8000000
+RCC.I2C123Freq_Value=120000000
+RCC.I2C4Freq_Value=120000000
+RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVN1,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HPRE,HRTIMFreq_Value,HSE_VALUE,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLL3FRACN,PLLFRACN,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI23Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value
+RCC.LPTIM1Freq_Value=120000000
+RCC.LPTIM2Freq_Value=120000000
+RCC.LPTIM345Freq_Value=120000000
+RCC.LPUART1Freq_Value=120000000
+RCC.LTDCFreq_Value=16125000
+RCC.MCO1PinFreq_Value=64000000
+RCC.MCO2PinFreq_Value=480000000
+RCC.PLL2FRACN=0
+RCC.PLL3FRACN=0
+RCC.PLLFRACN=0
+RCC.QSPIFreq_Value=240000000
+RCC.RNGFreq_Value=48000000
+RCC.RTCFreq_Value=32000
+RCC.SAI1Freq_Value=48000000
+RCC.SAI23Freq_Value=48000000
+RCC.SAI4AFreq_Value=48000000
+RCC.SAI4BFreq_Value=48000000
+RCC.SDMMCFreq_Value=48000000
+RCC.SPDIFRXFreq_Value=48000000
+RCC.SPI123Freq_Value=48000000
+RCC.SPI45Freq_Value=120000000
+RCC.SPI6Freq_Value=120000000
+RCC.SWPMI1Freq_Value=120000000
+RCC.SYSCLKFreq_VALUE=480000000
+RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
+RCC.Tim1OutputFreq_Value=240000000
+RCC.Tim2OutputFreq_Value=240000000
+RCC.TraceFreq_Value=64000000
+RCC.USART16Freq_Value=120000000
+RCC.USART234578Freq_Value=120000000
+RCC.USBFreq_Value=48000000
+RCC.VCO1OutputFreq_Value=960000000
+RCC.VCO2OutputFreq_Value=32250000
+RCC.VCO3OutputFreq_Value=32250000
+RCC.VCOInput1Freq_Value=8000000
+RCC.VCOInput2Freq_Value=250000
+RCC.VCOInput3Freq_Value=250000
+SH.GPXTI7.0=GPIO_EXTI7
+SH.GPXTI7.ConfNb=1
+USART3.AutoBaudRateEnableParam=UART_ADVFEATURE_AUTOBAUDRATE_DISABLE
+USART3.BaudRate=115200
+USART3.ClockPrescaler=PRESCALER_DIV1
+USART3.DMADisableonRxErrorParam=ADVFEATURE_DMA_ENABLEONRXERROR
+USART3.DataInvertParam=ADVFEATURE_DATAINV_DISABLE
+USART3.FIFOMode=FIFOMODE_DISABLE
+USART3.IPParameters=BaudRate,VirtualMode-Asynchronous,WordLength,Parity,StopBits,Mode,OverSampling,OneBitSampling,ClockPrescaler,FIFOMode,TXFIFOThreshold,RXFIFOThreshold,AutoBaudRateEnableParam,TxPinLevelInvertParam,RxPinLevelInvertParam,DataInvertParam,SwapParam,OverrunDisableParam,DMADisableonRxErrorParam,MSBFirstParam
+USART3.MSBFirstParam=ADVFEATURE_MSBFIRST_DISABLE
+USART3.Mode=MODE_TX_RX
+USART3.OneBitSampling=UART_ONE_BIT_SAMPLE_DISABLE
+USART3.OverSampling=UART_OVERSAMPLING_16
+USART3.OverrunDisableParam=ADVFEATURE_OVERRUN_ENABLE
+USART3.Parity=PARITY_NONE
+USART3.RXFIFOThreshold=RXFIFO_THRESHOLD_1EIGHTHFULL
+USART3.RxPinLevelInvertParam=ADVFEATURE_RXINV_DISABLE
+USART3.StopBits=STOPBITS_1
+USART3.SwapParam=ADVFEATURE_SWAP_DISABLE
+USART3.TXFIFOThreshold=TXFIFO_THRESHOLD_1EIGHTHFULL
+USART3.TxPinLevelInvertParam=ADVFEATURE_TXINV_DISABLE
+USART3.VirtualMode-Asynchronous=VM_ASYNC
+USART3.WordLength=WORDLENGTH_8B
+USB_OTG_FS.IPParameters=low_power_enable,VirtualMode,battery_charging_enable,lpm_enable,use_dedicated_ep1,vbus_sensing_enable,Sof_enable
+USB_OTG_FS.Sof_enable=ENABLE
+USB_OTG_FS.VirtualMode=Device_Only
+USB_OTG_FS.battery_charging_enable=ENABLE
+USB_OTG_FS.low_power_enable=DISABLE
+USB_OTG_FS.lpm_enable=DISABLE
+USB_OTG_FS.use_dedicated_ep1=DISABLE
+USB_OTG_FS.vbus_sensing_enable=ENABLE
+VP_CRYP_VS_CRYP.Mode=CRYP_Activate
+VP_CRYP_VS_CRYP.Signal=CRYP_VS_CRYP
+VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
+VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
+VP_HASH_VS_HASH.Mode=HASH_Activate
+VP_HASH_VS_HASH.Signal=HASH_VS_HASH
+VP_RNG_VS_RNG.Mode=RNG_Activate
+VP_RNG_VS_RNG.Signal=RNG_VS_RNG
+VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
+VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
+VP_SYS_VS_tim1.Mode=TIM1
+VP_SYS_VS_tim1.Signal=SYS_VS_tim1
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Mode=wolfSSLJjwolfSSL
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Signal=wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+board=NUCLEO-H753ZI
+boardIOC=true
+wolfSSL.wolfSSL.4.4.1.IPParameters=wolfSSLCcwolfSSLJjwolfSSLJjCore,wolfSSLCcwolfSSLJjwolfCryptJjCore,wolfSSLCcwolfSSLJjwolfCryptJjTest,WOLF_CONF_MATH,WOLF_CONF_RTOS
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_MATH=4
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_RTOS=2
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjTest=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfSSLJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLJjwolfSSL_Checked=true
+wolfSSL.wolfSSL.4.4.1_SwParameter=wolfSSLCcwolfSSLJjwolfCryptJjCore\:true;wolfSSLCcwolfSSLJjwolfCryptJjTest\:true;wolfSSLCcwolfSSLJjwolfSSLJjCore\:true;
+isbadioc=false
diff --git a/IDE/STM32Cube/Boards/STM32L475.ioc b/IDE/STM32Cube/Boards/STM32L475.ioc
new file mode 100644
index 000000000..ef775ea14
--- /dev/null
+++ b/IDE/STM32Cube/Boards/STM32L475.ioc
@@ -0,0 +1,636 @@
+#MicroXplorer Configuration settings - do not modify
+FREERTOS.FootprintOK=true
+FREERTOS.IPParameters=Tasks01,FootprintOK,configTOTAL_HEAP_SIZE,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW
+FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;wolfCrypt,8,8960,wolfCryptDemo,As external,NULL,Dynamic,NULL,NULL
+FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2
+FREERTOS.configTOTAL_HEAP_SIZE=88000
+FREERTOS.configUSE_MALLOC_FAILED_HOOK=1
+File.Version=6
+KeepUserPlacement=false
+Mcu.Family=STM32L4
+Mcu.IP0=DFSDM1
+Mcu.IP1=FREERTOS
+Mcu.IP10=USART1
+Mcu.IP11=USART3
+Mcu.IP12=USB_OTG_FS
+Mcu.IP2=I2C2
+Mcu.IP3=NVIC
+Mcu.IP4=QUADSPI
+Mcu.IP5=RCC
+Mcu.IP6=RNG
+Mcu.IP7=RTC
+Mcu.IP8=SPI3
+Mcu.IP9=SYS
+Mcu.IPNb=13
+Mcu.Name=STM32L475V(C-E-G)Tx
+Mcu.Package=LQFP100
+Mcu.Pin0=PE2
+Mcu.Pin1=PE3
+Mcu.Pin10=PC2
+Mcu.Pin11=PC3
+Mcu.Pin12=PA0
+Mcu.Pin13=PA1
+Mcu.Pin14=PA2
+Mcu.Pin15=PA3
+Mcu.Pin16=PA4
+Mcu.Pin17=PA5
+Mcu.Pin18=PA6
+Mcu.Pin19=PA7
+Mcu.Pin2=PE4
+Mcu.Pin20=PC4
+Mcu.Pin21=PC5
+Mcu.Pin22=PB0
+Mcu.Pin23=PB1
+Mcu.Pin24=PB2
+Mcu.Pin25=PE7
+Mcu.Pin26=PE8
+Mcu.Pin27=PE9
+Mcu.Pin28=PE10
+Mcu.Pin29=PE11
+Mcu.Pin3=PE5
+Mcu.Pin30=PE12
+Mcu.Pin31=PE13
+Mcu.Pin32=PE14
+Mcu.Pin33=PE15
+Mcu.Pin34=PB10
+Mcu.Pin35=PB11
+Mcu.Pin36=PB12
+Mcu.Pin37=PB13
+Mcu.Pin38=PB14
+Mcu.Pin39=PB15
+Mcu.Pin4=PE6
+Mcu.Pin40=PD8
+Mcu.Pin41=PD9
+Mcu.Pin42=PD10
+Mcu.Pin43=PD11
+Mcu.Pin44=PD12
+Mcu.Pin45=PD13
+Mcu.Pin46=PD14
+Mcu.Pin47=PD15
+Mcu.Pin48=PC6
+Mcu.Pin49=PC7
+Mcu.Pin5=PC13
+Mcu.Pin50=PC8
+Mcu.Pin51=PC9
+Mcu.Pin52=PA8
+Mcu.Pin53=PA9
+Mcu.Pin54=PA10
+Mcu.Pin55=PA11
+Mcu.Pin56=PA12
+Mcu.Pin57=PA13 (JTMS-SWDIO)
+Mcu.Pin58=PA14 (JTCK-SWCLK)
+Mcu.Pin59=PA15 (JTDI)
+Mcu.Pin6=PC14-OSC32_IN (PC14)
+Mcu.Pin60=PC10
+Mcu.Pin61=PC11
+Mcu.Pin62=PC12
+Mcu.Pin63=PD0
+Mcu.Pin64=PD1
+Mcu.Pin65=PD2
+Mcu.Pin66=PD3
+Mcu.Pin67=PD4
+Mcu.Pin68=PD5
+Mcu.Pin69=PD6
+Mcu.Pin7=PC15-OSC32_OUT (PC15)
+Mcu.Pin70=PD7
+Mcu.Pin71=PB3 (JTDO-TRACESWO)
+Mcu.Pin72=PB4 (NJTRST)
+Mcu.Pin73=PB5
+Mcu.Pin74=PB6
+Mcu.Pin75=PB7
+Mcu.Pin76=PB8
+Mcu.Pin77=PB9
+Mcu.Pin78=PE0
+Mcu.Pin79=PE1
+Mcu.Pin8=PC0
+Mcu.Pin80=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin81=VP_RNG_VS_RNG
+Mcu.Pin82=VP_RTC_VS_RTC_Activate
+Mcu.Pin83=VP_SYS_VS_tim1
+Mcu.Pin84=VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+Mcu.Pin9=PC1
+Mcu.PinsNb=85
+Mcu.ThirdParty0=wolfSSL.wolfSSL.4.4.1
+Mcu.ThirdPartyNb=1
+Mcu.UserConstants=
+Mcu.UserName=STM32L475VGTx
+MxCube.Version=5.6.1
+MxDb.Version=DB.5.0.60
+NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false
+NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false
+NVIC.EXTI15_10_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
+NVIC.EXTI9_5_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
+NVIC.ForceEnableDMAVector=true
+NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false
+NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false
+NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false
+NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:true\:false
+NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
+NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:true\:false
+NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:true\:false
+NVIC.TIM1_UP_TIM16_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
+NVIC.TimeBase=TIM1_UP_TIM16_IRQn
+NVIC.TimeBaseIP=TIM1
+NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false
+PA0.GPIOParameters=GPIO_Label
+PA0.GPIO_Label=ARD_D1 [UART4_TX]
+PA0.Locked=true
+PA0.Signal=UART4_TX
+PA1.GPIOParameters=GPIO_Label
+PA1.GPIO_Label=ARD_D0 [UART4_RX]
+PA1.Locked=true
+PA1.Signal=UART4_RX
+PA10.GPIOParameters=GPIO_Label
+PA10.GPIO_Label=USB_OTG_FS_ID
+PA10.Locked=true
+PA10.Signal=USB_OTG_FS_ID
+PA11.GPIOParameters=GPIO_Label
+PA11.GPIO_Label=USB_OTG_FS_DM
+PA11.Locked=true
+PA11.Mode=Device_Only
+PA11.Signal=USB_OTG_FS_DM
+PA12.GPIOParameters=GPIO_Label
+PA12.GPIO_Label=USB_OTG_FS_DP
+PA12.Locked=true
+PA12.Mode=Device_Only
+PA12.Signal=USB_OTG_FS_DP
+PA13\ (JTMS-SWDIO).GPIOParameters=GPIO_Label
+PA13\ (JTMS-SWDIO).GPIO_Label=SYS_JTMS_SWDIO
+PA13\ (JTMS-SWDIO).Locked=true
+PA13\ (JTMS-SWDIO).Mode=Serial_Wire
+PA13\ (JTMS-SWDIO).Signal=SYS_JTMS-SWDIO
+PA14\ (JTCK-SWCLK).GPIOParameters=GPIO_Label
+PA14\ (JTCK-SWCLK).GPIO_Label=SYS_JTCK_SWCLK
+PA14\ (JTCK-SWCLK).Locked=true
+PA14\ (JTCK-SWCLK).Mode=Serial_Wire
+PA14\ (JTCK-SWCLK).Signal=SYS_JTCK-SWCLK
+PA15\ (JTDI).GPIOParameters=GPIO_Label
+PA15\ (JTDI).GPIO_Label=ARD_D9
+PA15\ (JTDI).Locked=true
+PA15\ (JTDI).Signal=GPIO_Output
+PA2.GPIOParameters=GPIO_Label
+PA2.GPIO_Label=ARD_D10 [SPI_SSN]
+PA2.Locked=true
+PA2.Signal=GPIO_Output
+PA3.GPIOParameters=GPIO_Label
+PA3.GPIO_Label=ARD_D4
+PA3.Locked=true
+PA3.Signal=S_TIM2_CH4
+PA4.GPIOParameters=GPIO_Label
+PA4.GPIO_Label=ARD_D7
+PA4.Locked=true
+PA4.Signal=ADCx_IN9
+PA5.GPIOParameters=GPIO_Label
+PA5.GPIO_Label=ARD_D13 [SPI1_SCK]
+PA5.Locked=true
+PA5.Signal=SPI1_SCK
+PA6.GPIOParameters=GPIO_Label
+PA6.GPIO_Label=ARD_D12 [SPI1_MISO]
+PA6.Locked=true
+PA6.Signal=SPI1_MISO
+PA7.GPIOParameters=GPIO_Label
+PA7.GPIO_Label=ARD_D11 [SPI1_MOSI]
+PA7.Locked=true
+PA7.Signal=SPI1_MOSI
+PA8.GPIOParameters=GPIO_Label
+PA8.GPIO_Label=SPBTLE_RF_RST
+PA8.Locked=true
+PA8.Signal=GPIO_Output
+PA9.GPIOParameters=GPIO_Label
+PA9.GPIO_Label=USB_OTG_FS_VBUS [STMPS2141STR_OUT]
+PA9.Locked=true
+PA9.Signal=USB_OTG_FS_VBUS
+PB0.GPIOParameters=GPIO_Label
+PB0.GPIO_Label=ARD_D3 [INT_EXT10]
+PB0.Locked=true
+PB0.Signal=GPXTI0
+PB1.GPIOParameters=GPIO_Label
+PB1.GPIO_Label=ARD_D6 [ADC1_IN6]
+PB1.Locked=true
+PB1.Signal=ADCx_IN16
+PB10.GPIOParameters=GPIO_Label
+PB10.GPIO_Label=INTERNAL_I2C2_SCL [VL53L0X_SCL]
+PB10.Locked=true
+PB10.Mode=I2C
+PB10.Signal=I2C2_SCL
+PB11.GPIOParameters=GPIO_Label
+PB11.GPIO_Label=INTERNAL_I2C2_SDA [VL53L0X_SDA]
+PB11.Locked=true
+PB11.Mode=I2C
+PB11.Signal=I2C2_SDA
+PB12.GPIOParameters=GPIO_Label
+PB12.GPIO_Label=ISM43362_BOOT0 [ISM43362_BOOT]
+PB12.Locked=true
+PB12.Signal=GPIO_Output
+PB13.GPIOParameters=GPIO_Label
+PB13.GPIO_Label=ISM43362_WAKEUP [ISM43362_WKUP]
+PB13.Locked=true
+PB13.Signal=GPIO_Output
+PB14.GPIOParameters=GPIO_Label
+PB14.GPIO_Label=LED2 [LED_GREEN]
+PB14.Locked=true
+PB14.Signal=GPIO_Output
+PB15.GPIOParameters=GPIO_Label
+PB15.GPIO_Label=SPSGRF_915_SDN [SPSGRF_SDN]
+PB15.Locked=true
+PB15.Signal=GPIO_Output
+PB2.GPIOParameters=GPIO_Label
+PB2.GPIO_Label=ARD_D8
+PB2.Locked=true
+PB2.Signal=GPIO_Output
+PB3\ (JTDO-TRACESWO).GPIOParameters=GPIO_Label
+PB3\ (JTDO-TRACESWO).GPIO_Label=SYS_JTD0_SWO
+PB3\ (JTDO-TRACESWO).Locked=true
+PB3\ (JTDO-TRACESWO).Signal=SYS_JTDO-SWO
+PB4\ (NJTRST).GPIOParameters=GPIO_Label
+PB4\ (NJTRST).GPIO_Label=ARD_D5
+PB4\ (NJTRST).Locked=true
+PB4\ (NJTRST).Signal=GPIO_Output
+PB5.GPIOParameters=PinState,GPIO_Label
+PB5.GPIO_Label=SPSGRF_915_SPI3_CSN [SPSGRF_SPI_CS]
+PB5.Locked=true
+PB5.PinState=GPIO_PIN_SET
+PB5.Signal=GPIO_Output
+PB6.GPIOParameters=GPIO_Label
+PB6.GPIO_Label=ST_LINK_UART1_TX
+PB6.Locked=true
+PB6.Mode=Asynchronous
+PB6.Signal=USART1_TX
+PB7.GPIOParameters=GPIO_Label
+PB7.GPIO_Label=ST_LINK_UART1_RX
+PB7.Locked=true
+PB7.Mode=Asynchronous
+PB7.Signal=USART1_RX
+PB8.GPIOParameters=GPIO_Label
+PB8.GPIO_Label=ARD_D15 [I2C1_SCL]
+PB8.Locked=true
+PB8.Signal=I2C1_SCL
+PB9.GPIOParameters=GPIO_Label
+PB9.GPIO_Label=ARD_D14 [I2C1_SDA]
+PB9.Locked=true
+PB9.Signal=I2C1_SDA
+PC0.GPIOParameters=GPIO_Label
+PC0.GPIO_Label=ARD_A5 [ADC]
+PC0.Locked=true
+PC0.Signal=ADCx_IN1
+PC1.GPIOParameters=GPIO_Label
+PC1.GPIO_Label=ARD_A4 [ADC]
+PC1.Locked=true
+PC1.Signal=ADCx_IN2
+PC10.GPIOParameters=GPIO_Label
+PC10.GPIO_Label=INTERNAL_SPI3_SCK [BT module_SPI_SCLK] [ISM43362_SCK]
+PC10.Locked=true
+PC10.Mode=Full_Duplex_Master
+PC10.Signal=SPI3_SCK
+PC11.GPIOParameters=GPIO_Label
+PC11.GPIO_Label=INTERNAL_SPI3_MISO [BT module_SPI_MISO] [ISM43362_MISO]
+PC11.Locked=true
+PC11.Mode=Full_Duplex_Master
+PC11.Signal=SPI3_MISO
+PC12.GPIOParameters=GPIO_Label
+PC12.GPIO_Label=INTERNAL_SPI3_MOSI [BT module_SPI_MOSI] [ISM43362_MOSI]
+PC12.Locked=true
+PC12.Mode=Full_Duplex_Master
+PC12.Signal=SPI3_MOSI
+PC13.GPIOParameters=GPIO_Label,GPIO_ModeDefaultEXTI
+PC13.GPIO_Label=BUTTON_EXTI13 [B2]
+PC13.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING
+PC13.Locked=true
+PC13.Signal=GPXTI13
+PC14-OSC32_IN\ (PC14).Locked=true
+PC14-OSC32_IN\ (PC14).Mode=LSE-External-Oscillator
+PC14-OSC32_IN\ (PC14).Signal=RCC_OSC32_IN
+PC15-OSC32_OUT\ (PC15).Locked=true
+PC15-OSC32_OUT\ (PC15).Mode=LSE-External-Oscillator
+PC15-OSC32_OUT\ (PC15).Signal=RCC_OSC32_OUT
+PC2.GPIOParameters=GPIO_Label
+PC2.GPIO_Label=ARD_A3 [ADC]
+PC2.Locked=true
+PC2.Signal=ADCx_IN3
+PC3.GPIOParameters=GPIO_Label
+PC3.GPIO_Label=ARD_A2 [ADC]
+PC3.Locked=true
+PC3.Signal=ADCx_IN4
+PC4.GPIOParameters=GPIO_Label
+PC4.GPIO_Label=ARD_A1 [ADC]
+PC4.Locked=true
+PC4.Signal=ADCx_IN13
+PC5.GPIOParameters=GPIO_Label
+PC5.GPIO_Label=ARD_A0 [ADC]
+PC5.Locked=true
+PC5.Signal=ADCx_IN14
+PC6.GPIOParameters=GPIO_Label
+PC6.GPIO_Label=VL53L0X_XSHUT [Read_XSHUT]
+PC6.Locked=true
+PC6.Signal=GPIO_Output
+PC7.GPIOParameters=GPIO_Label
+PC7.GPIO_Label=VL53L0X_GPIO1_EXTI7 [VL53L0X_GPIO1]
+PC7.Locked=true
+PC7.Signal=GPXTI7
+PC8.GPIOParameters=GPIO_Label
+PC8.GPIO_Label=LSM3MDL_DRDY_EXTI8 [LIS3MDL_DRDY]
+PC8.Locked=true
+PC8.Signal=GPXTI8
+PC9.GPIOParameters=GPIO_Label
+PC9.GPIO_Label=LED3_WIFI_ LED4_BLE
+PC9.Locked=true
+PC9.Signal=GPIO_Output
+PD0.GPIOParameters=GPIO_Label
+PD0.GPIO_Label=PMOD_RESET
+PD0.Locked=true
+PD0.Signal=GPIO_Output
+PD1.GPIOParameters=GPIO_Label
+PD1.GPIO_Label=PMOD_SPI2_SCK
+PD1.Locked=true
+PD1.Signal=SPI2_SCK
+PD10.GPIOParameters=GPIO_Label
+PD10.GPIO_Label=LPS22HB_INT_DRDY_EXTI0 [LPS22HB_INT_DRDY]
+PD10.Locked=true
+PD10.Signal=GPXTI10
+PD11.GPIOParameters=GPIO_Label
+PD11.GPIO_Label=LSM6DSL_INT1_EXTI11 [LSM6DSL_INT1]
+PD11.Locked=true
+PD11.Signal=GPXTI11
+PD12.GPIOParameters=GPIO_Label
+PD12.GPIO_Label=USB_OTG_FS_PWR_EN [STMPS2141STR_EN]
+PD12.Locked=true
+PD12.Signal=GPIO_Output
+PD13.GPIOParameters=PinState,GPIO_Label
+PD13.GPIO_Label=SPBTLE_RF_SPI3_CSN [BT module_SPI_CS]
+PD13.Locked=true
+PD13.PinState=GPIO_PIN_SET
+PD13.Signal=GPIO_Output
+PD14.GPIOParameters=GPIO_Label
+PD14.GPIO_Label=ARD_D2 [INT0_EXTI14]
+PD14.Locked=true
+PD14.Signal=GPXTI14
+PD15.GPIOParameters=GPIO_Label
+PD15.GPIO_Label=HTS221_DRDY_EXTI15 [HTS221_DRDY]
+PD15.Locked=true
+PD15.Signal=GPXTI15
+PD2.GPIOParameters=GPIO_Label
+PD2.GPIO_Label=PMOD_IRQ_EXTI12
+PD2.Locked=true
+PD2.Signal=GPXTI2
+PD3.GPIOParameters=GPIO_Label
+PD3.GPIO_Label=PMOD_UART2_CTS
+PD3.Locked=true
+PD3.Signal=USART2_CTS
+PD4.GPIOParameters=GPIO_Label
+PD4.GPIO_Label=PMOD_UART2_RTS
+PD4.Locked=true
+PD4.Signal=USART2_RTS
+PD5.GPIOParameters=GPIO_Label
+PD5.GPIO_Label=PMOD_UART2_TX
+PD5.Locked=true
+PD5.Signal=USART2_TX
+PD6.GPIOParameters=GPIO_Label
+PD6.GPIO_Label=PMOD_UART2_RX
+PD6.Locked=true
+PD6.Signal=USART2_RX
+PD7.GPIOParameters=GPIO_Label
+PD7.GPIO_Label=STSAFE_A100_RESET [STSAFE-A100_RESET]
+PD7.Locked=true
+PD7.Signal=GPIO_Output
+PD8.GPIOParameters=GPIO_Label
+PD8.GPIO_Label=INTERNAL_UART3_TX [ISM43362_RX]
+PD8.Locked=true
+PD8.Mode=Asynchronous
+PD8.Signal=USART3_TX
+PD9.GPIOParameters=GPIO_Label
+PD9.GPIO_Label=INTERNAL_UART3_RX [ISM43362_TX]
+PD9.Locked=true
+PD9.Mode=Asynchronous
+PD9.Signal=USART3_RX
+PE0.GPIOParameters=PinState,GPIO_Label
+PE0.GPIO_Label=ISM43362_SPI3_CSN [ISM43362_SSN]
+PE0.Locked=true
+PE0.PinState=GPIO_PIN_SET
+PE0.Signal=GPIO_Output
+PE1.GPIOParameters=GPIO_Label
+PE1.GPIO_Label=ISM43362_DRDY_EXTI1 [ISM43362_DATARDY]
+PE1.Locked=true
+PE1.Signal=GPXTI1
+PE10.GPIOParameters=GPIO_Label
+PE10.GPIO_Label=QUADSPI_CLK [MX25R6435F_SCLK]
+PE10.Locked=true
+PE10.Mode=Single Bank
+PE10.Signal=QUADSPI_CLK
+PE11.GPIOParameters=GPIO_Label
+PE11.GPIO_Label=QUADSPI_NCS [MX25R6435F_SCLK]
+PE11.Locked=true
+PE11.Mode=Single Bank
+PE11.Signal=QUADSPI_NCS
+PE12.GPIOParameters=GPIO_Label
+PE12.GPIO_Label=OQUADSPI_BK1_IO0 [MX25R6435F_IO0]
+PE12.Locked=true
+PE12.Mode=Single Bank
+PE12.Signal=QUADSPI_BK1_IO0
+PE13.GPIOParameters=GPIO_Label
+PE13.GPIO_Label=QUADSPI_BK1_IO1 [MX25R6435F_IO1]
+PE13.Locked=true
+PE13.Mode=Single Bank
+PE13.Signal=QUADSPI_BK1_IO1
+PE14.GPIOParameters=GPIO_Label
+PE14.GPIO_Label=QUAD_SPI_BK1_IO2 [MX25R6435F_IO2]
+PE14.Locked=true
+PE14.Mode=Single Bank
+PE14.Signal=QUADSPI_BK1_IO2
+PE15.GPIOParameters=GPIO_Label
+PE15.GPIO_Label=QUAD_SPI_BK1_IO3 [MX25R6435F_IO3]
+PE15.Locked=true
+PE15.Mode=Single Bank
+PE15.Signal=QUADSPI_BK1_IO3
+PE2.GPIOParameters=GPIO_Label
+PE2.GPIO_Label=M24SR64_Y_RF_DISABLE [M24SR64_RFDIS]
+PE2.Locked=true
+PE2.Signal=GPIO_Output
+PE3.GPIOParameters=GPIO_Label
+PE3.GPIO_Label=USB_OTG_FS_OVRCR_EXTI3 [STMPS2141STR_FAULT]
+PE3.Locked=true
+PE3.Signal=GPXTI3
+PE4.GPIOParameters=GPIO_Label
+PE4.GPIO_Label=M24SR64_Y_GPO [M24SR64_GPO]
+PE4.Locked=true
+PE4.Signal=GPIO_Output
+PE5.GPIOParameters=GPIO_Label
+PE5.GPIO_Label=SPSGRF_915_GPIO3_EXTI5 [SPSGRF_GPIO_3]
+PE5.Locked=true
+PE5.Signal=GPXTI5
+PE6.GPIOParameters=GPIO_Label
+PE6.GPIO_Label=SPBTLE_RF_IRQ_EXTI6 [BT module_SPI_IRQ]
+PE6.Locked=true
+PE6.Signal=GPXTI6
+PE7.GPIOParameters=GPIO_Label
+PE7.GPIO_Label=DFSDM1_DATIN2 [MP34DT01_DOUT]
+PE7.Locked=true
+PE7.Signal=S_DATAIN2DFSDM1
+PE8.GPIOParameters=GPIO_Label
+PE8.GPIO_Label=ISM43362_RST [ISM43362_RSTN]
+PE8.Locked=true
+PE8.Signal=GPIO_Output
+PE9.GPIOParameters=GPIO_Label
+PE9.GPIO_Label=DFSDM1_CKOUT [MP34DT01_CLK]
+PE9.Locked=true
+PE9.Signal=S_CKOUTDFSDM1
+PinOutPanel.RotationAngle=0
+ProjectManager.AskForMigrate=true
+ProjectManager.BackupPrevious=false
+ProjectManager.CompilerOptimize=6
+ProjectManager.ComputerToolchain=false
+ProjectManager.CoupleFile=false
+ProjectManager.CustomerFirmwarePackage=
+ProjectManager.DefaultFWLocation=true
+ProjectManager.DeletePrevious=true
+ProjectManager.DeviceId=STM32L475VGTx
+ProjectManager.FirmwarePackage=STM32Cube FW_L4 V1.15.1
+ProjectManager.FreePins=false
+ProjectManager.HalAssertFull=false
+ProjectManager.HeapSize=0x200
+ProjectManager.KeepUserCode=true
+ProjectManager.LastFirmware=true
+ProjectManager.LibraryCopy=1
+ProjectManager.MainLocation=Core/Src
+ProjectManager.NoMain=false
+ProjectManager.PreviousToolchain=
+ProjectManager.ProjectBuild=false
+ProjectManager.ProjectFileName=STM32L475.ioc
+ProjectManager.ProjectName=STM32L475
+ProjectManager.StackSize=0x400
+ProjectManager.TargetToolchain=STM32CubeIDE
+ProjectManager.ToolChainLocation=
+ProjectManager.UnderRoot=true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_DFSDM1_Init-DFSDM1-false-HAL-true,4-MX_I2C2_Init-I2C2-false-HAL-true,5-MX_QUADSPI_Init-QUADSPI-false-HAL-true,6-MX_SPI3_Init-SPI3-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true,8-MX_USART3_UART_Init-USART3-false-HAL-true,9-MX_USB_OTG_FS_PCD_Init-USB_OTG_FS-false-HAL-true
+RCC.ADCFreq_Value=48000000
+RCC.AHBFreq_Value=80000000
+RCC.APB1Freq_Value=80000000
+RCC.APB1TimFreq_Value=80000000
+RCC.APB2Freq_Value=80000000
+RCC.APB2TimFreq_Value=80000000
+RCC.CortexFreq_Value=80000000
+RCC.DFSDMFreq_Value=80000000
+RCC.FCLKCortexFreq_Value=80000000
+RCC.FamilyName=M
+RCC.HCLKFreq_Value=80000000
+RCC.HSE_VALUE=8000000
+RCC.HSI_VALUE=16000000
+RCC.I2C1Freq_Value=80000000
+RCC.I2C2Freq_Value=80000000
+RCC.I2C3Freq_Value=80000000
+RCC.IPParameters=ADCFreq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,DFSDMFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,MSI_VALUE,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSAI1N,PLLSAI1PoutputFreq_Value,PLLSAI1QoutputFreq_Value,PLLSAI1RoutputFreq_Value,PLLSAI2PoutputFreq_Value,PLLSAI2RoutputFreq_Value,PWRFreq_Value,RNGFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMCFreq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAI1OutputFreq_Value,VCOSAI2OutputFreq_Value
+RCC.LPTIM1Freq_Value=80000000
+RCC.LPTIM2Freq_Value=80000000
+RCC.LPUART1Freq_Value=80000000
+RCC.LSCOPinFreq_Value=32000
+RCC.LSI_VALUE=32000
+RCC.MCO1PinFreq_Value=80000000
+RCC.MSI_VALUE=4000000
+RCC.PLLN=40
+RCC.PLLPoutputFreq_Value=22857142.85714286
+RCC.PLLQoutputFreq_Value=80000000
+RCC.PLLRCLKFreq_Value=80000000
+RCC.PLLSAI1N=24
+RCC.PLLSAI1PoutputFreq_Value=13714285.714285715
+RCC.PLLSAI1QoutputFreq_Value=48000000
+RCC.PLLSAI1RoutputFreq_Value=48000000
+RCC.PLLSAI2PoutputFreq_Value=4571428.571428572
+RCC.PLLSAI2RoutputFreq_Value=16000000
+RCC.PWRFreq_Value=80000000
+RCC.RNGFreq_Value=48000000
+RCC.SAI1Freq_Value=13714285.714285715
+RCC.SAI2Freq_Value=13714285.714285715
+RCC.SDMMCFreq_Value=48000000
+RCC.SWPMI1Freq_Value=80000000
+RCC.SYSCLKFreq_VALUE=80000000
+RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
+RCC.UART4Freq_Value=80000000
+RCC.UART5Freq_Value=80000000
+RCC.USART1Freq_Value=80000000
+RCC.USART2Freq_Value=80000000
+RCC.USART3Freq_Value=80000000
+RCC.USBFreq_Value=48000000
+RCC.VCOInputFreq_Value=4000000
+RCC.VCOOutputFreq_Value=160000000
+RCC.VCOSAI1OutputFreq_Value=96000000
+RCC.VCOSAI2OutputFreq_Value=32000000
+SH.ADCx_IN1.0=ADC1_IN1
+SH.ADCx_IN1.ConfNb=1
+SH.ADCx_IN13.0=ADC1_IN13
+SH.ADCx_IN13.ConfNb=1
+SH.ADCx_IN14.0=ADC1_IN14
+SH.ADCx_IN14.ConfNb=1
+SH.ADCx_IN16.0=ADC1_IN16
+SH.ADCx_IN16.ConfNb=1
+SH.ADCx_IN2.0=ADC1_IN2
+SH.ADCx_IN2.ConfNb=1
+SH.ADCx_IN3.0=ADC1_IN3
+SH.ADCx_IN3.ConfNb=1
+SH.ADCx_IN4.0=ADC1_IN4
+SH.ADCx_IN4.ConfNb=1
+SH.ADCx_IN9.0=ADC1_IN9
+SH.ADCx_IN9.ConfNb=1
+SH.GPXTI0.0=GPIO_EXTI0
+SH.GPXTI0.ConfNb=1
+SH.GPXTI1.0=GPIO_EXTI1
+SH.GPXTI1.ConfNb=1
+SH.GPXTI10.0=GPIO_EXTI10
+SH.GPXTI10.ConfNb=1
+SH.GPXTI11.0=GPIO_EXTI11
+SH.GPXTI11.ConfNb=1
+SH.GPXTI13.0=GPIO_EXTI13
+SH.GPXTI13.ConfNb=1
+SH.GPXTI14.0=GPIO_EXTI14
+SH.GPXTI14.ConfNb=1
+SH.GPXTI15.0=GPIO_EXTI15
+SH.GPXTI15.ConfNb=1
+SH.GPXTI2.0=GPIO_EXTI2
+SH.GPXTI2.ConfNb=1
+SH.GPXTI3.0=GPIO_EXTI3
+SH.GPXTI3.ConfNb=1
+SH.GPXTI5.0=GPIO_EXTI5
+SH.GPXTI5.ConfNb=1
+SH.GPXTI6.0=GPIO_EXTI6
+SH.GPXTI6.ConfNb=1
+SH.GPXTI7.0=GPIO_EXTI7
+SH.GPXTI7.ConfNb=1
+SH.GPXTI8.0=GPIO_EXTI8
+SH.GPXTI8.ConfNb=1
+SH.S_CKOUTDFSDM1.0=DFSDM1_CKOUT,CKOUT
+SH.S_CKOUTDFSDM1.1=DFSDM1_CKOUT,PDM_SPI_Input_from_ch12_and_Internal_Clock
+SH.S_CKOUTDFSDM1.ConfNb=2
+SH.S_DATAIN2DFSDM1.0=DFSDM1_DATIN2,PDM_SPI_Input_from_ch12_and_Internal_Clock
+SH.S_DATAIN2DFSDM1.ConfNb=1
+SH.S_TIM2_CH4.0=TIM2_CH4
+SH.S_TIM2_CH4.ConfNb=1
+SPI3.CalculateBaudRate=40.0 MBits/s
+SPI3.Direction=SPI_DIRECTION_2LINES
+SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate
+SPI3.Mode=SPI_MODE_MASTER
+SPI3.VirtualType=VM_MASTER
+USART1.IPParameters=VirtualMode-Asynchronous
+USART1.VirtualMode-Asynchronous=VM_ASYNC
+USART3.IPParameters=VirtualMode-Asynchronous
+USART3.VirtualMode-Asynchronous=VM_ASYNC
+USB_OTG_FS.IPParameters=VirtualMode
+USB_OTG_FS.VirtualMode=Device_Only
+VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
+VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
+VP_RNG_VS_RNG.Mode=RNG_Activate
+VP_RNG_VS_RNG.Signal=RNG_VS_RNG
+VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
+VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
+VP_SYS_VS_tim1.Mode=TIM1
+VP_SYS_VS_tim1.Signal=SYS_VS_tim1
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Mode=wolfSSLJjwolfSSL
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Signal=wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+board=B-L475E-IOT01A1
+boardIOC=true
+wolfSSL.wolfSSL.4.4.1.IPParameters=wolfSSLCcwolfSSLJjwolfSSLJjCore,wolfSSLCcwolfSSLJjwolfCryptJjCore,wolfSSLCcwolfSSLJjwolfCryptJjTest,WOLF_CONF_MATH,WOLF_CONF_RTOS
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_MATH=4
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_RTOS=2
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjTest=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfSSLJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLJjwolfSSL_Checked=true
+wolfSSL.wolfSSL.4.4.1_SwParameter=wolfSSLCcwolfSSLJjwolfCryptJjCore\:true;wolfSSLCcwolfSSLJjwolfCryptJjTest\:true;wolfSSLCcwolfSSLJjwolfSSLJjCore\:true;
+isbadioc=false
diff --git a/IDE/STM32Cube/Boards/STM32L4A6.ioc b/IDE/STM32Cube/Boards/STM32L4A6.ioc
new file mode 100644
index 000000000..b289b5339
--- /dev/null
+++ b/IDE/STM32Cube/Boards/STM32L4A6.ioc
@@ -0,0 +1,170 @@
+#MicroXplorer Configuration settings - do not modify
+FREERTOS.FootprintOK=true
+FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,FootprintOK
+FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;wolfCrypt,8,8960,wolfCryptDemo,As external,NULL,Dynamic,NULL,NULL
+FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2
+FREERTOS.configTOTAL_HEAP_SIZE=131072
+FREERTOS.configUSE_MALLOC_FAILED_HOOK=1
+File.Version=6
+KeepUserPlacement=false
+LPUART1.BaudRate=115200
+LPUART1.IPParameters=BaudRate,WordLength
+LPUART1.WordLength=UART_WORDLENGTH_8B
+Mcu.Family=STM32L4
+Mcu.IP0=AES
+Mcu.IP1=FREERTOS
+Mcu.IP2=HASH
+Mcu.IP3=LPUART1
+Mcu.IP4=NVIC
+Mcu.IP5=RCC
+Mcu.IP6=RNG
+Mcu.IP7=RTC
+Mcu.IP8=SYS
+Mcu.IPNb=9
+Mcu.Name=STM32L4A6ZGTx
+Mcu.Package=LQFP144
+Mcu.Pin0=PG7
+Mcu.Pin1=PG8
+Mcu.Pin2=VP_AES_VS_AES
+Mcu.Pin3=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin4=VP_HASH_VS_HASH
+Mcu.Pin5=VP_RNG_VS_RNG
+Mcu.Pin6=VP_RTC_VS_RTC_Activate
+Mcu.Pin7=VP_RTC_VS_RTC_Calendar
+Mcu.Pin8=VP_SYS_VS_tim1
+Mcu.Pin9=VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+Mcu.PinsNb=10
+Mcu.ThirdParty0=wolfSSL.wolfSSL.4.4.1
+Mcu.ThirdPartyNb=1
+Mcu.UserConstants=
+Mcu.UserName=STM32L4A6ZGTx
+MxCube.Version=5.6.1
+MxDb.Version=DB.5.0.60
+NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.ForceEnableDMAVector=true
+NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
+NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
+NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.TIM1_UP_TIM16_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
+NVIC.TimeBase=TIM1_UP_TIM16_IRQn
+NVIC.TimeBaseIP=TIM1
+NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+PG7.Locked=true
+PG7.Mode=Asynchronous
+PG7.Signal=LPUART1_TX
+PG8.Locked=true
+PG8.Mode=Asynchronous
+PG8.Signal=LPUART1_RX
+PinOutPanel.RotationAngle=0
+ProjectManager.AskForMigrate=true
+ProjectManager.BackupPrevious=false
+ProjectManager.CompilerOptimize=6
+ProjectManager.ComputerToolchain=false
+ProjectManager.CoupleFile=false
+ProjectManager.CustomerFirmwarePackage=
+ProjectManager.DefaultFWLocation=true
+ProjectManager.DeletePrevious=true
+ProjectManager.DeviceId=STM32L4A6ZGTx
+ProjectManager.FirmwarePackage=STM32Cube FW_L4 V1.15.1
+ProjectManager.FreePins=false
+ProjectManager.HalAssertFull=false
+ProjectManager.HeapSize=0x200
+ProjectManager.KeepUserCode=true
+ProjectManager.LastFirmware=true
+ProjectManager.LibraryCopy=1
+ProjectManager.MainLocation=Core/Src
+ProjectManager.NoMain=false
+ProjectManager.PreviousToolchain=
+ProjectManager.ProjectBuild=false
+ProjectManager.ProjectFileName=STM32L4A6.ioc
+ProjectManager.ProjectName=STM32L4A6
+ProjectManager.StackSize=0x400
+ProjectManager.TargetToolchain=STM32CubeIDE
+ProjectManager.ToolChainLocation=
+ProjectManager.UnderRoot=true
+ProjectManager.functionlistsort=2-SystemClock_Config-RCC-false-HAL-false
+RCC.ADCFreq_Value=32000000
+RCC.AHBFreq_Value=80000000
+RCC.APB1Freq_Value=80000000
+RCC.APB1TimFreq_Value=80000000
+RCC.APB2Freq_Value=80000000
+RCC.APB2TimFreq_Value=80000000
+RCC.CortexFreq_Value=80000000
+RCC.DFSDMFreq_Value=80000000
+RCC.FCLKCortexFreq_Value=80000000
+RCC.FamilyName=M
+RCC.HCLKFreq_Value=80000000
+RCC.HSE_VALUE=8000000
+RCC.HSI48_VALUE=48000000
+RCC.HSI_VALUE=16000000
+RCC.I2C1Freq_Value=80000000
+RCC.I2C2Freq_Value=80000000
+RCC.I2C3Freq_Value=80000000
+RCC.I2C4Freq_Value=80000000
+RCC.IPParameters=ADCFreq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,DFSDMFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,MSI_VALUE,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSAI1N,PLLSAI1PoutputFreq_Value,PLLSAI1QoutputFreq_Value,PLLSAI1RoutputFreq_Value,PLLSAI2PoutputFreq_Value,PLLSAI2RoutputFreq_Value,PWRFreq_Value,RNGFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMCFreq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAI1OutputFreq_Value,VCOSAI2OutputFreq_Value
+RCC.LPTIM1Freq_Value=80000000
+RCC.LPTIM2Freq_Value=80000000
+RCC.LPUART1Freq_Value=80000000
+RCC.LSCOPinFreq_Value=32000
+RCC.LSE_VALUE=32768
+RCC.LSI_VALUE=32000
+RCC.MCO1PinFreq_Value=80000000
+RCC.MSI_VALUE=4000000
+RCC.PLLN=40
+RCC.PLLPoutputFreq_Value=80000000
+RCC.PLLQoutputFreq_Value=80000000
+RCC.PLLRCLKFreq_Value=80000000
+RCC.PLLSAI1N=16
+RCC.PLLSAI1PoutputFreq_Value=32000000
+RCC.PLLSAI1QoutputFreq_Value=32000000
+RCC.PLLSAI1RoutputFreq_Value=32000000
+RCC.PLLSAI2PoutputFreq_Value=16000000
+RCC.PLLSAI2RoutputFreq_Value=16000000
+RCC.PWRFreq_Value=80000000
+RCC.RNGFreq_Value=32000000
+RCC.SAI1Freq_Value=32000000
+RCC.SAI2Freq_Value=32000000
+RCC.SDMMCFreq_Value=32000000
+RCC.SWPMI1Freq_Value=80000000
+RCC.SYSCLKFreq_VALUE=80000000
+RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
+RCC.UART4Freq_Value=80000000
+RCC.UART5Freq_Value=80000000
+RCC.USART1Freq_Value=80000000
+RCC.USART2Freq_Value=80000000
+RCC.USART3Freq_Value=80000000
+RCC.USBFreq_Value=32000000
+RCC.VCOInputFreq_Value=4000000
+RCC.VCOOutputFreq_Value=160000000
+RCC.VCOSAI1OutputFreq_Value=64000000
+RCC.VCOSAI2OutputFreq_Value=32000000
+VP_AES_VS_AES.Mode=AES_Activate
+VP_AES_VS_AES.Signal=AES_VS_AES
+VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
+VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
+VP_HASH_VS_HASH.Mode=HASH_Activate
+VP_HASH_VS_HASH.Signal=HASH_VS_HASH
+VP_RNG_VS_RNG.Mode=RNG_Activate
+VP_RNG_VS_RNG.Signal=RNG_VS_RNG
+VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
+VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
+VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar
+VP_RTC_VS_RTC_Calendar.Signal=RTC_VS_RTC_Calendar
+VP_SYS_VS_tim1.Mode=TIM1
+VP_SYS_VS_tim1.Signal=SYS_VS_tim1
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Mode=wolfSSLJjwolfSSL
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Signal=wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+board=custom
+wolfSSL.wolfSSL.4.4.1.IPParameters=wolfSSLCcwolfSSLJjwolfSSLJjCore,WOLFCRYPT_ONLY,WOLF_CONF_MATH,WOLF_CONF_RTOS
+wolfSSL.wolfSSL.4.4.1.WOLFCRYPT_ONLY=False
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_MATH=4
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_RTOS=2
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfSSLJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLJjwolfSSL_Checked=true
+wolfSSL.wolfSSL.4.4.1_SwParameter=wolfSSLCcwolfSSLJjwolfSSLJjCore\:true;
+isbadioc=false
diff --git a/IDE/STM32Cube/Boards/STM32L552.ioc b/IDE/STM32Cube/Boards/STM32L552.ioc
new file mode 100644
index 000000000..5162ddad0
--- /dev/null
+++ b/IDE/STM32Cube/Boards/STM32L552.ioc
@@ -0,0 +1,267 @@
+#MicroXplorer Configuration settings - do not modify
+ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_3
+ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,NbrOfConversionFlag,master
+ADC1.NbrOfConversionFlag=1
+ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
+ADC1.Rank-0\#ChannelRegularConversion=1
+ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
+ADC1.master=1
+FREERTOS.FootprintOK=true
+FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,FootprintOK
+FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;wolfCrypt,8,35840,wolfCryptDemo,As external,NULL,Dynamic,NULL,NULL
+FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2
+FREERTOS.configTOTAL_HEAP_SIZE=180000
+FREERTOS.configUSE_MALLOC_FAILED_HOOK=1
+File.Version=6
+KeepUserPlacement=false
+LPUART1.BaudRate=115200
+LPUART1.IPParameters=BaudRate
+Mcu.Family=STM32L5
+Mcu.IP0=ADC1
+Mcu.IP1=DEBUG
+Mcu.IP10=SYS
+Mcu.IP11=UCPD1
+Mcu.IP12=USB
+Mcu.IP2=FREERTOS
+Mcu.IP3=HASH
+Mcu.IP4=LPUART1
+Mcu.IP5=NVIC
+Mcu.IP6=PWR
+Mcu.IP7=RCC
+Mcu.IP8=RNG
+Mcu.IP9=RTC
+Mcu.IPNb=13
+Mcu.Name=STM32L552Z(C-E)TxQ
+Mcu.Package=LQFP144
+Mcu.Pin0=PC13
+Mcu.Pin1=PC14-OSC32_IN (PC14)
+Mcu.Pin10=PA11
+Mcu.Pin11=PA12
+Mcu.Pin12=PA13 (JTMS/SWDIO)
+Mcu.Pin13=PA14 (JTCK/SWCLK)
+Mcu.Pin14=PA15 (JTDI)
+Mcu.Pin15=PB3 (JTDO/TRACESWO)
+Mcu.Pin16=PB5
+Mcu.Pin17=PB7
+Mcu.Pin18=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin19=VP_HASH_VS_HASH
+Mcu.Pin2=PC15-OSC32_OUT (PC15)
+Mcu.Pin20=VP_PWR_VS_DBSignals
+Mcu.Pin21=VP_RNG_VS_RNG
+Mcu.Pin22=VP_RTC_VS_RTC_Activate
+Mcu.Pin23=VP_SYS_VS_tim1
+Mcu.Pin24=VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+Mcu.Pin3=PC2
+Mcu.Pin4=PB14
+Mcu.Pin5=PB15
+Mcu.Pin6=PG7
+Mcu.Pin7=PG8
+Mcu.Pin8=PC7
+Mcu.Pin9=PA9
+Mcu.PinsNb=25
+Mcu.ThirdParty0=wolfSSL.wolfSSL.4.4.1
+Mcu.ThirdPartyNb=1
+Mcu.TrustZone=disable
+Mcu.UserConstants=
+Mcu.UserName=STM32L552ZETxQ
+MxCube.Version=5.6.1
+MxDb.Version=DB.5.0.60
+NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.ForceEnableDMAVector=true
+NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.PendSV_IRQn=true\:7\:0\:false\:false\:false\:true\:false\:false
+NVIC.PriorityGroup=NVIC_PRIORITYGROUP_3
+NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
+NVIC.SysTick_IRQn=true\:7\:0\:false\:false\:false\:true\:false\:false
+NVIC.TIM1_UP_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
+NVIC.TimeBase=TIM1_UP_IRQn
+NVIC.TimeBaseIP=TIM1
+NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+PA11.Locked=true
+PA11.Mode=Device
+PA11.Signal=USB_DM
+PA12.Mode=Device
+PA12.Signal=USB_DP
+PA13\ (JTMS/SWDIO).Locked=true
+PA13\ (JTMS/SWDIO).Mode=Trace_Asynchronous_SW
+PA13\ (JTMS/SWDIO).Signal=DEBUG_JTMS-SWDIO
+PA14\ (JTCK/SWCLK).Locked=true
+PA14\ (JTCK/SWCLK).Mode=Trace_Asynchronous_SW
+PA14\ (JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK
+PA15\ (JTDI).Locked=true
+PA15\ (JTDI).Mode=Source_AllSignals
+PA15\ (JTDI).Signal=UCPD1_CC1
+PA9.GPIOParameters=GPIO_Label
+PA9.GPIO_Label=LED_RED
+PA9.Locked=true
+PA9.Signal=GPIO_Output
+PB14.GPIOParameters=GPIO_Label
+PB14.GPIO_Label=UCPD_FLT
+PB14.Locked=true
+PB14.Signal=GPXTI14
+PB15.Locked=true
+PB15.Mode=Source_AllSignals
+PB15.Signal=UCPD1_CC2
+PB3\ (JTDO/TRACESWO).Locked=true
+PB3\ (JTDO/TRACESWO).Mode=Trace_Asynchronous_SW
+PB3\ (JTDO/TRACESWO).Signal=DEBUG_JTDO-SWO
+PB5.GPIOParameters=GPIO_Label
+PB5.GPIO_Label=UCPD_DBN
+PB5.Locked=true
+PB5.Signal=GPIO_Output
+PB7.GPIOParameters=GPIO_Label
+PB7.GPIO_Label=LED_BLUE
+PB7.Locked=true
+PB7.Signal=GPIO_Output
+PC13.GPIOParameters=GPIO_Label
+PC13.GPIO_Label=USER_BUTTON
+PC13.Locked=true
+PC13.Mode=WakeUp1
+PC13.Signal=PWR_WKUP2
+PC14-OSC32_IN\ (PC14).Locked=true
+PC14-OSC32_IN\ (PC14).Mode=LSE-External-Oscillator
+PC14-OSC32_IN\ (PC14).Signal=RCC_OSC32_IN
+PC15-OSC32_OUT\ (PC15).Locked=true
+PC15-OSC32_OUT\ (PC15).Mode=LSE-External-Oscillator
+PC15-OSC32_OUT\ (PC15).Signal=RCC_OSC32_OUT
+PC2.GPIOParameters=GPIO_Label
+PC2.GPIO_Label=VBUS_SENSE
+PC2.Locked=true
+PC2.Signal=ADCx_IN3
+PC7.GPIOParameters=GPIO_Label
+PC7.GPIO_Label=LED_GREEN
+PC7.Locked=true
+PC7.Signal=GPIO_Output
+PG7.GPIOParameters=GPIO_Label
+PG7.GPIO_Label=ST-LINK_VCP_TX
+PG7.Locked=true
+PG7.Mode=Asynchronous
+PG7.Signal=LPUART1_TX
+PG8.GPIOParameters=GPIO_Label
+PG8.GPIO_Label=ST-LINK_VCP_RX
+PG8.Locked=true
+PG8.Mode=Asynchronous
+PG8.Signal=LPUART1_RX
+PinOutPanel.RotationAngle=0
+ProjectManager.AskForMigrate=true
+ProjectManager.BackupPrevious=false
+ProjectManager.CompilerOptimize=6
+ProjectManager.ComputerToolchain=false
+ProjectManager.CoupleFile=false
+ProjectManager.CustomerFirmwarePackage=
+ProjectManager.DefaultFWLocation=true
+ProjectManager.DeletePrevious=true
+ProjectManager.DeviceId=STM32L552ZETxQ
+ProjectManager.FirmwarePackage=STM32Cube FW_L5 V1.2.0
+ProjectManager.FreePins=false
+ProjectManager.HalAssertFull=false
+ProjectManager.HeapSize=0x200
+ProjectManager.KeepUserCode=true
+ProjectManager.LastFirmware=true
+ProjectManager.LibraryCopy=1
+ProjectManager.MainLocation=Core/Src
+ProjectManager.NoMain=false
+ProjectManager.PreviousToolchain=
+ProjectManager.ProjectBuild=false
+ProjectManager.ProjectFileName=STM32L552.ioc
+ProjectManager.ProjectName=STM32L552
+ProjectManager.StackSize=0x400
+ProjectManager.TargetToolchain=STM32CubeIDE
+ProjectManager.ToolChainLocation=
+ProjectManager.UnderRoot=true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_ADC1_Init-ADC1-false-HAL-true,4-MX_LPUART1_UART_Init-LPUART1-false-HAL-true,5-MX_RTC_Init-RTC-false-HAL-true,6-MX_UCPD1_Init-UCPD1-false-LL-true,7-MX_USB_PCD_Init-USB-false-HAL-true,0-MX_PWR_Init-PWR-false-HAL-true
+RCC.ADCCLockSelection=RCC_ADCCLKSOURCE_SYSCLK
+RCC.ADCFreq_Value=110000000
+RCC.AHBFreq_Value=110000000
+RCC.APB1Freq_Value=110000000
+RCC.APB1TimFreq_Value=110000000
+RCC.APB2Freq_Value=110000000
+RCC.APB2TimFreq_Value=110000000
+RCC.CK48CLockSelection=RCC_USBCLKSOURCE_HSI48
+RCC.CRSFreq_Value=48000000
+RCC.CortexFreq_Value=110000000
+RCC.DFSDMAudioFreq_Value=4000000
+RCC.DFSDMFreq_Value=110000000
+RCC.FCLKCortexFreq_Value=110000000
+RCC.FDCANFreq_Value=110000000
+RCC.FamilyName=M
+RCC.HCLKFreq_Value=110000000
+RCC.HSE_VALUE=8000000
+RCC.HSI48_VALUE=48000000
+RCC.HSI_VALUE=16000000
+RCC.I2C1Freq_Value=110000000
+RCC.I2C2Freq_Value=110000000
+RCC.I2C3Freq_Value=110000000
+RCC.I2C4Freq_Value=110000000
+RCC.IPParameters=ADCCLockSelection,ADCFreq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CK48CLockSelection,CRSFreq_Value,CortexFreq_Value,DFSDMAudioFreq_Value,DFSDMFreq_Value,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM3Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,MSI_VALUE,OCTOSPIMFreq_Value,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSAI1N,PLLSAI1PoutputFreq_Value,PLLSAI1QoutputFreq_Value,PLLSAI1RoutputFreq_Value,PLLSAI2PoutputFreq_Value,PWRFreq_Value,RNGFreq_Value,RTCClockSelection,RTCFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMCFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAI1OutputFreq_Value,VCOSAI2OutputFreq_Value
+RCC.LPTIM1Freq_Value=110000000
+RCC.LPTIM2Freq_Value=110000000
+RCC.LPTIM3Freq_Value=110000000
+RCC.LPUART1Freq_Value=110000000
+RCC.LSCOPinFreq_Value=32000
+RCC.LSI_VALUE=32000
+RCC.MCO1PinFreq_Value=110000000
+RCC.MSI_VALUE=4000000
+RCC.OCTOSPIMFreq_Value=110000000
+RCC.PLLN=55
+RCC.PLLPoutputFreq_Value=31428571.42857143
+RCC.PLLQoutputFreq_Value=110000000
+RCC.PLLRCLKFreq_Value=110000000
+RCC.PLLSAI1N=24
+RCC.PLLSAI1PoutputFreq_Value=13714285.714285715
+RCC.PLLSAI1QoutputFreq_Value=48000000
+RCC.PLLSAI1RoutputFreq_Value=48000000
+RCC.PLLSAI2PoutputFreq_Value=4571428.571428572
+RCC.PWRFreq_Value=110000000
+RCC.RNGFreq_Value=48000000
+RCC.RTCClockSelection=RCC_RTCCLKSOURCE_LSE
+RCC.RTCFreq_Value=32768
+RCC.SAI1Freq_Value=13714285.714285715
+RCC.SAI2Freq_Value=13714285.714285715
+RCC.SDMMCFreq_Value=31428571.42857143
+RCC.SYSCLKFreq_VALUE=110000000
+RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
+RCC.UART4Freq_Value=110000000
+RCC.UART5Freq_Value=110000000
+RCC.USART1Freq_Value=110000000
+RCC.USART2Freq_Value=110000000
+RCC.USART3Freq_Value=110000000
+RCC.USBFreq_Value=48000000
+RCC.VCOInput2Freq_Value=4000000
+RCC.VCOInput3Freq_Value=4000000
+RCC.VCOInputFreq_Value=4000000
+RCC.VCOOutputFreq_Value=220000000
+RCC.VCOSAI1OutputFreq_Value=96000000
+RCC.VCOSAI2OutputFreq_Value=32000000
+SH.ADCx_IN3.0=ADC1_IN3,IN3-Single-Ended
+SH.ADCx_IN3.ConfNb=1
+SH.GPXTI14.0=GPIO_EXTI14
+SH.GPXTI14.ConfNb=1
+VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
+VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
+VP_HASH_VS_HASH.Mode=HASH_Activate
+VP_HASH_VS_HASH.Signal=HASH_VS_HASH
+VP_PWR_VS_DBSignals.Mode=DisableDeadBatterySignals
+VP_PWR_VS_DBSignals.Signal=PWR_VS_DBSignals
+VP_RNG_VS_RNG.Mode=RNG_Activate
+VP_RNG_VS_RNG.Signal=RNG_VS_RNG
+VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
+VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
+VP_SYS_VS_tim1.Mode=TIM1
+VP_SYS_VS_tim1.Signal=SYS_VS_tim1
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Mode=wolfSSLJjwolfSSL
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Signal=wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+board=NUCLEO-L552ZE-Q
+boardIOC=true
+wolfSSL.wolfSSL.4.4.1.IPParameters=wolfSSLCcwolfSSLJjwolfSSLJjCore,wolfSSLCcwolfSSLJjwolfCryptJjCore,wolfSSLCcwolfSSLJjwolfCryptJjTest,WOLF_CONF_MATH,WOLF_CONF_RTOS
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_MATH=4
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_RTOS=2
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjTest=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfSSLJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLJjwolfSSL_Checked=true
+wolfSSL.wolfSSL.4.4.1_SwParameter=wolfSSLCcwolfSSLJjwolfCryptJjCore\:true;wolfSSLCcwolfSSLJjwolfCryptJjTest\:true;wolfSSLCcwolfSSLJjwolfSSLJjCore\:true;
+isbadioc=false
diff --git a/IDE/STM32Cube/Boards/STM32L562.ioc b/IDE/STM32Cube/Boards/STM32L562.ioc
new file mode 100644
index 000000000..bb06e0823
--- /dev/null
+++ b/IDE/STM32Cube/Boards/STM32L562.ioc
@@ -0,0 +1,650 @@
+#MicroXplorer Configuration settings - do not modify
+ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_9
+ADC1.IPParameters=Rank-0\#ChannelRegularConversion,master,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,NbrOfConversionFlag
+ADC1.NbrOfConversionFlag=1
+ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
+ADC1.Rank-0\#ChannelRegularConversion=1
+ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
+ADC1.master=1
+FREERTOS.FootprintOK=true
+FREERTOS.IPParameters=Tasks01,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,FootprintOK,configTOTAL_HEAP_SIZE
+FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;wolfCrypt,8,35840,wolfCryptDemo,As external,NULL,Dynamic,NULL,NULL
+FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2
+FREERTOS.configTOTAL_HEAP_SIZE=180000
+FREERTOS.configUSE_MALLOC_FAILED_HOOK=1
+File.Version=6
+I2C1.IPParameters=Timing
+I2C1.Timing=0x40505681
+KeepUserPlacement=false
+Mcu.Family=STM32L5
+Mcu.IP0=ADC1
+Mcu.IP1=AES
+Mcu.IP10=NVIC
+Mcu.IP11=OCTOSPI1
+Mcu.IP12=PKA
+Mcu.IP13=PWR
+Mcu.IP14=RCC
+Mcu.IP15=RNG
+Mcu.IP16=RTC
+Mcu.IP17=SAI1
+Mcu.IP18=SDMMC1
+Mcu.IP19=SPI1
+Mcu.IP2=DEBUG
+Mcu.IP20=SYS
+Mcu.IP21=TIM4
+Mcu.IP22=TIM16
+Mcu.IP23=TIM17
+Mcu.IP24=UCPD1
+Mcu.IP25=USART1
+Mcu.IP26=USB
+Mcu.IP3=DFSDM1
+Mcu.IP4=FMC
+Mcu.IP5=FREERTOS
+Mcu.IP6=GTZC
+Mcu.IP7=HASH
+Mcu.IP8=I2C1
+Mcu.IP9=LPUART1
+Mcu.IPNb=27
+Mcu.Name=STM32L562QEIxQ
+Mcu.Package=UFBGA132
+Mcu.Pin0=PE5
+Mcu.Pin1=PE3
+Mcu.Pin10=PE2
+Mcu.Pin11=PD4
+Mcu.Pin12=PD1
+Mcu.Pin13=PC12
+Mcu.Pin14=PC10
+Mcu.Pin15=PA12
+Mcu.Pin16=PC14-OSC32_IN (PC14)
+Mcu.Pin17=PE6
+Mcu.Pin18=PC13
+Mcu.Pin19=PB3 (JTDO/TRACESWO)
+Mcu.Pin2=PE1
+Mcu.Pin20=PD3
+Mcu.Pin21=PD0
+Mcu.Pin22=PA13 (JTMS/SWDIO)
+Mcu.Pin23=PA14 (JTCK/SWCLK)
+Mcu.Pin24=PA11
+Mcu.Pin25=PC15-OSC32_OUT (PC15)
+Mcu.Pin26=PF0
+Mcu.Pin27=PF3
+Mcu.Pin28=PB7
+Mcu.Pin29=PB5
+Mcu.Pin3=PB6
+Mcu.Pin30=PD7
+Mcu.Pin31=PA9
+Mcu.Pin32=PA10
+Mcu.Pin33=PA8
+Mcu.Pin34=PF2
+Mcu.Pin35=PF1
+Mcu.Pin36=PC9
+Mcu.Pin37=PC8
+Mcu.Pin38=PH0-OSC_IN (PH0)
+Mcu.Pin39=PC2
+Mcu.Pin4=PG12
+Mcu.Pin40=PC3
+Mcu.Pin41=PG6
+Mcu.Pin42=PG7
+Mcu.Pin43=PG8
+Mcu.Pin44=PC1
+Mcu.Pin45=PG4
+Mcu.Pin46=PG2
+Mcu.Pin47=PG3
+Mcu.Pin48=PG5
+Mcu.Pin49=PC0
+Mcu.Pin5=PD5
+Mcu.Pin50=PD14
+Mcu.Pin51=PD15
+Mcu.Pin52=PF14
+Mcu.Pin53=PE8
+Mcu.Pin54=PE10
+Mcu.Pin55=PE12
+Mcu.Pin56=PD9
+Mcu.Pin57=PA2
+Mcu.Pin58=PA7
+Mcu.Pin59=PB2
+Mcu.Pin6=PD2
+Mcu.Pin60=PF11
+Mcu.Pin61=PG1
+Mcu.Pin62=PE7
+Mcu.Pin63=PE14
+Mcu.Pin64=PB10
+Mcu.Pin65=PB14
+Mcu.Pin66=PB15
+Mcu.Pin67=PA3
+Mcu.Pin68=PA6
+Mcu.Pin69=PA4
+Mcu.Pin7=PC11
+Mcu.Pin70=PB1
+Mcu.Pin71=PF12
+Mcu.Pin72=PF15
+Mcu.Pin73=PE11
+Mcu.Pin74=PE15
+Mcu.Pin75=PB11
+Mcu.Pin76=PB12
+Mcu.Pin77=PD8
+Mcu.Pin78=PB0
+Mcu.Pin79=PE9
+Mcu.Pin8=PA15 (JTDI)
+Mcu.Pin80=PE13
+Mcu.Pin81=PD10
+Mcu.Pin82=VP_AES_VS_AES
+Mcu.Pin83=VP_DFSDM1_VS_IN0
+Mcu.Pin84=VP_DFSDM1_VS_IN2
+Mcu.Pin85=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin86=VP_GTZC_VS_GTZC_Enable
+Mcu.Pin87=VP_HASH_VS_HASH
+Mcu.Pin88=VP_PKA_VS_PKA
+Mcu.Pin89=VP_PWR_VS_DBSignals
+Mcu.Pin9=PE4
+Mcu.Pin90=VP_RNG_VS_RNG
+Mcu.Pin91=VP_RTC_VS_RTC_Activate
+Mcu.Pin92=VP_SYS_VS_tim1
+Mcu.Pin93=VP_SYS_S_VS_Systick
+Mcu.Pin94=VP_TIM4_VS_ControllerModeClock
+Mcu.Pin95=VP_TIM4_VS_ClockSourceITR
+Mcu.Pin96=VP_TIM16_VS_ClockSourceINT
+Mcu.Pin97=VP_TIM17_VS_ClockSourceINT
+Mcu.Pin98=VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+Mcu.PinsNb=99
+Mcu.ThirdParty0=wolfSSL.wolfSSL.4.4.1
+Mcu.ThirdPartyNb=1
+Mcu.TrustZone=disable
+Mcu.UserConstants=
+Mcu.UserName=STM32L562QEIxQ
+MxCube.Version=5.6.1
+MxDb.Version=DB.5.0.60
+NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.ForceEnableDMAVector=true
+NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.PendSV_IRQn=true\:7\:0\:false\:false\:false\:true\:false\:false
+NVIC.PriorityGroup=NVIC_PRIORITYGROUP_3
+NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
+NVIC.SysTick_IRQn=true\:7\:0\:false\:false\:false\:true\:false\:false
+NVIC.TIM1_UP_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
+NVIC.TimeBase=TIM1_UP_IRQn
+NVIC.TimeBaseIP=TIM1
+NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+PA10.GPIOParameters=GPIO_Label
+PA10.GPIO_Label=USART1_RX [ST-LINK_VCP_TX]
+PA10.Locked=true
+PA10.Mode=Asynchronous
+PA10.Signal=USART1_RX
+PA11.Locked=true
+PA11.Mode=Device
+PA11.Signal=USB_DM
+PA12.Locked=true
+PA12.Mode=Device
+PA12.Signal=USB_DP
+PA13\ (JTMS/SWDIO).Locked=true
+PA13\ (JTMS/SWDIO).Mode=Trace_Asynchronous_SW
+PA13\ (JTMS/SWDIO).Signal=DEBUG_JTMS-SWDIO
+PA14\ (JTCK/SWCLK).Locked=true
+PA14\ (JTCK/SWCLK).Mode=Trace_Asynchronous_SW
+PA14\ (JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK
+PA15\ (JTDI).Locked=true
+PA15\ (JTDI).Mode=Source_AllSignals
+PA15\ (JTDI).Signal=UCPD1_CC1
+PA2.Locked=true
+PA2.Mode=octods_mode
+PA2.Signal=OCTOSPI1_NCS
+PA3.Locked=true
+PA3.Mode=octods_mode
+PA3.Signal=OCTOSPI1_CLK
+PA4.GPIOParameters=GPIO_Label
+PA4.GPIO_Label=VBUS_SENSE
+PA4.Locked=true
+PA4.Signal=ADCx_IN9
+PA6.Locked=true
+PA6.Mode=octods_mode
+PA6.Signal=OCTOSPI1_IO3
+PA7.Locked=true
+PA7.Mode=octods_mode
+PA7.Signal=OCTOSPI1_IO2
+PA8.GPIOParameters=GPIO_Label
+PA8.GPIO_Label=LCD.TE
+PA8.Locked=true
+PA8.Signal=GPIO_Output
+PA9.GPIOParameters=GPIO_Label
+PA9.GPIO_Label=USART1_TX [ST-LINK_VCP_RX]
+PA9.Locked=true
+PA9.Mode=Asynchronous
+PA9.Signal=USART1_TX
+PB0.Locked=true
+PB0.Mode=octods_mode
+PB0.Signal=OCTOSPI1_IO1
+PB1.Locked=true
+PB1.Mode=octods_mode
+PB1.Signal=OCTOSPI1_IO0
+PB10.Locked=true
+PB10.Mode=Asynchronous
+PB10.Signal=LPUART1_RX
+PB11.Locked=true
+PB11.Mode=Asynchronous
+PB11.Signal=LPUART1_TX
+PB12.Locked=true
+PB12.Signal=S_DATAIN1DFSDM1
+PB14.GPIOParameters=GPIO_Label
+PB14.GPIO_Label=UCPD_FLT
+PB14.Locked=true
+PB14.Signal=GPIO_Input
+PB15.Locked=true
+PB15.Mode=Source_AllSignals
+PB15.Signal=UCPD1_CC2
+PB2.Locked=true
+PB2.Mode=octods_mode
+PB2.Signal=OCTOSPI1_DQS
+PB3\ (JTDO/TRACESWO).Locked=true
+PB3\ (JTDO/TRACESWO).Mode=Trace_Asynchronous_SW
+PB3\ (JTDO/TRACESWO).Signal=DEBUG_JTDO-SWO
+PB5.GPIOParameters=GPIO_Label
+PB5.GPIO_Label=UCPD_DBn
+PB5.Locked=true
+PB5.Signal=GPIO_Output
+PB6.Locked=true
+PB6.Mode=I2C
+PB6.Signal=I2C1_SCL
+PB7.Locked=true
+PB7.Mode=I2C
+PB7.Signal=I2C1_SDA
+PC0.Locked=true
+PC0.Mode=octods_mode
+PC0.Signal=OCTOSPI1_IO7
+PC1.Locked=true
+PC1.Mode=octods_mode
+PC1.Signal=OCTOSPI1_IO4
+PC10.Locked=true
+PC10.Mode=SD_4_bits_Wide_bus
+PC10.Signal=SDMMC1_D2
+PC11.Locked=true
+PC11.Mode=SD_4_bits_Wide_bus
+PC11.Signal=SDMMC1_D3
+PC12.Locked=true
+PC12.Mode=SD_4_bits_Wide_bus
+PC12.Signal=SDMMC1_CK
+PC13.GPIOParameters=GPIO_Label
+PC13.GPIO_Label=USER_BUTTON
+PC13.Locked=true
+PC13.Signal=GPIO_Input
+PC14-OSC32_IN\ (PC14).Locked=true
+PC14-OSC32_IN\ (PC14).Mode=LSE-External-Oscillator
+PC14-OSC32_IN\ (PC14).Signal=RCC_OSC32_IN
+PC15-OSC32_OUT\ (PC15).Locked=true
+PC15-OSC32_OUT\ (PC15).Mode=LSE-External-Oscillator
+PC15-OSC32_OUT\ (PC15).Signal=RCC_OSC32_OUT
+PC2.Locked=true
+PC2.Mode=octods_mode
+PC2.Signal=OCTOSPI1_IO5
+PC3.Locked=true
+PC3.Mode=octods_mode
+PC3.Signal=OCTOSPI1_IO6
+PC8.Locked=true
+PC8.Mode=SD_4_bits_Wide_bus
+PC8.Signal=SDMMC1_D0
+PC9.Locked=true
+PC9.Mode=SD_4_bits_Wide_bus
+PC9.Signal=SDMMC1_D1
+PD0.Locked=true
+PD0.Signal=FMC_D2_DA2
+PD1.Locked=true
+PD1.Signal=FMC_D3_DA3
+PD10.Locked=true
+PD10.Signal=FMC_D15_DA15
+PD14.Locked=true
+PD14.Signal=FMC_D0_DA0
+PD15.Locked=true
+PD15.Signal=FMC_D1_DA1
+PD2.Locked=true
+PD2.Mode=SD_4_bits_Wide_bus
+PD2.Signal=SDMMC1_CMD
+PD3.GPIOParameters=GPIO_Label
+PD3.GPIO_Label=LED_RED
+PD3.Locked=true
+PD3.Signal=GPIO_Output
+PD4.Locked=true
+PD4.Signal=FMC_NOE
+PD5.Locked=true
+PD5.Signal=FMC_NWE
+PD7.Locked=true
+PD7.Mode=NorPsramChipSelect1_1
+PD7.Signal=FMC_NE1
+PD8.Locked=true
+PD8.Signal=FMC_D13_DA13
+PD9.Locked=true
+PD9.Signal=FMC_D14_DA14
+PE1.GPIOParameters=GPIO_Label
+PE1.GPIO_Label=LCD_BL_PWM
+PE1.Locked=true
+PE1.Signal=S_TIM17_CH1
+PE10.Locked=true
+PE10.Signal=FMC_D7_DA7
+PE11.Locked=true
+PE11.Signal=FMC_D8_DA8
+PE12.Locked=true
+PE12.Signal=FMC_D9_DA9
+PE13.Locked=true
+PE13.Signal=FMC_D10_DA10
+PE14.Locked=true
+PE14.Signal=FMC_D11_DA11
+PE15.Locked=true
+PE15.Signal=FMC_D12_DA12
+PE2.Locked=true
+PE2.Mode=SAI_A_MasterWithClock
+PE2.Signal=SAI1_MCLK_A
+PE3.Locked=true
+PE3.Mode=SAI_B_SPDIF
+PE3.Signal=SAI1_SD_B
+PE4.Locked=true
+PE4.Mode=SAI_A_MasterWithClock
+PE4.Signal=SAI1_FS_A
+PE5.Locked=true
+PE5.Mode=SAI_A_MasterWithClock
+PE5.Signal=SAI1_SCK_A
+PE6.Locked=true
+PE6.Mode=SAI_A_MasterWithClock
+PE6.Signal=SAI1_SD_A
+PE7.Locked=true
+PE7.Signal=FMC_D4_DA4
+PE8.Locked=true
+PE8.Signal=FMC_D5_DA5
+PE9.Locked=true
+PE9.Signal=FMC_D6_DA6
+PF0.Locked=true
+PF0.Signal=FMC_A0
+PF1.GPIOParameters=GPIO_Label
+PF1.GPIO_Label=CTP_INT
+PF1.Locked=true
+PF1.Signal=GPXTI1
+PF11.GPIOParameters=GPIO_Label
+PF11.GPIO_Label=STMOD_SEL_12
+PF11.Locked=true
+PF11.Signal=GPIO_Output
+PF12.GPIOParameters=GPIO_Label
+PF12.GPIO_Label=STMOD_SEL_34
+PF12.Locked=true
+PF12.Signal=GPIO_Output
+PF14.GPIOParameters=GPIO_Label
+PF14.GPIO_Label=LCD_RST
+PF14.Locked=true
+PF14.Signal=GPIO_Output
+PF15.GPIOParameters=GPIO_Label
+PF15.GPIO_Label=CTP_RST
+PF15.Locked=true
+PF15.Signal=GPIO_Output
+PF2.GPIOParameters=GPIO_Label
+PF2.GPIO_Label=SDIO_DETECT
+PF2.Locked=true
+PF2.Signal=GPXTI2
+PF3.GPIOParameters=GPIO_Label
+PF3.GPIO_Label=GYRO_ACC_INT
+PF3.Locked=true
+PF3.Signal=GPXTI3
+PG1.GPIOParameters=GPIO_Label
+PG1.GPIO_Label=AUDIO_RESETN
+PG1.Locked=true
+PG1.Signal=GPIO_Output
+PG12.GPIOParameters=GPIO_Label
+PG12.GPIO_Label=LED_GREEN
+PG12.Locked=true
+PG12.Signal=GPIO_Output
+PG2.Locked=true
+PG2.Mode=Full_Duplex_Master
+PG2.Signal=SPI1_SCK
+PG3.Locked=true
+PG3.Mode=Full_Duplex_Master
+PG3.Signal=SPI1_MISO
+PG4.Locked=true
+PG4.Mode=Full_Duplex_Master
+PG4.Signal=SPI1_MOSI
+PG5.GPIOParameters=GPIO_Label
+PG5.GPIO_Label=BLE_CSN
+PG5.Locked=true
+PG5.Mode=NSS_Signal_Hard_Input
+PG5.Signal=SPI1_NSS
+PG6.GPIOParameters=GPIO_Label
+PG6.GPIO_Label=BLE_INT
+PG6.Locked=true
+PG6.Signal=GPXTI6
+PG7.Locked=true
+PG7.Signal=S_CKOUTDFSDM1
+PG8.GPIOParameters=GPIO_Label
+PG8.GPIO_Label=BLE_RSTN
+PG8.Locked=true
+PG8.Signal=GPIO_Output
+PH0-OSC_IN\ (PH0).GPIOParameters=GPIO_Label
+PH0-OSC_IN\ (PH0).GPIO_Label=LCD_PWR_ON
+PH0-OSC_IN\ (PH0).Locked=true
+PH0-OSC_IN\ (PH0).Signal=GPIO_Output
+PinOutPanel.CurrentBGAView=Top
+PinOutPanel.RotationAngle=0
+ProjectManager.AskForMigrate=true
+ProjectManager.BackupPrevious=false
+ProjectManager.CompilerOptimize=6
+ProjectManager.ComputerToolchain=false
+ProjectManager.CoupleFile=false
+ProjectManager.CustomerFirmwarePackage=
+ProjectManager.DefaultFWLocation=true
+ProjectManager.DeletePrevious=true
+ProjectManager.DeviceId=STM32L562QEIxQ
+ProjectManager.FirmwarePackage=STM32Cube FW_L5 V1.2.0
+ProjectManager.FreePins=false
+ProjectManager.HalAssertFull=false
+ProjectManager.HeapSize=0x200
+ProjectManager.KeepUserCode=true
+ProjectManager.LastFirmware=true
+ProjectManager.LibraryCopy=1
+ProjectManager.MainLocation=Core/Src
+ProjectManager.NoMain=false
+ProjectManager.PreviousToolchain=
+ProjectManager.ProjectBuild=false
+ProjectManager.ProjectFileName=STM32L562.ioc
+ProjectManager.ProjectName=STM32L562
+ProjectManager.StackSize=0x400
+ProjectManager.TargetToolchain=STM32CubeIDE
+ProjectManager.ToolChainLocation=
+ProjectManager.UnderRoot=true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_ADC1_Init-ADC1-false-HAL-true,4-MX_DFSDM1_Init-DFSDM1-false-HAL-true,5-MX_FMC_Init-FMC-false-HAL-true,6-MX_GTZC_Init-GTZC-false-HAL-true,7-MX_I2C1_Init-I2C1-false-HAL-true,8-MX_LPUART1_UART_Init-LPUART1-false-HAL-true,9-MX_USART1_UART_Init-USART1-false-HAL-true,10-MX_OCTOSPI1_Init-OCTOSPI1-false-HAL-true,11-MX_SAI1_Init-SAI1-false-HAL-true,12-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,13-MX_SPI1_Init-SPI1-false-HAL-true,14-MX_TIM4_Init-TIM4-false-HAL-true,15-MX_TIM16_Init-TIM16-false-HAL-true,16-MX_TIM17_Init-TIM17-false-HAL-true,17-MX_UCPD1_Init-UCPD1-false-LL-true,18-MX_USB_PCD_Init-USB-false-HAL-true,19-MX_AES_Init-AES-false-HAL-true,20-MX_HASH_Init-HASH-false-HAL-true,21-MX_PKA_Init-PKA-false-HAL-true,22-MX_RNG_Init-RNG-false-HAL-true,0-MX_PWR_Init-PWR-false-HAL-true
+RCC.ADCFreq_Value=96000000
+RCC.AHBFreq_Value=110000000
+RCC.APB1Freq_Value=110000000
+RCC.APB1TimFreq_Value=110000000
+RCC.APB2Freq_Value=110000000
+RCC.APB2TimFreq_Value=110000000
+RCC.CK48CLockSelection=RCC_USBCLKSOURCE_MSI
+RCC.CRSFreq_Value=48000000
+RCC.CortexFreq_Value=110000000
+RCC.DFSDMAudioFreq_Value=48000000
+RCC.DFSDMFreq_Value=110000000
+RCC.FCLKCortexFreq_Value=110000000
+RCC.FDCANFreq_Value=110000000
+RCC.FamilyName=M
+RCC.HCLKFreq_Value=110000000
+RCC.HSE_VALUE=8000000
+RCC.HSI48_VALUE=48000000
+RCC.HSI_VALUE=16000000
+RCC.I2C1Freq_Value=110000000
+RCC.I2C2Freq_Value=110000000
+RCC.I2C3Freq_Value=110000000
+RCC.I2C4Freq_Value=110000000
+RCC.IPParameters=ADCFreq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CK48CLockSelection,CRSFreq_Value,CortexFreq_Value,DFSDMAudioFreq_Value,DFSDMFreq_Value,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM3Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,MSIClockRange,MSI_VALUE,OCTOSPIMFreq_Value,PLLM,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSAI1M,PLLSAI1N,PLLSAI1P,PLLSAI1PoutputFreq_Value,PLLSAI1QoutputFreq_Value,PLLSAI1RoutputFreq_Value,PLLSAI1Source,PLLSAI2PoutputFreq_Value,PWRFreq_Value,RNGFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMCClockSelection,SDMMCFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAI1OutputFreq_Value,VCOSAI2OutputFreq_Value
+RCC.LPTIM1Freq_Value=110000000
+RCC.LPTIM2Freq_Value=110000000
+RCC.LPTIM3Freq_Value=110000000
+RCC.LPUART1Freq_Value=110000000
+RCC.LSCOPinFreq_Value=32000
+RCC.LSI_VALUE=32000
+RCC.MCO1PinFreq_Value=110000000
+RCC.MSIClockRange=RCC_MSIRANGE_11
+RCC.MSI_VALUE=48000000
+RCC.OCTOSPIMFreq_Value=110000000
+RCC.PLLM=12
+RCC.PLLN=55
+RCC.PLLPoutputFreq_Value=31428571.42857143
+RCC.PLLQoutputFreq_Value=110000000
+RCC.PLLRCLKFreq_Value=110000000
+RCC.PLLSAI1M=4
+RCC.PLLSAI1N=48
+RCC.PLLSAI1P=RCC_PLLP_DIV17
+RCC.PLLSAI1PoutputFreq_Value=11294117.647058824
+RCC.PLLSAI1QoutputFreq_Value=96000000
+RCC.PLLSAI1RoutputFreq_Value=96000000
+RCC.PLLSAI1Source=RCC_PLLSAI1SOURCE_HSI
+RCC.PLLSAI2PoutputFreq_Value=54857142.85714286
+RCC.PWRFreq_Value=110000000
+RCC.RNGFreq_Value=48000000
+RCC.SAI1Freq_Value=11294117.647058824
+RCC.SAI2Freq_Value=11294117.647058824
+RCC.SDMMCClockSelection=RCC_SDIOCLKSOURCE_CLK48
+RCC.SDMMCFreq_Value=48000000
+RCC.SYSCLKFreq_VALUE=110000000
+RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
+RCC.UART4Freq_Value=110000000
+RCC.UART5Freq_Value=110000000
+RCC.USART1Freq_Value=110000000
+RCC.USART2Freq_Value=110000000
+RCC.USART3Freq_Value=110000000
+RCC.USBFreq_Value=48000000
+RCC.VCOInput2Freq_Value=4000000
+RCC.VCOInput3Freq_Value=48000000
+RCC.VCOInputFreq_Value=4000000
+RCC.VCOOutputFreq_Value=220000000
+RCC.VCOSAI1OutputFreq_Value=192000000
+RCC.VCOSAI2OutputFreq_Value=384000000
+SAI1.ErrorAudioFreq-SAI_A_MasterWithClock=-77.02 %
+SAI1.IPParameters=Instance-SAI_B_SPDIF,VirtualMode-SAI_B_SPDIF,RealAudioFreq-SAI_B_SPDIF,Instance-SAI_A_MasterWithClock,VirtualMode-SAI_A_MasterWithClock,MckOutput-SAI_A_MasterWithClock,RealAudioFreq-SAI_A_MasterWithClock,ErrorAudioFreq-SAI_A_MasterWithClock
+SAI1.Instance-SAI_A_MasterWithClock=SAI$Index_Block_A
+SAI1.Instance-SAI_B_SPDIF=SAI$Index_Block_B
+SAI1.MckOutput-SAI_A_MasterWithClock=SAI_MCK_OUTPUT_ENABLE
+SAI1.RealAudioFreq-SAI_A_MasterWithClock=44.117 KHz
+SAI1.RealAudioFreq-SAI_B_SPDIF=214.285 KHz
+SAI1.VirtualMode-SAI_A_MasterWithClock=VM_MASTER
+SAI1.VirtualMode-SAI_B_SPDIF=VM_SPDIF
+SH.ADCx_IN9.0=ADC1_IN9,IN9-Single-Ended
+SH.ADCx_IN9.ConfNb=1
+SH.FMC_A0.0=FMC_A0,A0_1
+SH.FMC_A0.ConfNb=1
+SH.FMC_D0_DA0.0=FMC_DA0
+SH.FMC_D0_DA0.1=FMC_D0,16b-d1
+SH.FMC_D0_DA0.ConfNb=2
+SH.FMC_D10_DA10.0=FMC_DA10
+SH.FMC_D10_DA10.1=FMC_D10,16b-d1
+SH.FMC_D10_DA10.ConfNb=2
+SH.FMC_D11_DA11.0=FMC_DA11
+SH.FMC_D11_DA11.1=FMC_D11,16b-d1
+SH.FMC_D11_DA11.ConfNb=2
+SH.FMC_D12_DA12.0=FMC_DA12
+SH.FMC_D12_DA12.1=FMC_D12,16b-d1
+SH.FMC_D12_DA12.ConfNb=2
+SH.FMC_D13_DA13.0=FMC_DA13
+SH.FMC_D13_DA13.1=FMC_D13,16b-d1
+SH.FMC_D13_DA13.ConfNb=2
+SH.FMC_D14_DA14.0=FMC_DA14
+SH.FMC_D14_DA14.1=FMC_D14,16b-d1
+SH.FMC_D14_DA14.ConfNb=2
+SH.FMC_D15_DA15.0=FMC_DA15
+SH.FMC_D15_DA15.1=FMC_D15,16b-d1
+SH.FMC_D15_DA15.ConfNb=2
+SH.FMC_D1_DA1.0=FMC_DA1
+SH.FMC_D1_DA1.1=FMC_D1,16b-d1
+SH.FMC_D1_DA1.ConfNb=2
+SH.FMC_D2_DA2.0=FMC_DA2
+SH.FMC_D2_DA2.1=FMC_D2,16b-d1
+SH.FMC_D2_DA2.ConfNb=2
+SH.FMC_D3_DA3.0=FMC_DA3
+SH.FMC_D3_DA3.1=FMC_D3,16b-d1
+SH.FMC_D3_DA3.ConfNb=2
+SH.FMC_D4_DA4.0=FMC_DA4
+SH.FMC_D4_DA4.1=FMC_D4,16b-d1
+SH.FMC_D4_DA4.ConfNb=2
+SH.FMC_D5_DA5.0=FMC_DA5
+SH.FMC_D5_DA5.1=FMC_D5,16b-d1
+SH.FMC_D5_DA5.ConfNb=2
+SH.FMC_D6_DA6.0=FMC_DA6
+SH.FMC_D6_DA6.1=FMC_D6,16b-d1
+SH.FMC_D6_DA6.ConfNb=2
+SH.FMC_D7_DA7.0=FMC_DA7
+SH.FMC_D7_DA7.1=FMC_D7,16b-d1
+SH.FMC_D7_DA7.ConfNb=2
+SH.FMC_D8_DA8.0=FMC_DA8
+SH.FMC_D8_DA8.1=FMC_D8,16b-d1
+SH.FMC_D8_DA8.ConfNb=2
+SH.FMC_D9_DA9.0=FMC_DA9
+SH.FMC_D9_DA9.1=FMC_D9,16b-d1
+SH.FMC_D9_DA9.ConfNb=2
+SH.FMC_NOE.0=FMC_NOE,Lcd1
+SH.FMC_NOE.ConfNb=1
+SH.FMC_NWE.0=FMC_NWE,Lcd1
+SH.FMC_NWE.ConfNb=1
+SH.GPXTI1.0=GPIO_EXTI1
+SH.GPXTI1.ConfNb=1
+SH.GPXTI2.0=GPIO_EXTI2
+SH.GPXTI2.ConfNb=1
+SH.GPXTI3.0=GPIO_EXTI3
+SH.GPXTI3.ConfNb=1
+SH.GPXTI6.0=GPIO_EXTI6
+SH.GPXTI6.ConfNb=1
+SH.S_CKOUTDFSDM1.0=DFSDM1_CKOUT,CKOUT
+SH.S_CKOUTDFSDM1.ConfNb=1
+SH.S_DATAIN1DFSDM1.0=DFSDM1_DATIN1,Manchester_input_from_ch1
+SH.S_DATAIN1DFSDM1.ConfNb=1
+SH.S_TIM17_CH1.0=TIM17_CH1,PWM Generation1 CH1
+SH.S_TIM17_CH1.ConfNb=1
+SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_8
+SPI1.CalculateBaudRate=13.75 MBits/s
+SPI1.Direction=SPI_DIRECTION_2LINES
+SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS,BaudRatePrescaler
+SPI1.Mode=SPI_MODE_MASTER
+SPI1.VirtualNSS=VM_NSSHARD
+SPI1.VirtualType=VM_MASTER
+TIM17.Channel=TIM_CHANNEL_1
+TIM17.IPParameters=Channel
+USART1.IPParameters=VirtualMode-Asynchronous
+USART1.VirtualMode-Asynchronous=VM_ASYNC
+VP_AES_VS_AES.Mode=AES_Activate
+VP_AES_VS_AES.Signal=AES_VS_AES
+VP_DFSDM1_VS_IN0.Mode=Parallel_Input_ch0
+VP_DFSDM1_VS_IN0.Signal=DFSDM1_VS_IN0
+VP_DFSDM1_VS_IN2.Mode=Parallel_Input_ch2
+VP_DFSDM1_VS_IN2.Signal=DFSDM1_VS_IN2
+VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
+VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
+VP_GTZC_VS_GTZC_Enable.Mode=GTZC_Enable
+VP_GTZC_VS_GTZC_Enable.Signal=GTZC_VS_GTZC_Enable
+VP_HASH_VS_HASH.Mode=HASH_Activate
+VP_HASH_VS_HASH.Signal=HASH_VS_HASH
+VP_PKA_VS_PKA.Mode=PKA_Activate
+VP_PKA_VS_PKA.Signal=PKA_VS_PKA
+VP_PWR_VS_DBSignals.Mode=DisableDeadBatterySignals
+VP_PWR_VS_DBSignals.Signal=PWR_VS_DBSignals
+VP_RNG_VS_RNG.Mode=RNG_Activate
+VP_RNG_VS_RNG.Signal=RNG_VS_RNG
+VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
+VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
+VP_SYS_S_VS_Systick.Mode=SysTick
+VP_SYS_S_VS_Systick.Signal=SYS_S_VS_Systick
+VP_SYS_VS_tim1.Mode=TIM1
+VP_SYS_VS_tim1.Signal=SYS_VS_tim1
+VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer
+VP_TIM16_VS_ClockSourceINT.Signal=TIM16_VS_ClockSourceINT
+VP_TIM17_VS_ClockSourceINT.Mode=Enable_Timer
+VP_TIM17_VS_ClockSourceINT.Signal=TIM17_VS_ClockSourceINT
+VP_TIM4_VS_ClockSourceITR.Mode=TriggerSource_ITR1
+VP_TIM4_VS_ClockSourceITR.Signal=TIM4_VS_ClockSourceITR
+VP_TIM4_VS_ControllerModeClock.Mode=Clock Mode
+VP_TIM4_VS_ControllerModeClock.Signal=TIM4_VS_ControllerModeClock
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Mode=wolfSSLJjwolfSSL
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Signal=wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+board=STM32L562E-DK
+boardIOC=true
+wolfSSL.wolfSSL.4.4.1.IPParameters=wolfSSLCcwolfSSLJjwolfSSLJjCore,wolfSSLCcwolfSSLJjwolfCryptJjCore,wolfSSLCcwolfSSLJjwolfCryptJjTest,WOLF_CONF_MATH,WOLF_CONF_RTOS
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_MATH=4
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_RTOS=2
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjTest=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfSSLJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLJjwolfSSL_Checked=true
+wolfSSL.wolfSSL.4.4.1_SwParameter=wolfSSLCcwolfSSLJjwolfCryptJjCore\:true;wolfSSLCcwolfSSLJjwolfCryptJjTest\:true;wolfSSLCcwolfSSLJjwolfSSLJjCore\:true;
+isbadioc=false
diff --git a/IDE/STM32Cube/Boards/STM32WB55.ioc b/IDE/STM32Cube/Boards/STM32WB55.ioc
new file mode 100644
index 000000000..dd05360ac
--- /dev/null
+++ b/IDE/STM32Cube/Boards/STM32WB55.ioc
@@ -0,0 +1,256 @@
+#MicroXplorer Configuration settings - do not modify
+FREERTOS.FootprintOK=true
+FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,configUSE_DAEMON_TASK_STARTUP_HOOK,FootprintOK
+FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;wolfCrypt,8,8960,wolfCryptDemo,As external,NULL,Dynamic,NULL,NULL
+FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2
+FREERTOS.configTOTAL_HEAP_SIZE=184320
+FREERTOS.configUSE_DAEMON_TASK_STARTUP_HOOK=1
+FREERTOS.configUSE_MALLOC_FAILED_HOOK=1
+File.Version=6
+KeepUserPlacement=false
+Mcu.Family=STM32WB
+Mcu.IP0=AES1
+Mcu.IP1=AES2
+Mcu.IP10=USB
+Mcu.IP2=FREERTOS
+Mcu.IP3=NVIC
+Mcu.IP4=PKA
+Mcu.IP5=RCC
+Mcu.IP6=RNG
+Mcu.IP7=RTC
+Mcu.IP8=SYS
+Mcu.IP9=USART1
+Mcu.IPNb=11
+Mcu.Name=STM32WB55RGVx
+Mcu.Package=VFQFPN68
+Mcu.Pin0=PC13
+Mcu.Pin1=PC14-OSC32_IN
+Mcu.Pin10=PA11
+Mcu.Pin11=PA12
+Mcu.Pin12=PA13
+Mcu.Pin13=PA14
+Mcu.Pin14=PD0
+Mcu.Pin15=PD1
+Mcu.Pin16=PB3
+Mcu.Pin17=PB5
+Mcu.Pin18=PB6
+Mcu.Pin19=PB7
+Mcu.Pin2=PC15-OSC32_OUT
+Mcu.Pin20=VP_AES1_VS_AES
+Mcu.Pin21=VP_AES2_VS_AES
+Mcu.Pin22=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin23=VP_PKA_VS_PKA
+Mcu.Pin24=VP_RNG_VS_RNG
+Mcu.Pin25=VP_RTC_VS_RTC_Activate
+Mcu.Pin26=VP_SYS_VS_tim2
+Mcu.Pin27=VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+Mcu.Pin3=PA2
+Mcu.Pin4=PA3
+Mcu.Pin5=PC4
+Mcu.Pin6=OSC_OUT
+Mcu.Pin7=OSC_IN
+Mcu.Pin8=PB0
+Mcu.Pin9=PB1
+Mcu.PinsNb=28
+Mcu.ThirdParty0=wolfSSL.wolfSSL.4.4.1
+Mcu.ThirdPartyNb=1
+Mcu.UserConstants=
+Mcu.UserName=STM32WB55RGVx
+MxCube.Version=5.6.1
+MxDb.Version=DB.5.0.60
+NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.ForceEnableDMAVector=true
+NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
+NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
+NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
+NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
+NVIC.TimeBase=TIM2_IRQn
+NVIC.TimeBaseIP=TIM2
+NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+OSC_IN.Locked=true
+OSC_IN.Mode=HSE-External-Oscillator
+OSC_IN.Signal=RCC_OSC_IN
+OSC_OUT.Locked=true
+OSC_OUT.Mode=HSE-External-Oscillator
+OSC_OUT.Signal=RCC_OSC_OUT
+PA11.Locked=true
+PA11.Mode=Device
+PA11.Signal=USB_DM
+PA12.Locked=true
+PA12.Mode=Device
+PA12.Signal=USB_DP
+PA13.GPIOParameters=GPIO_Label
+PA13.GPIO_Label=JTMS
+PA13.Locked=true
+PA13.Mode=Trace_Asynchronous_SW
+PA13.Signal=SYS_JTMS-SWDIO
+PA14.GPIOParameters=GPIO_Label
+PA14.GPIO_Label=JTCK
+PA14.Locked=true
+PA14.Mode=Trace_Asynchronous_SW
+PA14.Signal=SYS_JTCK-SWCLK
+PA2.Locked=true
+PA2.Signal=LPUART1_TX
+PA3.Locked=true
+PA3.Signal=LPUART1_RX
+PB0.GPIOParameters=GPIO_Label
+PB0.GPIO_Label=LD2 [Green Led]
+PB0.Locked=true
+PB0.Signal=GPIO_Output
+PB1.GPIOParameters=GPIO_Label
+PB1.GPIO_Label=LD3 [Red Led]
+PB1.Locked=true
+PB1.Signal=GPIO_Output
+PB3.GPIOParameters=GPIO_Label
+PB3.GPIO_Label=JTDO
+PB3.Locked=true
+PB3.Mode=Trace_Asynchronous_SW
+PB3.Signal=SYS_JTDO-SWO
+PB5.GPIOParameters=GPIO_Label
+PB5.GPIO_Label=LD1 [Blue Led]
+PB5.Locked=true
+PB5.Signal=GPIO_Output
+PB6.Locked=true
+PB6.Mode=Asynchronous
+PB6.Signal=USART1_TX
+PB7.Locked=true
+PB7.Mode=Asynchronous
+PB7.Signal=USART1_RX
+PC13.Locked=true
+PC13.Mode=SYS_WakeUp1
+PC13.Signal=SYS_WKUP2
+PC14-OSC32_IN.Locked=true
+PC14-OSC32_IN.Mode=LSE-External-Oscillator
+PC14-OSC32_IN.Signal=RCC_OSC32_IN
+PC15-OSC32_OUT.Locked=true
+PC15-OSC32_OUT.Mode=LSE-External-Oscillator
+PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
+PC4.GPIOParameters=GPIO_Label
+PC4.GPIO_Label=B1 [Push Button]
+PC4.Locked=true
+PC4.Signal=GPIO_Input
+PCC.Ble.ConnectionInterval=1000.0
+PCC.Ble.DataLength=6
+PCC.Ble.Mode=NOT_SELECTED
+PCC.Ble.PowerLevel=Min
+PD0.GPIOParameters=GPIO_Label
+PD0.GPIO_Label=B2 [Push Button]
+PD0.Locked=true
+PD0.Signal=GPIO_Input
+PD1.GPIOParameters=GPIO_Label
+PD1.GPIO_Label=B3 [Push Button]
+PD1.Locked=true
+PD1.Signal=GPIO_Input
+PinOutPanel.RotationAngle=0
+ProjectManager.AskForMigrate=true
+ProjectManager.BackupPrevious=false
+ProjectManager.CompilerOptimize=6
+ProjectManager.ComputerToolchain=false
+ProjectManager.CoupleFile=false
+ProjectManager.CustomerFirmwarePackage=
+ProjectManager.DefaultFWLocation=true
+ProjectManager.DeletePrevious=true
+ProjectManager.DeviceId=STM32WB55RGVx
+ProjectManager.FirmwarePackage=STM32Cube FW_WB V1.7.0
+ProjectManager.FreePins=false
+ProjectManager.HalAssertFull=false
+ProjectManager.HeapSize=0x200
+ProjectManager.KeepUserCode=true
+ProjectManager.LastFirmware=true
+ProjectManager.LibraryCopy=1
+ProjectManager.MainLocation=Core/Src
+ProjectManager.NoMain=false
+ProjectManager.PreviousToolchain=
+ProjectManager.ProjectBuild=false
+ProjectManager.ProjectFileName=STM32WB55.ioc
+ProjectManager.ProjectName=STM32WB55
+ProjectManager.StackSize=0x400
+ProjectManager.TargetToolchain=STM32CubeIDE
+ProjectManager.ToolChainLocation=
+ProjectManager.UnderRoot=true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_USB_PCD_Init-USB-false-HAL-true,5-MX_AES1_Init-AES1-false-HAL-true,6-MX_AES2_Init-AES2-false-HAL-true,7-MX_PKA_Init-PKA-false-HAL-true,8-MX_RNG_Init-RNG-false-HAL-true,9-MX_RTC_Init-RTC-false-HAL-true
+RCC.ADCFreq_Value=48000000
+RCC.AHB2CLKDivider=RCC_SYSCLK_DIV2
+RCC.AHBFreq_Value=64000000
+RCC.APB1Freq_Value=64000000
+RCC.APB1TimFreq_Value=64000000
+RCC.APB2Freq_Value=64000000
+RCC.APB2TimFreq_Value=64000000
+RCC.APB3Freq_Value=16000000
+RCC.Cortex2Freq_Value=32000000
+RCC.CortexFreq_Value=64000000
+RCC.FCLK2Freq_Value=32000000
+RCC.FCLKCortexFreq_Value=64000000
+RCC.FamilyName=M
+RCC.HCLK2Freq_Value=32000000
+RCC.HCLK3Freq_Value=64000000
+RCC.HCLKFreq_Value=64000000
+RCC.HCLKRFFreq_Value=16000000
+RCC.HSE_VALUE=32000000
+RCC.HSI48_VALUE=48000000
+RCC.HSI_VALUE=16000000
+RCC.I2C1Freq_Value=64000000
+RCC.I2C3Freq_Value=64000000
+RCC.IPParameters=ADCFreq_Value,AHB2CLKDivider,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,APB3Freq_Value,Cortex2Freq_Value,CortexFreq_Value,FCLK2Freq_Value,FCLKCortexFreq_Value,FamilyName,HCLK2Freq_Value,HCLK3Freq_Value,HCLKFreq_Value,HCLKRFFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C3Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSAI1N,PLLSAI1PoutputFreq_Value,PLLSAI1QoutputFreq_Value,PLLSAI1RoutputFreq_Value,PWRFreq_Value,RNGFreq_Value,SAI1Freq_Value,SMPS1Freq_Value,SMPSCLockSelectionVirtual,SMPSCLockSelectionVirtualVirtual,SMPSDivider,SYSCLKFreq_VALUE,SYSCLKSource,USART1Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAI1OutputFreq_Value
+RCC.LPTIM1Freq_Value=64000000
+RCC.LPTIM2Freq_Value=64000000
+RCC.LPUART1Freq_Value=64000000
+RCC.LSCOPinFreq_Value=32000
+RCC.LSI_VALUE=32000
+RCC.MCO1PinFreq_Value=64000000
+RCC.PLLN=32
+RCC.PLLPoutputFreq_Value=64000000
+RCC.PLLQoutputFreq_Value=64000000
+RCC.PLLRCLKFreq_Value=64000000
+RCC.PLLSAI1N=24
+RCC.PLLSAI1PoutputFreq_Value=48000000
+RCC.PLLSAI1QoutputFreq_Value=48000000
+RCC.PLLSAI1RoutputFreq_Value=48000000
+RCC.PWRFreq_Value=64000000
+RCC.RNGFreq_Value=32000
+RCC.SAI1Freq_Value=48000000
+RCC.SMPS1Freq_Value=16000000
+RCC.SMPSCLockSelectionVirtual=RCC_SMPSCLKSOURCE_HSI
+RCC.SMPSCLockSelectionVirtualVirtual=RCC_SMPSCLKSOURCE_HSI
+RCC.SMPSDivider=1
+RCC.SYSCLKFreq_VALUE=64000000
+RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
+RCC.USART1Freq_Value=64000000
+RCC.USBFreq_Value=48000000
+RCC.VCOInputFreq_Value=4000000
+RCC.VCOOutputFreq_Value=128000000
+RCC.VCOSAI1OutputFreq_Value=96000000
+USART1.IPParameters=VirtualMode-Asynchronous
+USART1.VirtualMode-Asynchronous=VM_ASYNC
+VP_AES1_VS_AES.Mode=AES_Activate
+VP_AES1_VS_AES.Signal=AES1_VS_AES
+VP_AES2_VS_AES.Mode=AES_Activate
+VP_AES2_VS_AES.Signal=AES2_VS_AES
+VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
+VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
+VP_PKA_VS_PKA.Mode=PKA_Activate
+VP_PKA_VS_PKA.Signal=PKA_VS_PKA
+VP_RNG_VS_RNG.Mode=RNG_Activate
+VP_RNG_VS_RNG.Signal=RNG_VS_RNG
+VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
+VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
+VP_SYS_VS_tim2.Mode=TIM2
+VP_SYS_VS_tim2.Signal=SYS_VS_tim2
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Mode=wolfSSLJjwolfSSL
+VP_wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1.Signal=wolfSSL.wolfSSL_VS_wolfSSLJjwolfSSL_4.4.1
+board=P-NUCLEO-WB55-Nucleo
+boardIOC=true
+wolfSSL.wolfSSL.4.4.1.IPParameters=wolfSSLCcwolfSSLJjwolfSSLJjCore,wolfSSLCcwolfSSLJjwolfCryptJjCore,wolfSSLCcwolfSSLJjwolfCryptJjTest,WOLF_CONF_MATH,WOLF_CONF_RTOS
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_MATH=4
+wolfSSL.wolfSSL.4.4.1.WOLF_CONF_RTOS=2
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfCryptJjTest=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLCcwolfSSLJjwolfSSLJjCore=true
+wolfSSL.wolfSSL.4.4.1.wolfSSLJjwolfSSL_Checked=true
+wolfSSL.wolfSSL.4.4.1_SwParameter=wolfSSLCcwolfSSLJjwolfCryptJjCore\:true;wolfSSLCcwolfSSLJjwolfCryptJjTest\:true;wolfSSLCcwolfSSLJjwolfSSLJjCore\:true;
+isbadioc=false
diff --git a/IDE/STM32Cube/README.md b/IDE/STM32Cube/README.md
new file mode 100644
index 000000000..b2908002e
--- /dev/null
+++ b/IDE/STM32Cube/README.md
@@ -0,0 +1,63 @@
+# wolfSSL STM32 Example for STM32 Cube IDE
+
+This example includes:
+
+* wolfCrypt test
+* wolfCrypt benchmark
+* wolfSSL TLS client/server test using in-memory transfers
+
+These examples use the CubeMX Hal for STM32. If you'd like to use the older Standard Peripheral library undefine `WOLFSSL_STM32_CUBEMX` in `user_settings.h`.
+
+## Requirements
+
+* STM32CubeIDE: Integrated Development Environment for STM32 [https://www.st.com/en/development-tools/stm32cubeide.html](https://www.st.com/en/development-tools/stm32cubeide.html)
+
+## Setup
+
+1. Using the STM32CubeMX tool, load the `/IDE/STM32Cube/Boards/*.ioc` file for your target.
+2. Adjust the HAL options based on your specific micro-controller.
+3. Enable the security RNG/HASH/CRYPT if available.
+4. Enable the RTC and UART if available.
+5. Add wolfSSL via Additional Software and check/configure wolfSSL.
+6. Generate source code.
+
+## Configuration
+
+The settings for the wolfSTM32 project are located in `/IDE/STM32Cube/wolfSSL.wolfSSL_conf.h`. The section for hardware platform may need to be adjusted depending on your processor and board:
+
+* To enable STM32F2 support define `WOLFSSL_STM32F2`.
+* To enable STM32F4 support define `WOLFSSL_STM32F4`.
+* To enable STM32F7 support define `WOLFSSL_STM32F7`.
+* To enable STM32L4 support define `WOLFSSL_STM32L4`.
+* To enable STM32L5 support define `WOLFSSL_STM32L5`.
+* To enable STM32WB support define `WOLFSSL_STM32WB`.
+
+The L5 and WB55 support ECC PKA acceleration, which is enabled with `WOLFSSL_STM32_PKA`.
+
+To disable hardware crypto acceleration you can define:
+
+* `#define NO_STM32_HASH`
+* `#define NO_STM32_CRYPTO`
+
+To enable the latest CubeMX HAL support please use: `#define STM32_HAL_V2`
+
+If you are using FreeRTOS make sure your `FreeRTOSConfig.h` has its `configTOTAL_HEAP_SIZE` increased.
+
+The TLS client/server benchmark example requires about 76 KB for allocated tasks (with stack) and peak heap.
+
+## Example Output
+
+```
+....MENU
+
+.t. WolfCrypt Test
+.b. WolfCrypt Benchmark
+.l. WolfSSL TLS Bench
+.e. Show Cipher List
+
+Please select one of the above options:
+```
+
+## Support
+
+For questions please email [support@wolfssl.com](mailto:support@wolfssl.com)
diff --git a/IDE/STM32Cube/include.am b/IDE/STM32Cube/include.am
new file mode 100644
index 000000000..c9a65f052
--- /dev/null
+++ b/IDE/STM32Cube/include.am
@@ -0,0 +1,18 @@
+# vim:ft=automake
+# included from Top Level Makefile.am
+# All paths should be given relative to the root
+
+EXTRA_DIST+= IDE/STM32Cube/README.md
+EXTRA_DIST+= IDE/STM32Cube/main.c
+EXTRA_DIST+= IDE/STM32Cube/wolfssl_example.c
+EXTRA_DIST+= IDE/STM32Cube/wolfSSL.wolfSSL_conf.h
+EXTRA_DIST+= IDE/STM32Cube/wolfssl_example.h
+EXTRA_DIST+= IDE/STM32Cube/Boards/STM32F407.ioc
+EXTRA_DIST+= IDE/STM32Cube/Boards/STM32F437.ioc
+EXTRA_DIST+= IDE/STM32Cube/Boards/STM32F777.ioc
+EXTRA_DIST+= IDE/STM32Cube/Boards/STM32H753.ioc
+EXTRA_DIST+= IDE/STM32Cube/Boards/STM32L4A6.ioc
+EXTRA_DIST+= IDE/STM32Cube/Boards/STM32L475.ioc
+EXTRA_DIST+= IDE/STM32Cube/Boards/STM32L552.ioc
+EXTRA_DIST+= IDE/STM32Cube/Boards/STM32L562.ioc
+EXTRA_DIST+= IDE/STM32Cube/Boards/STM32WB55.ioc
diff --git a/IDE/STM32Cube/main.c b/IDE/STM32Cube/main.c
new file mode 100644
index 000000000..6c35e8f98
--- /dev/null
+++ b/IDE/STM32Cube/main.c
@@ -0,0 +1,366 @@
+/* main.c
+ *
+ * Copyright (C) 2006-2020 wolfSSL Inc.
+ *
+ * This file is part of wolfSSL.
+ *
+ * wolfSSL is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * wolfSSL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
+ */
+
+/* Example for main.c with STM32Cube/wolfssl_example.c */
+
+#if 0 /* EXAMPLE main.c */
+
+/* Includes ------------------------------------------------------------------*/
+#include "wolfssl_example.h"
+
+/* Private variables ---------------------------------------------------------*/
+CRYP_HandleTypeDef hcryp;
+__ALIGN_BEGIN static const uint32_t pKeyCRYP[6] __ALIGN_END = {
+ 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000};
+HASH_HandleTypeDef hhash;
+RNG_HandleTypeDef hrng;
+RTC_HandleTypeDef hrtc;
+UART_HandleTypeDef huart4;
+
+/* Definitions for defaultTask */
+#ifndef SINGLE_THREADED
+ #ifdef CMSIS_OS2_H_
+ osThreadId_t defaultTaskHandle;
+ const osThreadAttr_t wolfCryptDemo_attributes = {
+ .name = "wolfCryptDemo",
+ .priority = (osPriority_t) osPriorityNormal,
+ .stack_size = WOLF_EXAMPLES_STACK
+ };
+ #else
+ osThreadId defaultTaskHandle;
+ #endif
+#endif
+
+/* Private function prototypes -----------------------------------------------*/
+void SystemClock_Config(void);
+static void MX_GPIO_Init(void);
+static void MX_CRYP_Init(void);
+static void MX_HASH_Init(void);
+static void MX_RNG_Init(void);
+static void MX_UART4_Init(void);
+static void MX_RTC_Init(void);
+
+/* Retargets the C library printf function to the USART. */
+#include
+#ifdef __GNUC__
+int __io_putchar(int ch)
+#else
+int fputc(int ch, FILE *f)
+#endif
+{
+ HAL_UART_Transmit(&huart4, (uint8_t *)&ch, 1, 0xFFFF);
+
+ return ch;
+}
+#ifdef __GNUC__
+int _write(int file,char *ptr, int len)
+{
+ int DataIdx;
+ for (DataIdx= 0; DataIdx< len; DataIdx++) {
+ __io_putchar(*ptr++);
+ }
+ return len;
+}
+#endif
+
+int main(void)
+{
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ HAL_Init();
+
+ /* Turn off buffers, so I/O occurs immediately */
+ setvbuf(stdin, NULL, _IONBF, 0);
+ setvbuf(stdout, NULL, _IONBF, 0);
+ setvbuf(stderr, NULL, _IONBF, 0);
+
+ /* Configure the system clock */
+ SystemClock_Config();
+
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ MX_CRYP_Init();
+ MX_HASH_Init();
+ MX_RNG_Init();
+ MX_UART4_Init();
+ MX_RTC_Init();
+ MX_SPI1_Init();
+ MX_UART4_Init();
+
+#ifdef SINGLE_THREADED
+ wolfCryptDemo(NULL);
+#else
+ /* Init scheduler */
+ osKernelInitialize();
+
+ /* Create the thread(s) */
+ /* definition and creation of defaultTask */
+ #ifdef CMSIS_OS2_H_
+ defaultTaskHandle = osThreadNew(wolfCryptDemo, NULL, &wolfCryptDemo_attributes);
+ #else
+ osThreadDef(defaultTask, wolfCryptDemo, osPriorityNormal, 0, WOLF_EXAMPLES_STACK);
+ defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
+ #endif
+
+ /* Start scheduler */
+ osKernelStart();
+
+ /* We should never get here as control is now taken by the scheduler */
+
+ /* Infinite loop */
+ while (1) {}
+#endif /* SINGLE_THREADED */
+}
+
+/** System Clock Configuration
+*/
+static void SystemClock_Config(void)
+{
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
+
+ /** Configure the main internal regulator output voltage
+ */
+ __HAL_RCC_PWR_CLK_ENABLE();
+ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
+ /** Initializes the CPU, AHB and APB busses clocks
+ */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI;
+ RCC_OscInitStruct.HSIState = RCC_HSI_ON;
+ RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
+ RCC_OscInitStruct.LSIState = RCC_LSI_ON;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
+ RCC_OscInitStruct.PLL.PLLM = 8;
+ RCC_OscInitStruct.PLL.PLLN = 160;
+ RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
+ RCC_OscInitStruct.PLL.PLLQ = 7;
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
+ Error_Handler();
+ }
+ /** Initializes the CPU, AHB and APB busses 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_DIV4;
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
+ Error_Handler();
+ }
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
+ PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
+ Error_Handler();
+ }
+}
+
+/**
+ * @brief CRYP Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_CRYP_Init(void)
+{
+ hcryp.Instance = CRYP;
+ hcryp.Init.DataType = CRYP_DATATYPE_32B;
+ hcryp.Init.pKey = (uint32_t *)pKeyCRYP;
+ hcryp.Init.Algorithm = CRYP_TDES_ECB;
+ hcryp.Init.DataWidthUnit = CRYP_DATAWIDTHUNIT_WORD;
+ if (HAL_CRYP_Init(&hcryp) != HAL_OK) {
+ Error_Handler();
+ }
+}
+
+/**
+ * @brief HASH Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_HASH_Init(void)
+{
+ hhash.Init.DataType = HASH_DATATYPE_32B;
+ if (HAL_HASH_Init(&hhash) != HAL_OK) {
+ Error_Handler();
+ }
+}
+
+/**
+ * @brief RNG Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_RNG_Init(void)
+{
+ hrng.Instance = RNG;
+ if (HAL_RNG_Init(&hrng) != HAL_OK) {
+ Error_Handler();
+ }
+}
+
+/**
+ * @brief RTC Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_RTC_Init(void)
+{
+ RTC_TimeTypeDef sTime = {0};
+ RTC_DateTypeDef sDate = {0};
+
+ /* Initialize RTC Only */
+ hrtc.Instance = RTC;
+ hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
+ hrtc.Init.AsynchPrediv = 127;
+ hrtc.Init.SynchPrediv = 255;
+ hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
+ hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
+ hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
+ if (HAL_RTC_Init(&hrtc) != HAL_OK) {
+ Error_Handler();
+ }
+ /* Initialize RTC and set the Time and Date */
+ sTime.Hours = 0x0;
+ sTime.Minutes = 0x0;
+ sTime.Seconds = 0x0;
+ sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
+ sTime.StoreOperation = RTC_STOREOPERATION_RESET;
+ if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK) {
+ Error_Handler();
+ }
+ sDate.WeekDay = RTC_WEEKDAY_MONDAY;
+ sDate.Month = RTC_MONTH_JANUARY;
+ sDate.Date = 0x1;
+ sDate.Year = 0x0;
+
+ if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK) {
+ Error_Handler();
+ }
+}
+
+/**
+ * @brief UART4 Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_UART4_Init(void)
+{
+ huart4.Instance = UART4;
+ huart4.Init.BaudRate = 115200;
+ huart4.Init.WordLength = UART_WORDLENGTH_8B;
+ huart4.Init.StopBits = UART_STOPBITS_1;
+ huart4.Init.Parity = UART_PARITY_NONE;
+ huart4.Init.Mode = UART_MODE_TX_RX;
+ huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+ huart4.Init.OverSampling = UART_OVERSAMPLING_16;
+ if (HAL_UART_Init(&huart4) != HAL_OK) {
+ Error_Handler();
+ }
+}
+
+/**
+ * @brief GPIO Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_GPIO_Init(void)
+{
+ /* GPIO Ports Clock Enable */
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+}
+
+ /**
+ * @brief Period elapsed callback in non blocking mode
+ * @note This function is called when TIM1 interrupt took place, inside
+ * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
+ * a global variable "uwTick" used as application time base.
+ * @param htim : TIM handle
+ * @retval None
+ */
+void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
+{
+ if (htim->Instance == TIM1) {
+ HAL_IncTick();
+ }
+}
+
+/**
+ * @brief This function is executed in case of error occurrence.
+ * @retval None
+ */
+void Error_Handler(void)
+{
+ /* User can add his own implementation to report the HAL error return state */
+ while(1)
+ {
+ }
+}
+
+#ifdef USE_FULL_ASSERT
+/**
+ * @brief Reports the name of the source file and the source line number
+ * where the assert_param error has occurred.
+ * @param file: pointer to the source file name
+ * @param line: assert_param error line source number
+ * @retval None
+ */
+void assert_failed(uint8_t *file, uint32_t line)
+{
+ /* User can add his own implementation to report the file name and line number,
+ tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+}
+#endif /* USE_FULL_ASSERT */
+
+
+#if 0
+/* Working _sbrk example for .ld based libC malloc/free */
+/* Replace this with one in Core/Src/sysmem.c */
+/* Symbols defined in the linker script */
+extern uint8_t _end;
+extern uint8_t _estack;
+extern uint32_t _Min_Stack_Size;
+void* _sbrk(ptrdiff_t incr)
+{
+ static uint8_t* __sbrk_heap_end = NULL;
+ const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
+ const uint8_t* max_heap = (uint8_t *)stack_limit;
+ uint8_t* prev_heap_end;
+
+ /* Initialize heap end at first call */
+ if (__sbrk_heap_end == NULL) {
+ __sbrk_heap_end = &_end;
+ }
+
+ /* Protect heap from growing into the reserved MSP stack */
+ if (__sbrk_heap_end + incr > max_heap) {
+ errno = ENOMEM;
+ return (void *)-1;
+ }
+
+ prev_heap_end = __sbrk_heap_end;
+ __sbrk_heap_end += incr;
+
+ return (void*)prev_heap_end;
+}
+#endif
+
+#endif /* EXAMPLE main.c */
diff --git a/IDE/STM32Cube/wolfSSL.wolfSSL_conf.h b/IDE/STM32Cube/wolfSSL.wolfSSL_conf.h
new file mode 100644
index 000000000..063db0b5d
--- /dev/null
+++ b/IDE/STM32Cube/wolfSSL.wolfSSL_conf.h
@@ -0,0 +1,543 @@
+/* wolfSSL.wolfSSL_conf.h
+ *
+ * Copyright (C) 2006-2020 wolfSSL Inc.
+ *
+ * This file is part of wolfSSL.
+ *
+ * wolfSSL is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * wolfSSL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
+ */
+
+/* STM32 Cube Configuration File
+ * Included automatically when USE_HAL_DRIVER is defined
+ * (and not WOLFSSL_USER_SETTINGS or HAVE_CONF_H).
+ */
+
+#ifndef __WOLFSSL_WOLFSSL_CONF_H__
+#define __WOLFSSL_WOLFSSL_CONF_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*---------- Debug Support -----------*/
+#define WOLF_CONF_DEBUG 0
+
+/*---------- wolfCrypt Only -----------*/
+#define WOLF_CONF_WOLFCRYPT_ONLY 0
+
+/*---------- TLS v1.3 -----------*/
+#define WOLF_CONF_TLS13 1
+
+/*---------- TLS v1.2 -----------*/
+#define WOLF_CONF_TLS12 1
+
+/*---------- DTLS Support -----------*/
+#define WOLF_CONF_DTLS 0
+
+/*---------- Math Configuration -----------*/
+#define WOLF_CONF_MATH 4
+
+/*---------- RTOS -----------*/
+#define WOLF_CONF_RTOS 2
+
+/*---------- RSA Support -----------*/
+#define WOLF_CONF_RSA 1
+
+/*---------- ECC Support -----------*/
+#define WOLF_CONF_ECC 1
+
+/*---------- DH (Diffie–Hellman) Support -----------*/
+#define WOLF_CONF_DH 1
+
+/*---------- AES GCM Support -----------*/
+#define WOLF_CONF_AESGCM 1
+
+/*---------- AES CBC Support -----------*/
+#define WOLF_CONF_AESCBC 0
+
+/*---------- ChaCha20 / Poly1305 Support -----------*/
+#define WOLF_CONF_CHAPOLY 1
+
+/*---------- Ed25519 / Curve25519 Support -----------*/
+#define WOLF_CONF_EDCURVE25519 0
+
+/*---------- MD5 Support -----------*/
+#define WOLF_CONF_MD5 0
+
+/*---------- SHA1 Support -----------*/
+#define WOLF_CONF_SHA1 0
+
+/*---------- SHA2-224 Support -----------*/
+#define WOLF_CONF_SHA2_224 0
+
+/*---------- SHA2-256 Support -----------*/
+#define WOLF_CONF_SHA2_256 1
+
+/*---------- SHA2-384 Support -----------*/
+#define WOLF_CONF_SHA2_384 0
+
+/*---------- SHA2-512 Support -----------*/
+#define WOLF_CONF_SHA2_512 0
+
+/*---------- SHA3 Support -----------*/
+#define WOLF_CONF_SHA3 0
+
+/*---------- Pre-Shared-Key Support -----------*/
+#define WOLF_CONF_PSK 0
+
+/*---------- Pwd Based Key Derivation Support -----------*/
+#define WOLF_CONF_PWDBASED 0
+
+/*---------- Keep Peer Cert Support -----------*/
+#define WOLF_CONF_KEEP_PEER_CERT 0
+
+/*---------- Base64 Encode Support -----------*/
+#define WOLF_CONF_BASE64_ENCODE 0
+
+/*---------- OpenSSL Extra Support -----------*/
+#define WOLF_CONF_OPENSSL_EXTRA 0
+
+/*---------- wolfCrypt test/benchmark -----------*/
+#define WOLF_CONF_TEST 1
+
+
+/* ------------------------------------------------------------------------- */
+/* Hardware platform */
+/* ------------------------------------------------------------------------- */
+#define NO_STM32_HASH
+#define NO_STM32_CRYPTO
+
+#if defined(STM32WB55xx)
+ #define WOLFSSL_STM32WB
+ #define WOLFSSL_STM32_PKA
+ #undef NO_STM32_CRYPTO
+ #define HAL_CONSOLE_UART huart1
+#elif defined(STM32F407xx)
+ #define WOLFSSL_STM32F4
+ #define HAL_CONSOLE_UART huart2
+#elif defined(STM32F437xx)
+ #define WOLFSSL_STM32F4
+ #undef NO_STM32_HASH
+ #undef NO_STM32_CRYPTO
+ #define STM32_HAL_V2
+ #define HAL_CONSOLE_UART huart4
+#elif defined(STM32F777xx)
+ #define WOLFSSL_STM32F7
+ #undef NO_STM32_HASH
+ #undef NO_STM32_CRYPTO
+ #define STM32_HAL_V2
+ #define HAL_CONSOLE_UART huart2
+#elif defined(STM32H753xx)
+ #define WOLFSSL_STM32H7
+ #undef NO_STM32_HASH
+ #undef NO_STM32_CRYPTO
+ #define HAL_CONSOLE_UART huart3
+#elif defined(STM32L4A6xx)
+ #define WOLFSSL_STM32L4
+ #undef NO_STM32_HASH
+ #undef NO_STM32_CRYPTO
+ #define HAL_CONSOLE_UART hlpuart1
+#elif defined(STM32L475xx)
+ #define WOLFSSL_STM32L4
+ #define HAL_CONSOLE_UART huart1
+#elif defined(STM32L562xx)
+ #define WOLFSSL_STM32L5
+ #define WOLFSSL_STM32_PKA
+ #define HAL_CONSOLE_UART huart1
+#elif defined(STM32L552xx)
+ #define WOLFSSL_STM32L5
+ #undef NO_STM32_HASH
+ #define HAL_CONSOLE_UART hlpuart1
+#else
+ #warning Please define a hardware platform!
+ #define WOLFSSL_STM32F4 /* default */
+ #define HAL_CONSOLE_UART huart4
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* Platform */
+/* ------------------------------------------------------------------------- */
+#define SIZEOF_LONG_LONG 8
+#define WOLFSSL_GENERAL_ALIGNMENT 4
+#define WOLFSSL_STM32_CUBEMX
+#define WOLFSSL_SMALL_STACK
+#define WOLFSSL_USER_IO
+#define WOLFSSL_NO_SOCK
+#define WOLFSSL_IGNORE_FILE_WARN
+
+/* ------------------------------------------------------------------------- */
+/* Operating System */
+/* ------------------------------------------------------------------------- */
+#if defined(WOLF_CONF_RTOS) && WOLF_CONF_RTOS == 2
+ #define FREERTOS
+#else
+ #define SINGLE_THREADED
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* Math Configuration */
+/* ------------------------------------------------------------------------- */
+/* 1=Fast, 2=Normal, 3=SP C, 4=SP Cortex-M */
+#if defined(WOLF_CONF_MATH) && WOLF_CONF_MATH != 2
+ /* fast (stack) math */
+ #define USE_FAST_MATH
+ #define TFM_TIMING_RESISTANT
+
+ /* Optimizations (TFM_ARM, TFM_ASM or none) */
+ //#define TFM_NO_ASM
+ //#define TFM_ASM
+#endif
+#if defined(WOLF_CONF_MATH) && (WOLF_CONF_MATH == 3 || WOLF_CONF_MATH == 4)
+ /* single precision only */
+ #define WOLFSSL_SP
+ #define WOLFSSL_SP_SMALL /* use smaller version of code */
+ #define WOLFSSL_HAVE_SP_RSA
+ #define WOLFSSL_HAVE_SP_DH
+ #define WOLFSSL_HAVE_SP_ECC
+ #define WOLFSSL_SP_MATH
+ #define SP_WORD_SIZE 32
+
+ //#define WOLFSSL_SP_NO_MALLOC
+ //#define WOLFSSL_SP_CACHE_RESISTANT
+
+ /* single precision Cortex-M only */
+ #if WOLF_CONF_MATH == 4
+ #define WOLFSSL_SP_ASM /* required if using the ASM versions */
+ #define WOLFSSL_SP_ARM_CORTEX_M_ASM
+ #endif
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* Enable Features */
+/* ------------------------------------------------------------------------- */
+/* Required for TLS */
+#define HAVE_TLS_EXTENSIONS
+#define HAVE_SUPPORTED_CURVES
+#define HAVE_ENCRYPT_THEN_MAC
+#define HAVE_EXTENDED_MASTER
+
+#if defined(WOLF_CONF_TLS13) && WOLF_CONF_TLS13 == 1
+ #define WOLFSSL_TLS13
+ #define HAVE_HKDF
+#endif
+#if defined(WOLF_CONF_DTLS) && WOLF_CONF_DTLS == 1
+ #define WOLFSSL_DTLS
+#endif
+#if defined(WOLF_CONF_PSK) && WOLF_CONF_PSK == 0
+ #define NO_PSK
+#endif
+#if defined(WOLF_CONF_PWDBASED) && WOLF_CONF_PWDBASED == 0
+ #define NO_PWDBASED
+#endif
+#if defined(WOLF_CONF_KEEPPEERCERT) && WOLF_CONF_KEEPPEERCERT == 1
+ #define KEEP_PEER_CERT
+#endif
+#if defined(WOLF_CONF_BASE64_ENCODE) && WOLF_CONF_BASE64_ENCODE == 1
+ #define WOLFSSL_BASE64_ENCODE
+#endif
+#if defined(WOLF_CONF_OPENSSL_EXTRA) && WOLF_CONF_OPENSSL_EXTRA == 1
+ #define OPENSSL_EXTRA
+#endif
+
+/* TLS Session Cache */
+#if 0
+ #define SMALL_SESSION_CACHE
+#else
+ #define NO_SESSION_CACHE
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* Crypto */
+/* ------------------------------------------------------------------------- */
+/* RSA */
+#undef NO_RSA
+#if defined(WOLF_CONF_RSA) && WOLF_CONF_RSA == 1
+ #ifdef USE_FAST_MATH
+ /* Maximum math bits (Max RSA key bits * 2) */
+ #undef FP_MAX_BITS
+ #define FP_MAX_BITS 4096
+ #endif
+
+ /* half as much memory but twice as slow */
+ #undef RSA_LOW_MEM
+ //#define RSA_LOW_MEM
+
+ /* Enables blinding mode, to prevent timing attacks */
+ #undef WC_RSA_BLINDING
+ #define WC_RSA_BLINDING
+
+ /* RSA PSS Support (required for TLS v1.3) */
+ #ifdef WOLFSSL_TLS13
+ #define WC_RSA_PSS
+ #endif
+#else
+ #define NO_RSA
+#endif
+
+/* ECC */
+#undef HAVE_ECC
+#if defined(WOLF_CONF_ECC) && WOLF_CONF_ECC == 1
+ #define HAVE_ECC
+
+ /* Manually define enabled curves */
+ #define ECC_USER_CURVES
+
+ //#define HAVE_ECC192
+ //#define HAVE_ECC224
+ #undef NO_ECC256
+ //#define HAVE_ECC384
+ //#define HAVE_ECC521
+
+ /* Fixed point cache (speeds repeated operations against same private key) */
+ #undef FP_ECC
+ //#define FP_ECC
+ #ifdef FP_ECC
+ /* Bits / Entries */
+ #undef FP_ENTRIES
+ #define FP_ENTRIES 2
+ #undef FP_LUT
+ #define FP_LUT 4
+ #endif
+
+ /* Optional ECC calculation method */
+ /* Note: doubles heap usage, but slightly faster */
+ #undef ECC_SHAMIR
+ #define ECC_SHAMIR
+
+ /* Reduces heap usage, but slower */
+ #define ECC_TIMING_RESISTANT
+
+ /* Compressed ECC key support */
+ //#define HAVE_COMP_KEY
+
+ #ifdef USE_FAST_MATH
+ #ifdef NO_RSA
+ /* Custom fastmath size if not using RSA */
+ /* MAX = ROUND32(ECC BITS 256) + SIZE_OF_MP_DIGIT(32) */
+ #define FP_MAX_BITS (256 + 32)
+ #else
+ #define ALT_ECC_SIZE
+ #endif
+
+ /* Enable TFM optimizations for ECC */
+ //#define TFM_ECC192
+ //#define TFM_ECC224
+ #define TFM_ECC256
+ //#define TFM_ECC384
+ //#define TFM_ECC521
+ #endif
+#endif
+
+/* DH */
+#undef NO_DH
+#if defined(WOLF_CONF_DH) && WOLF_CONF_DH == 1
+ #define HAVE_DH /* freeRTOS settings.h requires this */
+ #define HAVE_FFDHE_2048
+ #define HAVE_DH_DEFAULT_PARAMS
+#else
+ #define NO_DH
+#endif
+
+/* AES */
+#if defined(WOLF_CONF_AESGCM) && WOLF_CONF_AESGCM == 1
+ #define HAVE_AESGCM
+ /* GCM Method: GCM_SMALL, GCM_WORD32 or GCM_TABLE */
+ /* GCM_TABLE is about 4K larger and 3x faster */
+ #define GCM_SMALL
+ #define HAVE_AES_DECRYPT
+#endif
+
+#if defined(WOLF_CONF_AESCBC) && WOLF_CONF_AESCBC == 1
+ #define HAVE_AES_CBC
+ #define HAVE_AES_DECRYPT
+#endif
+
+/* Other possible AES modes */
+//#define WOLFSSL_AES_COUNTER
+//#define HAVE_AESCCM
+//#define WOLFSSL_AES_XTS
+//#define WOLFSSL_AES_DIRECT
+//#define HAVE_AES_ECB
+
+/* ChaCha20 / Poly1305 */
+#undef HAVE_CHACHA
+#undef HAVE_POLY1305
+#if defined(WOLF_CONF_CHAPOLY) && WOLF_CONF_CHAPOLY == 1
+ #define HAVE_CHACHA
+ #define HAVE_POLY1305
+
+ /* Needed for Poly1305 */
+ #undef HAVE_ONE_TIME_AUTH
+ #define HAVE_ONE_TIME_AUTH
+#endif
+
+/* Ed25519 / Curve25519 */
+#undef HAVE_CURVE25519
+#undef HAVE_ED25519
+#if defined(WOLF_CONF_EDCURVE25519) && WOLF_CONF_EDCURVE25519 == 1
+ #define HAVE_CURVE25519
+ #define HAVE_ED25519
+
+ /* Optionally use small math (less flash usage, but much slower) */
+ #define CURVED25519_SMALL
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* Hashing */
+/* ------------------------------------------------------------------------- */
+/* Sha1 */
+#undef NO_SHA
+#if defined(WOLF_CONF_SHA1) && WOLF_CONF_SHA1 == 1
+ /* 1k smaller, but 25% slower */
+ //#define USE_SLOW_SHA
+#else
+ #define NO_SHA
+#endif
+
+/* Sha2-256 */
+#undef NO_SHA256
+#if defined(WOLF_CONF_SHA2_256) && WOLF_CONF_SHA2_256 == 1
+ /* not unrolled - ~2k smaller and ~25% slower */
+ //#define USE_SLOW_SHA256
+
+ //#define WOLFSSL_SHAKE256
+
+ /* Sha2-224 */
+ #if defined(WOLF_CONF_SHA2_224) && WOLF_CONF_SHA2_224 == 1
+ #define WOLFSSL_SHA224
+ #endif
+#else
+ #define NO_SHA256
+#endif
+
+/* Sha2-512 */
+#undef WOLFSSL_SHA512
+#if defined(WOLF_CONF_SHA2_512) && WOLF_CONF_SHA2_512 == 1
+ /* over twice as small, but 50% slower */
+ //#define USE_SLOW_SHA512
+
+ #define WOLFSSL_SHA512
+ #define HAVE_SHA512 /* freeRTOS settings.h requires this */
+#endif
+
+/* Sha2-384 */
+#undef WOLFSSL_SHA384
+#if defined(WOLF_CONF_SHA2_384) && WOLF_CONF_SHA2_384 == 1
+ #define WOLFSSL_SHA384
+#endif
+
+/* Sha3 */
+#undef WOLFSSL_SHA3
+#if defined(WOLF_CONF_SHA3) && WOLF_CONF_SHA3 == 1
+ #define WOLFSSL_SHA3
+#endif
+
+/* MD5 */
+#if defined(WOLF_CONF_MD5) && WOLF_CONF_MD5 == 1
+ /* enabled */
+#else
+ #define NO_MD5
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* Benchmark / Test */
+/* ------------------------------------------------------------------------- */
+/* Use reduced benchmark / test sizes */
+#define BENCH_EMBEDDED
+#define USE_CERT_BUFFERS_2048
+#define USE_CERT_BUFFERS_256
+
+/* ------------------------------------------------------------------------- */
+/* Debugging */
+/* ------------------------------------------------------------------------- */
+#if defined(WOLF_CONF_DEBUG) && WOLF_CONF_DEBUG == 1
+ #define DEBUG_WOLFSSL
+
+ /* Use this to measure / print heap usage */
+ #if 0
+ #define USE_WOLFSSL_MEMORY
+ #define WOLFSSL_TRACK_MEMORY
+ #define WOLFSSL_DEBUG_MEMORY
+ #define WOLFSSL_DEBUG_MEMORY_PRINT
+ #endif
+#else
+ //#define NO_WOLFSSL_MEMORY
+ //#define NO_ERROR_STRINGS
+#endif
+
+/* ------------------------------------------------------------------------- */
+/* Port */
+/* ------------------------------------------------------------------------- */
+
+/* Override Current Time */
+/* Allows custom "custom_time()" function to be used for benchmark */
+#define WOLFSSL_USER_CURRTIME
+
+/* ------------------------------------------------------------------------- */
+/* RNG */
+/* ------------------------------------------------------------------------- */
+#define NO_OLD_RNGNAME /* conflicts with STM RNG macro */
+#define HAVE_HASHDRBG
+
+/* ------------------------------------------------------------------------- */
+/* Disable Features */
+/* ------------------------------------------------------------------------- */
+#if defined(WOLF_CONF_TLS12) && WOLF_CONF_TLS12 == 0
+ #define WOLFSSL_NO_TLS12
+#endif
+#if defined(WOLF_CONF_WOLFCRYPT_ONLY) && WOLF_CONF_WOLFCRYPT_ONLY == 1
+ #define WOLFCRYPT_ONLY
+#endif
+//#define NO_WOLFSSL_SERVER
+//#define NO_WOLFSSL_CLIENT
+
+#if defined(WOLF_CONF_TEST) && WOLF_CONF_TEST == 0
+ #define NO_CRYPT_TEST
+ #define NO_CRYPT_BENCHMARK
+#endif
+
+#define NO_FILESYSTEM
+#define NO_WRITEV
+#define NO_MAIN_DRIVER
+#define NO_DEV_RANDOM
+#define NO_OLD_TLS
+#define WOLFSSL_NO_CLIENT_AUTH /* disable client auth for Ed25519/Ed448 */
+
+#define NO_DSA
+#define NO_RC4
+#define NO_HC128
+#define NO_RABBIT
+#define NO_MD4
+#define NO_DES3
+
+/* In-lining of misc.c functions */
+/* If defined, must include wolfcrypt/src/misc.c in build */
+/* Slower, but about 1k smaller */
+//#define NO_INLINE
+
+/* Base16 / Base64 encoding */
+//#define NO_CODING
+
+/* bypass certificate date checking, due to lack of properly configured RTC source */
+#ifndef HAL_RTC_MODULE_ENABLED
+ #define NO_ASN_TIME
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__WOLFSSL_WOLFSSL_CONF_H__ */
diff --git a/IDE/OPENSTM32/Src/wolfssl_example.c b/IDE/STM32Cube/wolfssl_example.c
similarity index 85%
rename from IDE/OPENSTM32/Src/wolfssl_example.c
rename to IDE/STM32Cube/wolfssl_example.c
index 72380803f..eead6fa24 100644
--- a/IDE/OPENSTM32/Src/wolfssl_example.c
+++ b/IDE/STM32Cube/wolfssl_example.c
@@ -30,12 +30,17 @@
#include /* WC_MAX_DIGEST_SIZE */
-#define WOLFSSL_DEBUG_MEMORY
-#ifdef WOLFSSL_DEBUG_MEMORY
-/* for memory debugging */
-#include
+#ifndef SINGLE_THREADED
+ #include
+
+ #ifdef WOLFSSL_DEBUG_MEMORY
+ /* for memory debugging */
+ #include
+ #endif
#endif
+#include
+#include
/*****************************************************************************
* Configuration
@@ -47,9 +52,18 @@
#define BENCH_RUNTIME_SEC 20
#define BENCH_SHOW_PEER_INFO 1
#define TEST_PACKET_SIZE (2 * 1024) /* TLS packet size */
+#ifdef BENCH_EMBEDDED
+#define TEST_MAX_SIZE (4 * 1024)
+#else
#define TEST_MAX_SIZE (32 * 1024) /* Total bytes to benchmark */
+#endif
/* Must be large enough to handle max packet size - TLS header MAX_MSG_EXTRA + MAX DIGEST */
#define MEM_BUFFER_SZ (TEST_PACKET_SIZE + 38 + WC_MAX_DIGEST_SIZE)
+/* make sure memory buffer size is large enough */
+#if MEM_BUFFER_SZ < 2048
+ #undef MEM_BUFFER_SZ
+ #define MEM_BUFFER_SZ 2048
+#endif
#define SHOW_VERBOSE 0 /* Default output is tab delimited format */
#ifndef WOLFSSL_CIPHER_LIST_MAX_SIZE
#define WOLFSSL_CIPHER_LIST_MAX_SIZE 2048
@@ -58,15 +72,41 @@
/* define this to test only a specific cipher suite(s) (colon separated) */
#define TEST_CIPHER_SUITE "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"
#endif
-
+#if 0
+ /* use non-blocking mode for read/write IO */
+ #define BENCH_USE_NONBLOCK
+#endif
/*****************************************************************************
* Private types/enumerations/variables
****************************************************************************/
+#ifdef WOLFSSL_STATIC_MEMORY
+ #if 1 /* on-chip RAM */
+ #define RAM_STATIC
+ #else /* external RAM */
+ /* requires .ld to be updated with ".extram" section */
+ #define RAM_STATIC __attribute__ ((section (".extram")))
+ #endif
+ #define WOLF_GEN_MEM (20*1024)
+ #define WOLF_TLS_GEN_MEM (90*1024)
+ #define WOLF_TLS_IO_POOL_MEM (35*1024)
+
+ RAM_STATIC static byte gWolfMem[WOLF_GEN_MEM];
+ RAM_STATIC static byte gWolfCTXCli[WOLF_TLS_GEN_MEM];
+ RAM_STATIC static byte gWolfIOCli[WOLF_TLS_IO_POOL_MEM];
+ RAM_STATIC static byte gWolfCTXSrv[WOLF_TLS_GEN_MEM];
+ RAM_STATIC static byte gWolfIOSrv[WOLF_TLS_IO_POOL_MEM];
+
+ WOLFSSL_HEAP_HINT* HEAP_HINT = NULL;
+#endif /* WOLFSSL_STATIC_MEMORY */
+
+
/* UART definitions */
-extern UART_HandleTypeDef huart4;
-extern SPI_HandleTypeDef hspi1;
+#ifndef HAL_CONSOLE_UART
+#define HAL_CONSOLE_UART huart4
+#endif
+extern UART_HandleTypeDef HAL_CONSOLE_UART;
/*****************************************************************************
* Public types/enumerations/variables
@@ -77,16 +117,20 @@ typedef struct func_args {
int return_code;
} func_args;
-const char menu1[] = "\r\n"
- "\tt. WolfCrypt Test\r\n"
- "\tb. WolfCrypt Benchmark\r\n"
- "\tl. WolfSSL TLS Bench\r\n"
- "\te. Show Cipher List\r\n";
+const char menu1[] = "\n"
+ "\tt. WolfCrypt Test\n"
+ "\tb. WolfCrypt Benchmark\n"
+ "\tl. WolfSSL TLS Bench\n"
+ "\te. Show Cipher List\n";
+
+static void PrintMemStats(void);
+double current_time(void);
-static const char* kShutdown = "shutdown";
#if (!defined(NO_WOLFSSL_CLIENT) || !defined(NO_WOLFSSL_SERVER)) && \
- !defined(WOLFCRYPT_ONLY)
+ !defined(WOLFCRYPT_ONLY) && !defined(SINGLE_THREADED)
+
+static const char* kShutdown = "shutdown";
static const char* kTestStr =
"Biodiesel cupidatat marfa, cliche aute put a bird on it incididunt elit\n"
@@ -220,10 +264,14 @@ typedef struct {
typedef struct {
int ret;
- osThreadDef_t threadDef;
osThreadId threadId;
+#ifdef CMSIS_OS2_H_
+ osSemaphoreId_t mutex;
+#else
+ osThreadDef_t threadDef;
osSemaphoreDef_t mutexDef;
osSemaphoreId mutex;
+#endif
byte shutdown:1;
byte done:1;
@@ -257,30 +305,14 @@ typedef struct {
} info_t;
-extern RTC_HandleTypeDef hrtc;
-double current_time(void)
-{
- RTC_TimeTypeDef time;
- RTC_DateTypeDef date;
- uint32_t subsec;
-
- /* must get time and date here due to STM32 HW bug */
- HAL_RTC_GetTime(&hrtc, &time, FORMAT_BIN);
- HAL_RTC_GetDate(&hrtc, &date, FORMAT_BIN);
- subsec = (255 - time.SubSeconds) * 1000 / 255;
-
- (void) date;
-
- /* return seconds.milliseconds */
- return ((double) time.Hours * 24) + ((double) time.Minutes * 60)
- + (double) time.Seconds + ((double) subsec / 1000);
-}
+/*****************************************************************************
+ * Private functions
+ ****************************************************************************/
static double gettime_secs(int reset)
{
return current_time();
}
-
static void PrintTlsStats(stats_t* wcStat, const char* desc, const char* cipher, int verbose)
{
const char* formatStr;
@@ -313,30 +345,6 @@ static void PrintTlsStats(stats_t* wcStat, const char* desc, const char* cipher,
wcStat->connTime * 1000 / wcStat->connCount);
}
-static void ShowCiphers(void)
-{
- int ret;
- char* ciphers = (char*)XMALLOC(WOLFSSL_CIPHER_LIST_MAX_SIZE, NULL,
- DYNAMIC_TYPE_TMP_BUFFER);
- if (ciphers) {
- ret = wolfSSL_get_ciphers(ciphers, WOLFSSL_CIPHER_LIST_MAX_SIZE);
- if (ret == WOLFSSL_SUCCESS)
- printf("%s\n", ciphers);
- XFREE(ciphers, NULL, DYNAMIC_TYPE_TMP_BUFFER);
- }
-}
-
-
-static void PrintMemStats(void)
-{
-#ifdef WOLFSSL_DEBUG_MEMORY
- printf("\nHeap MinEver %d, Free %d, Stack %lu\n",
- xPortGetMinimumEverFreeHeapSize(),
- xPortGetFreeHeapSize(),
- uxTaskGetStackHighWaterMark(NULL));
-#endif
-}
-
#if defined(KEEP_PEER_CERT) || defined(KEEP_OUR_CERT)
static const char* client_showx509_msg[] = {
@@ -481,7 +489,11 @@ static void ShowPeer(WOLFSSL* ssl)
/* server send callback */
static int ServerMemSend(info_t* info, char* buf, int sz)
{
+#ifdef CMSIS_OS2_H_
+ osSemaphoreAcquire(info->client.mutex, osWaitForever);
+#else
osSemaphoreWait(info->client.mutex, osWaitForever);
+#endif
#ifndef BENCH_USE_NONBLOCK
/* check for overflow */
@@ -499,7 +511,11 @@ static int ServerMemSend(info_t* info, char* buf, int sz)
info->to_client.write_idx += sz;
info->to_client.write_bytes += sz;
+#ifdef CMSIS_OS2_H_
+ osThreadFlagsSet(info->client.threadId, 1);
+#else
osSignalSet(info->client.threadId, 1);
+#endif
osSemaphoreRelease(info->client.mutex);
#ifdef BENCH_USE_NONBLOCK
@@ -512,14 +528,23 @@ static int ServerMemSend(info_t* info, char* buf, int sz)
/* server recv callback */
static int ServerMemRecv(info_t* info, char* buf, int sz)
{
+#ifdef CMSIS_OS2_H_
+ osSemaphoreAcquire(info->server.mutex, osWaitForever);
+#else
osSemaphoreWait(info->server.mutex, osWaitForever);
+#endif
#ifndef BENCH_USE_NONBLOCK
while (info->to_server.write_idx - info->to_server.read_idx < sz &&
!info->client.done) {
osSemaphoreRelease(info->server.mutex);
+#ifdef CMSIS_OS2_H_
+ osThreadFlagsWait(1, osFlagsWaitAny, osWaitForever);
+ osSemaphoreAcquire(info->server.mutex, osWaitForever);
+#else
osSignalWait(1, osWaitForever);
osSemaphoreWait(info->server.mutex, osWaitForever);
+#endif
}
#else
if (info->to_server.write_idx - info->to_server.read_idx < sz)
@@ -548,7 +573,11 @@ static int ServerMemRecv(info_t* info, char* buf, int sz)
/* client send callback */
static int ClientMemSend(info_t* info, char* buf, int sz)
{
+#ifdef CMSIS_OS2_H_
+ osSemaphoreAcquire(info->server.mutex, osWaitForever);
+#else
osSemaphoreWait(info->server.mutex, osWaitForever);
+#endif
#ifndef BENCH_USE_NONBLOCK
/* check for overflow */
@@ -567,7 +596,11 @@ static int ClientMemSend(info_t* info, char* buf, int sz)
info->to_server.write_idx += sz;
info->to_server.write_bytes += sz;
+#ifdef CMSIS_OS2_H_
+ osThreadFlagsSet(info->server.threadId, 1);
+#else
osSignalSet(info->server.threadId, 1);
+#endif
osSemaphoreRelease(info->server.mutex);
#ifdef BENCH_USE_NONBLOCK
@@ -580,14 +613,23 @@ static int ClientMemSend(info_t* info, char* buf, int sz)
/* client recv callback */
static int ClientMemRecv(info_t* info, char* buf, int sz)
{
+#ifdef CMSIS_OS2_H_
+ osSemaphoreAcquire(info->client.mutex, osWaitForever);
+#else
osSemaphoreWait(info->client.mutex, osWaitForever);
+#endif
#ifndef BENCH_USE_NONBLOCK
while (info->to_client.write_idx - info->to_client.read_idx < sz &&
!info->server.done) {
osSemaphoreRelease(info->client.mutex);
+#ifdef CMSIS_OS2_H_
+ osThreadFlagsWait(1, osFlagsWaitAny, osWaitForever);
+ osSemaphoreAcquire(info->client.mutex, osWaitForever);
+#else
osSignalWait(1, osWaitForever);
osSemaphoreWait(info->client.mutex, osWaitForever);
+#endif
}
#else
if (info->to_client.write_idx - info->to_client.read_idx < sz)
@@ -645,7 +687,7 @@ static int bench_tls_client(info_t* info)
{
byte *writeBuf = NULL, *readBuf = NULL;
double start, total = 0;
- int ret, readBufSz;
+ int ret = 0, readBufSz;
WOLFSSL_CTX* cli_ctx = NULL;
WOLFSSL* cli_ssl = NULL;
int haveShownPeerInfo = 0;
@@ -656,21 +698,43 @@ static int bench_tls_client(info_t* info)
/* set up client */
#ifdef WOLFSSL_TLS13
- if (tls13)
+ if (tls13) {
+ #ifdef WOLFSSL_STATIC_MEMORY
+ ret = wolfSSL_CTX_load_static_memory(&cli_ctx, wolfTLSv1_3_client_method_ex,
+ gWolfCTXCli, sizeof(gWolfCTXCli), WOLFMEM_GENERAL , 10);
+ #else
cli_ctx = wolfSSL_CTX_new(wolfTLSv1_3_client_method());
+ #endif
+ }
#endif
- if (!tls13)
+ if (!tls13) {
#if !defined(WOLFSSL_TLS13)
+ #ifdef WOLFSSL_STATIC_MEMORY
+ ret = wolfSSL_CTX_load_static_memory(&cli_ctx, wolfSSLv23_client_method_ex,
+ gWolfCTXCli, sizeof(gWolfCTXCli), WOLFMEM_GENERAL , 10);
+ #else
cli_ctx = wolfSSL_CTX_new(wolfSSLv23_client_method());
+ #endif
#elif !defined(WOLFSSL_NO_TLS12)
+ #ifdef WOLFSSL_STATIC_MEMORY
+ ret = wolfSSL_CTX_load_static_memory(&cli_ctx, wolfTLSv1_2_client_method_ex,
+ gWolfCTXCli, sizeof(gWolfCTXCli), WOLFMEM_GENERAL , 10);
+ #else
cli_ctx = wolfSSL_CTX_new(wolfTLSv1_2_client_method());
+ #endif
#endif
+ }
- if (cli_ctx == NULL) {
- printf("error creating ctx\n");
+ if (cli_ctx == NULL || ret != 0) {
+ printf("error creating ctx: ret %d\n", ret);
ret = MEMORY_E; goto exit;
}
+#ifdef WOLFSSL_STATIC_MEMORY
+ ret = wolfSSL_CTX_load_static_memory(&cli_ctx, 0, gWolfIOCli, sizeof(gWolfIOCli),
+ WOLFMEM_IO_POOL, 10 );
+#endif
+
#ifndef NO_CERTS
#ifdef HAVE_ECC
if (XSTRSTR(info->cipher, "ECDSA")) {
@@ -733,7 +797,7 @@ static int bench_tls_client(info_t* info)
cli_ssl = wolfSSL_new(cli_ctx);
if (cli_ssl == NULL) {
printf("error creating client object\n");
- goto exit;
+ ret = MEMORY_E; goto exit;
}
wolfSSL_SetIOReadCtx(cli_ssl, info);
@@ -846,6 +910,7 @@ static int bench_tls_client(info_t* info)
exit:
if (ret != 0 && ret != WOLFSSL_SUCCESS) {
+ info->doShutdown = 1;
printf("Client Error: %d (%s)\n", ret,
wolfSSL_ERR_reason_error_string(ret));
}
@@ -862,7 +927,11 @@ exit:
return ret;
}
+#ifdef CMSIS_OS2_H_
+static void client_thread(void* args)
+#else
static void client_thread(const void* args)
+#endif
{
int ret;
info_t* info = (info_t*)args;
@@ -871,8 +940,13 @@ static void client_thread(const void* args)
ret = bench_tls_client(info);
/* signal server */
- if (!info->server.done && info->server.threadId != 0)
+ if (!info->server.done && info->server.threadId != 0) {
+#ifdef CMSIS_OS2_H_
+ osThreadFlagsSet(info->server.threadId, 1);
+#else
osSignalSet(info->server.threadId, 1);
+#endif
+ }
info->client.ret = ret;
info->client.done = 1;
osThreadSuspend(NULL);
@@ -888,7 +962,7 @@ static int bench_tls_server(info_t* info)
{
byte *readBuf = NULL;
double start;
- int ret, len = 0, readBufSz;
+ int ret = 0, len = 0, readBufSz;
WOLFSSL_CTX* srv_ctx = NULL;
WOLFSSL* srv_ssl = NULL;
int tls13 = XSTRNCMP(info->cipher, "TLS13", 5) == 0;
@@ -896,16 +970,43 @@ static int bench_tls_server(info_t* info)
/* set up server */
#ifdef WOLFSSL_TLS13
- if (tls13)
- srv_ctx = wolfSSL_CTX_new(wolfTLSv1_3_server_method());
+ if (tls13) {
+ #ifdef WOLFSSL_STATIC_MEMORY
+ ret = wolfSSL_CTX_load_static_memory(&srv_ctx, wolfTLSv1_3_server_method_ex,
+ gWolfCTXSrv, sizeof(gWolfCTXSrv), WOLFMEM_GENERAL , 10);
+ #else
+ srv_ctx = wolfSSL_CTX_new(wolfTLSv1_3_server_method());
+ #endif
+ }
#endif
- if (!tls13)
- srv_ctx = wolfSSL_CTX_new(wolfSSLv23_server_method());
- if (srv_ctx == NULL) {
- printf("error creating server ctx\n");
+ if (!tls13) {
+#if !defined(WOLFSSL_TLS13)
+ #ifdef WOLFSSL_STATIC_MEMORY
+ ret = wolfSSL_CTX_load_static_memory(&srv_ctx, wolfSSLv23_server_method_ex,
+ gWolfCTXSrv, sizeof(gWolfCTXSrv), WOLFMEM_GENERAL , 10);
+ #else
+ srv_ctx = wolfSSL_CTX_new(wolfSSLv23_server_method());
+ #endif
+#elif !defined(WOLFSSL_NO_TLS12)
+ #ifdef WOLFSSL_STATIC_MEMORY
+ ret = wolfSSL_CTX_load_static_memory(&srv_ctx, wolfTLSv1_2_server_method_ex,
+ gWolfCTXSrv, sizeof(gWolfCTXSrv), WOLFMEM_GENERAL , 10);
+ #else
+ srv_ctx = wolfSSL_CTX_new(wolfTLSv1_2_server_method());
+ #endif
+#endif
+ }
+
+ if (srv_ctx == NULL || ret != 0) {
+ printf("error creating server ctx: ret %d\n", ret);
ret = MEMORY_E; goto exit;
}
+#ifdef WOLFSSL_STATIC_MEMORY
+ ret = wolfSSL_CTX_load_static_memory(&srv_ctx, 0, gWolfIOSrv, sizeof(gWolfIOSrv),
+ WOLFMEM_IO_POOL, 10 );
+#endif
+
#ifndef NO_CERTS
#ifdef HAVE_ECC
if (XSTRSTR(info->cipher, "ECDSA")) {
@@ -1081,6 +1182,7 @@ static int bench_tls_server(info_t* info)
exit:
if (ret != 0 && ret != WOLFSSL_SUCCESS) {
+ info->doShutdown = 1;
printf("Server Error: %d (%s)\n", ret,
wolfSSL_ERR_reason_error_string(ret));
}
@@ -1096,7 +1198,11 @@ exit:
return ret;
}
+#ifdef CMSIS_OS2_H_
+static void server_thread(void* args)
+#else
static void server_thread(const void* args)
+#endif
{
int ret;
info_t* info = (info_t*)args;
@@ -1105,8 +1211,13 @@ static void server_thread(const void* args)
ret = bench_tls_server(info);
/* signal client */
- if (!info->client.done && info->client.threadId != 0)
+ if (!info->client.done && info->client.threadId != 0) {
+#ifdef CMSIS_OS2_H_
+ osThreadFlagsSet(info->client.threadId, 1);
+#else
osSignalSet(info->client.threadId, 1);
+#endif
+ }
info->server.ret = ret;
info->server.done = 1;
osThreadSuspend(NULL);
@@ -1118,6 +1229,19 @@ static void server_thread(const void* args)
osThreadTerminate(info->server.threadId);
}
+#ifdef CMSIS_OS2_H_
+static const osThreadAttr_t server_thread_attributes = {
+ .name = "server_thread",
+ .priority = (osPriority_t) osPriorityNormal,
+ .stack_size = WOLF_EXAMPLES_STACK
+};
+static const osThreadAttr_t client_thread_attributes = {
+ .name = "client_thread",
+ .priority = (osPriority_t) osPriorityNormal,
+ .stack_size = WOLF_EXAMPLES_STACK
+};
+#endif
+
int bench_tls(void* args)
{
int ret = 0;
@@ -1170,6 +1294,10 @@ int bench_tls(void* args)
info->showPeerInfo = argShowPeerInfo;
info->showVerbose = argShowVerbose;
+#ifdef CMSIS_OS2_H_
+ info->server.mutex = osSemaphoreNew(1, 0, NULL);
+ info->client.mutex = osSemaphoreNew(1, 0, NULL);
+#else
info->server.mutex = osSemaphoreCreate(&info->server.mutexDef, 1);
info->client.mutex = osSemaphoreCreate(&info->client.mutexDef, 1);
@@ -1183,6 +1311,7 @@ int bench_tls(void* args)
info->client.threadDef.pthread = client_thread;
info->client.threadDef.tpriority = osPriorityNormal;
info->client.threadDef.stacksize = WOLF_EXAMPLES_STACK;
+#endif
/* parse by : */
while ((cipher != NULL) && (cipher[0] != '\0')) {
@@ -1213,13 +1342,21 @@ int bench_tls(void* args)
/* start threads */
if (info->server.threadId == 0) {
+#ifdef CMSIS_OS2_H_
+ info->server.threadId = osThreadNew(server_thread, info, &server_thread_attributes);
+#else
info->server.threadId = osThreadCreate(&info->server.threadDef, info);
+#endif
}
else {
osThreadResume(info->server.threadId);
}
if (info->client.threadId == 0) {
+#ifdef CMSIS_OS2_H_
+ info->client.threadId = osThreadNew(client_thread, info, &client_thread_attributes);
+#else
info->client.threadId = osThreadCreate(&info->client.threadDef, info);
+#endif
}
else {
osThreadResume(info->client.threadId);
@@ -1277,19 +1414,84 @@ exit:
return ret;
}
-#endif /* (!NO_WOLFSSL_CLIENT || !NO_WOLFSSL_SERVER) && !WOLFCRYPT_ONLY */
+#endif /* (!NO_WOLFSSL_CLIENT || !NO_WOLFSSL_SERVER) && !WOLFCRYPT_ONLY && !SINGLE_THREADED */
-/*****************************************************************************
- * Private functions
- ****************************************************************************/
+#ifndef WOLFCRYPT_ONLY
+static void ShowCiphers(void)
+{
+ int ret;
+ char* ciphers = (char*)XMALLOC(WOLFSSL_CIPHER_LIST_MAX_SIZE, NULL,
+ DYNAMIC_TYPE_TMP_BUFFER);
+ if (ciphers) {
+ ret = wolfSSL_get_ciphers(ciphers, WOLFSSL_CIPHER_LIST_MAX_SIZE);
+ if (ret == WOLFSSL_SUCCESS)
+ printf("%s\n", ciphers);
+ XFREE(ciphers, NULL, DYNAMIC_TYPE_TMP_BUFFER);
+ }
+}
+#endif
+
+static void PrintMemStats(void)
+{
+#ifdef WOLFSSL_DEBUG_MEMORY
+ printf("\nHeap MinEver %d, Free %d, Stack %lu\n",
+ xPortGetMinimumEverFreeHeapSize(),
+ xPortGetFreeHeapSize(),
+ uxTaskGetStackHighWaterMark(NULL));
+#endif
+}
+
+#if 0
+static void* wolfMallocCb(size_t size)
+{
+ void* ptr = malloc(size);
+ if (ptr == NULL) {
+ printf("BREAK!\n");
+ }
+ return ptr;
+}
+static void wolfFreeCb(void *ptr)
+{
+ free(ptr);
+}
+static void* wolfReallocCb(void *ptr, size_t size)
+{
+ return realloc(ptr, size);
+}
+#endif
/*****************************************************************************
* Public functions
****************************************************************************/
+#ifdef HAL_RTC_MODULE_ENABLED
+extern RTC_HandleTypeDef hrtc;
+double current_time(void)
+{
+ RTC_TimeTypeDef time;
+ RTC_DateTypeDef date;
+ uint32_t subsec;
+
+ /* must get time and date here due to STM32 HW bug */
+ HAL_RTC_GetTime(&hrtc, &time, FORMAT_BIN);
+ HAL_RTC_GetDate(&hrtc, &date, FORMAT_BIN);
+ subsec = (255 - time.SubSeconds) * 1000 / 255;
+
+ (void) date;
+
+ /* return seconds.milliseconds */
+ return ((double) time.Hours * 24) + ((double) time.Minutes * 60)
+ + (double) time.Seconds + ((double) subsec / 1000);
+}
+#endif /* HAL_RTC_MODULE_ENABLED */
+
+#ifdef CMSIS_OS2_H_
+void wolfCryptDemo(void* argument)
+#else
void wolfCryptDemo(const void* argument)
+#endif
{
HAL_StatusTypeDef halRet;
- uint8_t buffer[1]; /* single char */
+ uint8_t buffer[2];
func_args args;
#ifdef DEBUG_WOLFSSL
@@ -1297,18 +1499,31 @@ void wolfCryptDemo(const void* argument)
#endif
/* initialize wolfSSL */
+#ifdef WOLFCRYPT_ONLY
+ wolfCrypt_Init();
+#else
wolfSSL_Init();
+#endif
+
+#ifdef WOLFSSL_STATIC_MEMORY
+ if (wc_LoadStaticMemory(&HEAP_HINT, gWolfMem, sizeof(gWolfMem),
+ WOLFMEM_GENERAL, 10) != 0) {
+ printf("unable to load static memory");
+ }
+#endif
+
+ //wolfSSL_SetAllocators(wolfMallocCb, wolfFreeCb, wolfReallocCb);
while (1) {
memset(&args, 0, sizeof(args));
args.return_code = NOT_COMPILED_IN; /* default */
- printf("\r\n\t\t\t\tMENU\r\n");
+ printf("\n\t\t\t\tMENU\n");
printf(menu1);
printf("Please select one of the above options:\n");
do {
- halRet = HAL_UART_Receive(&huart4, buffer, sizeof(buffer), 100);
+ halRet = HAL_UART_Receive(&HAL_CONSOLE_UART, buffer, sizeof(buffer), 100);
} while (halRet != HAL_OK || buffer[0] == '\n' || buffer[0] == '\r');
switch (buffer[0]) {
@@ -1317,6 +1532,8 @@ void wolfCryptDemo(const void* argument)
#ifndef NO_CRYPT_TEST
args.return_code = 0;
wolfcrypt_test(&args);
+ #else
+ args.return_code = NOT_COMPILED_IN;
#endif
printf("Crypt Test: Return code %d\n", args.return_code);
break;
@@ -1326,30 +1543,42 @@ void wolfCryptDemo(const void* argument)
#ifndef NO_CRYPT_BENCHMARK
args.return_code = 0;
benchmark_test(&args);
+ #else
+ args.return_code = NOT_COMPILED_IN;
#endif
printf("Benchmark Test: Return code %d\n", args.return_code);
break;
case 'l':
printf("Running TLS Benchmarks...\n");
- #if (!defined(NO_WOLFSSL_CLIENT) || !defined(NO_WOLFSSL_SERVER)) && !defined(WOLFCRYPT_ONLY)
+ #if (!defined(NO_WOLFSSL_CLIENT) || !defined(NO_WOLFSSL_SERVER)) && !defined(WOLFCRYPT_ONLY) && !defined(SINGLE_THREADED)
bench_tls(&args);
+ #else
+ args.return_code = NOT_COMPILED_IN;
#endif
printf("TLS Benchmarks: Return code %d\n", args.return_code);
break;
case 'e':
+ #ifndef WOLFCRYPT_ONLY
ShowCiphers();
+ #else
+ printf("Not compiled in\n");
+ #endif
break;
// All other cases go here
default:
- printf("\r\nSelection out of range\r\n");
+ printf("\nSelection out of range\n");
break;
}
PrintMemStats();
}
+#ifdef WOLFCRYPT_ONLY
+ wolfCrypt_Cleanup();
+#else
wolfSSL_Cleanup();
+#endif
}
diff --git a/IDE/OPENSTM32/Inc/wolfssl_example.h b/IDE/STM32Cube/wolfssl_example.h
similarity index 90%
rename from IDE/OPENSTM32/Inc/wolfssl_example.h
rename to IDE/STM32Cube/wolfssl_example.h
index c97e2dd84..f43884d87 100644
--- a/IDE/OPENSTM32/Inc/wolfssl_example.h
+++ b/IDE/STM32Cube/wolfssl_example.h
@@ -22,10 +22,6 @@
#ifndef WOLFSSL_EXAMPLE_H_
#define WOLFSSL_EXAMPLE_H_
-#include
-#include
-#include
-
#ifdef HAVE_CONFIG_H
#include
#endif
@@ -39,11 +35,18 @@
#include
#include
-#ifndef WOLF_EXAMPLES_STACK
-#define WOLF_EXAMPLES_STACK (30 * configMINIMAL_STACK_SIZE)
+#ifndef SINGLE_THREADED
+#include
#endif
-void wolfCryptDemo(void const * argument);
+#ifndef WOLF_EXAMPLES_STACK
+#define WOLF_EXAMPLES_STACK (30*1024)
+#endif
+#ifdef CMSIS_OS2_H_
+void wolfCryptDemo(void* argument);
+#else
+void wolfCryptDemo(void const * argument);
+#endif
#endif /* WOLFSSL_EXAMPLE_H_ */
diff --git a/IDE/include.am b/IDE/include.am
index 828b173ad..ec75c5ffd 100644
--- a/IDE/include.am
+++ b/IDE/include.am
@@ -12,7 +12,7 @@ include IDE/ROWLEY-CROSSWORKS-ARM/include.am
include IDE/TRUESTUDIO/include.am
include IDE/ARDUINO/include.am
include IDE/INTIME-RTOS/include.am
-include IDE/OPENSTM32/include.am
+include IDE/STM32Cube/include.am
include IDE/VS-ARM/include.am
include IDE/VS-AZURE-SPHERE/include.am
include IDE/GCC-ARM/include.am
diff --git a/sslSniffer/sslSnifferTest/snifftest.c b/sslSniffer/sslSnifferTest/snifftest.c
index 1b4292af1..f8873962b 100644
--- a/sslSniffer/sslSnifferTest/snifftest.c
+++ b/sslSniffer/sslSnifferTest/snifftest.c
@@ -35,7 +35,7 @@
#endif
#ifndef WOLFSSL_SNIFFER
-
+#ifndef NO_MAIN_DRIVER
/* blank build */
#include
#include
@@ -44,7 +44,7 @@ int main(void)
printf("do ./configure --enable-sniffer to enable build support\n");
return EXIT_SUCCESS;
}
-
+#endif /* !NO_MAIN_DRIVER */
#else
/* do a full build */
diff --git a/wolfssl/wolfcrypt/port/st/stm32.h b/wolfssl/wolfcrypt/port/st/stm32.h
index 06a49160f..3db84c7e9 100644
--- a/wolfssl/wolfcrypt/port/st/stm32.h
+++ b/wolfssl/wolfcrypt/port/st/stm32.h
@@ -92,7 +92,7 @@ int wc_Stm32_Hash_Final(STM32_HASH_Context* stmCtx, word32 algo,
#ifndef NO_AES
#if !defined(STM32_CRYPTO_AES_GCM) && (defined(WOLFSSL_STM32F4) || \
defined(WOLFSSL_STM32F7) || defined(WOLFSSL_STM32L4) || \
- defined(WOLFSSL_STM32L5))
+ defined(WOLFSSL_STM32L5) || defined(WOLFSSL_STM32H7))
/* Hardware supports AES GCM acceleration */
#define STM32_CRYPTO_AES_GCM
#endif
@@ -113,8 +113,8 @@ int wc_Stm32_Hash_Final(STM32_HASH_Context* stmCtx, word32 algo,
#endif
/* Detect newer CubeMX crypto HAL (HAL_CRYP_Encrypt / HAL_CRYP_Decrypt) */
- #if !defined(STM32_HAL_V2) && \
- (defined(WOLFSSL_STM32F7) || defined(WOLFSSL_STM32L5)) && defined(CRYP_AES_GCM)
+ #if !defined(STM32_HAL_V2) && defined(CRYP_AES_GCM) && \
+ (defined(WOLFSSL_STM32F7) || defined(WOLFSSL_STM32L5) || defined(WOLFSSL_STM32H7))
#define STM32_HAL_V2
#endif
diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h
index f22357c29..37190676f 100644
--- a/wolfssl/wolfcrypt/settings.h
+++ b/wolfssl/wolfcrypt/settings.h
@@ -219,6 +219,9 @@
#ifdef WOLFSSL_USER_SETTINGS
#include "user_settings.h"
+#elif defined(USE_HAL_DRIVER) && !defined(HAVE_CONFIG_H)
+ /* STM Configuration File (generated by CubeMX) */
+ #include "wolfSSL.wolfSSL_conf.h"
#endif
@@ -1204,7 +1207,7 @@ extern void uITRON4_free(void *p) ;
#if defined(WOLFSSL_STM32F2) || defined(WOLFSSL_STM32F4) || \
defined(WOLFSSL_STM32F7) || defined(WOLFSSL_STM32F1) || \
defined(WOLFSSL_STM32L4) || defined(WOLFSSL_STM32L5) || \
- defined(WOLFSSL_STM32WB)
+ defined(WOLFSSL_STM32WB) || defined(WOLFSSL_STM32H7)
#define SIZEOF_LONG_LONG 8
#ifndef CHAR_BIT
@@ -1251,6 +1254,8 @@ extern void uITRON4_free(void *p) ;
#include "stm32f7xx_hal.h"
#elif defined(WOLFSSL_STM32F1)
#include "stm32f1xx_hal.h"
+ #elif defined(WOLFSSL_STM32H7)
+ #include "stm32h7xx_hal.h"
#elif defined(WOLFSSL_STM32WB)
#include "stm32wbxx_hal.h"
#endif
@@ -1296,12 +1301,14 @@ extern void uITRON4_free(void *p) ;
#endif
#elif defined(WOLFSSL_STM32F7)
#include "stm32f7xx.h"
+ #elif defined(WOLFSSL_STM32H7)
+ #include "stm32h7xx.h"
#elif defined(WOLFSSL_STM32F1)
#include "stm32f1xx.h"
#endif
#endif /* WOLFSSL_STM32_CUBEMX */
#endif /* WOLFSSL_STM32F2 || WOLFSSL_STM32F4 || WOLFSSL_STM32L4 ||
- WOLFSSL_STM32L5 || WOLFSSL_STM32F7 || WOLFSSL_STMWB */
+ WOLFSSL_STM32L5 || WOLFSSL_STM32F7 || WOLFSSL_STMWB || WOLFSSL_STM32H7 */
#ifdef WOLFSSL_DEOS
#include
#include