diff --git a/Examples/HAL/Flash/SectorEraseAndWrite/main.c b/Examples/HAL/Flash/SectorEraseAndWrite/main.c
new file mode 100644
index 0000000..6efc902
--- /dev/null
+++ b/Examples/HAL/Flash/SectorEraseAndWrite/main.c
@@ -0,0 +1,138 @@
+/* Includes ------------------------------------------------------------------*/
+#include "py32f0xx_hal.h"
+#include "py32f0xx_bsp_clock.h"
+#include "py32f0xx_bsp_printf.h"
+
+void APP_ErrorHandler(void);
+
+#define FLASH_USER_START_ADDR 0x0800F000
+
+const uint32_t DATA[64] =
+{
+ 0x01010101, 0x23456789, 0x3456789A, 0x456789AB, 0x56789ABC, 0x6789ABCD, 0x789ABCDE, 0x89ABCDEF,
+ 0x9ABCDEF0, 0xABCDEF01, 0xBCDEF012, 0xCDEF0123, 0xDEF01234, 0xEF012345, 0xF0123456, 0x01234567,
+ 0x01010101, 0x23456789, 0x3456789A, 0x456789AB, 0x56789ABC, 0x6789ABCD, 0x789ABCDE, 0x89ABCDEF,
+ 0x9ABCDEF0, 0xABCDEF01, 0xBCDEF012, 0xCDEF0123, 0xDEF01234, 0xEF012345, 0xF0123456, 0x01234567,
+ 0x23456789, 0xAAAAAAAA, 0x55555555, 0x23456789, 0xAAAAAAAA, 0x55555555, 0x23456789, 0xAAAAAAAA,
+ 0x23456789, 0xAAAAAAAA, 0x55555555, 0x23456789, 0xAAAAAAAA, 0x55555555, 0x23456789, 0xAAAAAAAA,
+ 0x23456789, 0xAAAAAAAA, 0x55555555, 0x23456789, 0xAAAAAAAA, 0x55555555, 0x23456789, 0xAAAAAAAA,
+ 0x23456789, 0xAAAAAAAA, 0x55555555, 0x23456789, 0xAAAAAAAA, 0x55555555, 0x23456789, 0xAAAAAAAA,
+};
+
+static void APP_FlashErase(void);
+static void APP_FlashProgram(void);
+static void APP_FlashEraseVerify(void);
+static void APP_FlashWriteVerify(void);
+
+int main(void)
+{
+ HAL_Init();
+
+ BSP_HSI_PLL_48MHzClockConfig();
+
+ BSP_USART_Config();
+
+ printf("Flash Read&Write Demo\r\nClock: %ld\r\n", SystemCoreClock);
+
+ // Unlock flash
+ HAL_FLASH_Unlock();
+ // Erase flash
+ APP_FlashErase();
+ APP_FlashEraseVerify();
+ printf("Erase verif: succ\r\n");
+
+ // Write to flash
+ APP_FlashProgram();
+ // Lock
+ HAL_FLASH_Lock();
+ // Write verification
+ APP_FlashWriteVerify();
+ printf("Write verif: succ\r\n");
+
+ while (1);
+}
+
+
+static void APP_FlashErase(void)
+{
+ uint32_t SECTORError = 0;
+ FLASH_EraseInitTypeDef EraseInitStruct;
+ // Erase type = sector
+ EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORERASE;
+ // Erase address start
+ EraseInitStruct.SectorAddress = FLASH_USER_START_ADDR;
+ // Number of sectors
+ EraseInitStruct.NbSectors = 1;
+ // Erase
+ if (HAL_FLASHEx_Erase(&EraseInitStruct, &SECTORError) != HAL_OK)
+ {
+ APP_ErrorHandler();
+ }
+}
+
+static void APP_FlashProgram(void)
+{
+ uint32_t flash_program_start = FLASH_USER_START_ADDR ;
+ uint32_t flash_program_end = (FLASH_USER_START_ADDR + sizeof(DATA));
+ uint32_t *src = (uint32_t *)DATA;
+
+ while (flash_program_start < flash_program_end)
+ {
+ // Write to flash
+ if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_PAGE, flash_program_start, src) == HAL_OK)
+ {
+ // Move flash point to next page
+ flash_program_start += FLASH_PAGE_SIZE;
+ // Move data point
+ src += FLASH_PAGE_SIZE / 4;
+ }
+ }
+}
+
+static void APP_FlashEraseVerify(void)
+{
+ uint32_t addr = 0;
+
+ while (addr < sizeof(DATA))
+ {
+ if (0xFFFFFFFF != HW32_REG(FLASH_USER_START_ADDR + addr))
+ {
+ printf("erase verification error\r\n");
+ }
+ addr += 4;
+ }
+}
+
+static void APP_FlashWriteVerify(void)
+{
+ uint32_t addr = 0;
+
+ while (addr < sizeof(DATA))
+ {
+ if (DATA[addr / 4] != HW32_REG(FLASH_USER_START_ADDR + addr))
+ {
+ printf("write verification error\r\n");
+ }
+ addr += 4;
+ }
+}
+
+void APP_ErrorHandler(void)
+{
+ while (1);
+}
+
+#ifdef USE_FULL_ASSERT
+/**
+ * @brief Export assert error source and line number
+ */
+void assert_failed(uint8_t *file, uint32_t line)
+{
+ /* printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+ while (1)
+ {
+ }
+}
+#endif /* USE_FULL_ASSERT */
+
+/************************ (C) COPYRIGHT Puya *****END OF FILE******************/
diff --git a/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_hal_conf.h b/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_hal_conf.h
new file mode 100644
index 0000000..0811215
--- /dev/null
+++ b/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_hal_conf.h
@@ -0,0 +1,229 @@
+/**
+ ******************************************************************************
+ * @file py32f0xx_hal_conf.h
+ * @author MCU Application Team
+ * @brief HAL configuration file.
+ ******************************************************************************
+ * @attention
+ *
+ *
© Copyright (c) Puya Semiconductor Co.
+ * All rights reserved.
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __PY32F0xx_HAL_CONF_H
+#define __PY32F0xx_HAL_CONF_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+
+/* ########################## Module Selection ############################## */
+/**
+ * @brief This is the list of modules to be used in the HAL driver
+ */
+#define HAL_MODULE_ENABLED
+#define HAL_RCC_MODULE_ENABLED
+/* #define HAL_ADC_MODULE_ENABLED */
+/* #define HAL_CRC_MODULE_ENABLED */
+/* #define HAL_COMP_MODULE_ENABLED */
+#define HAL_FLASH_MODULE_ENABLED
+#define HAL_GPIO_MODULE_ENABLED
+/* #define HAL_IWDG_MODULE_ENABLED */
+/* #define HAL_WWDG_MODULE_ENABLED */
+#define HAL_TIM_MODULE_ENABLED
+#define HAL_DMA_MODULE_ENABLED
+/* #define HAL_LPTIM_MODULE_ENABLED */
+#define HAL_PWR_MODULE_ENABLED
+/* #define HAL_I2C_MODULE_ENABLED */
+#define HAL_UART_MODULE_ENABLED
+/* #define HAL_SPI_MODULE_ENABLED */
+/* #define HAL_RTC_MODULE_ENABLED */
+/* #define HAL_LED_MODULE_ENABLED */
+/* #define HAL_EXTI_MODULE_ENABLED */
+#define HAL_CORTEX_MODULE_ENABLED
+
+/* ########################## Oscillator Values adaptation ####################*/
+
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz */
+#endif /* HSI_VALUE */
+
+/**
+ * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
+ * This value is used by the RCC HAL module to compute the system frequency
+ */
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE ((uint32_t)24000000) /*!< Value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSE_STARTUP_TIMEOUT)
+ #define HSE_STARTUP_TIMEOUT ((uint32_t)200) /*!< Time out for HSE start up, in ms */
+#endif /* HSE_STARTUP_TIMEOUT */
+
+/**
+ * @brief Internal Low Speed Internal oscillator (LSI) value.
+ */
+#if !defined (LSI_VALUE)
+ #define LSI_VALUE ((uint32_t)32768) /*!< LSI Typical Value in Hz */
+#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+ The real value may vary depending on the variations
+ in voltage and temperature. */
+
+/**
+ * @brief Adjust the value of External Low Speed oscillator (LSE) used in your application.
+ * This value is used by the RCC HAL module to compute the system frequency
+ */
+#if !defined (LSE_VALUE)
+ #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/
+#endif /* LSE_VALUE */
+
+#if !defined (LSE_STARTUP_TIMEOUT)
+ #define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */
+#endif /* LSE_STARTUP_TIMEOUT */
+
+/* Tip: To avoid modifying this file each time you need to use different HSE,
+ === you can define the HSE value in your toolchain compiler preprocessor. */
+
+/* ########################### System Configuration ######################### */
+/**
+ * @brief This is the HAL system configuration section
+ */
+#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */
+#define PRIORITY_HIGHEST 0
+#define PRIORITY_HIGH 1
+#define PRIORITY_LOW 2
+#define PRIORITY_LOWEST 3
+#define TICK_INT_PRIORITY ((uint32_t)PRIORITY_LOWEST) /*!< tick interrupt priority (lowest by default) */
+#define USE_RTOS 0
+#define PREFETCH_ENABLE 0
+
+/* ########################## Assert Selection ############################## */
+/**
+ * @brief Uncomment the line below to expanse the "assert_param" macro in the
+ * HAL drivers code
+ */
+/* #define USE_FULL_ASSERT 1U */
+
+
+/* Includes ------------------------------------------------------------------*/
+/**
+ * @brief Include module's header file
+ */
+#ifdef HAL_MODULE_ENABLED
+ #include "py32f0xx_hal.h"
+#endif /* HAL_MODULE_ENABLED */
+
+#ifdef HAL_RCC_MODULE_ENABLED
+ #include "py32f0xx_hal_rcc.h"
+#endif /* HAL_RCC_MODULE_ENABLED */
+
+#ifdef HAL_EXTI_MODULE_ENABLED
+ #include "py32f0xx_hal_exti.h"
+#endif /* HAL_EXTI_MODULE_ENABLED */
+
+#ifdef HAL_GPIO_MODULE_ENABLED
+ #include "py32f0xx_hal_gpio.h"
+#endif /* HAL_GPIO_MODULE_ENABLED */
+
+#ifdef HAL_CORTEX_MODULE_ENABLED
+ #include "py32f0xx_hal_cortex.h"
+#endif /* HAL_CORTEX_MODULE_ENABLED */
+
+#ifdef HAL_DMA_MODULE_ENABLED
+ #include "py32f0xx_hal_dma.h"
+#endif /* HAL_DMA_MODULE_ENABLED */
+
+#ifdef HAL_ADC_MODULE_ENABLED
+ #include "py32f0xx_hal_adc.h"
+#endif /* HAL_ADC_MODULE_ENABLED */
+
+#ifdef HAL_CRC_MODULE_ENABLED
+ #include "py32f0xx_hal_crc.h"
+#endif /* HAL_CRC_MODULE_ENABLED */
+
+#ifdef HAL_COMP_MODULE_ENABLED
+#include "py32f0xx_hal_comp.h"
+#endif /* HAL_COMP_MODULE_ENABLED */
+
+#ifdef HAL_FLASH_MODULE_ENABLED
+ #include "py32f0xx_hal_flash.h"
+#endif /* HAL_FLASH_MODULE_ENABLED */
+
+#ifdef HAL_I2C_MODULE_ENABLED
+ #include "py32f0xx_hal_i2c.h"
+#endif /* HAL_I2C_MODULE_ENABLED */
+
+#ifdef HAL_IWDG_MODULE_ENABLED
+ #include "py32f0xx_hal_iwdg.h"
+#endif /* HAL_IWDG_MODULE_ENABLED */
+
+#ifdef HAL_PWR_MODULE_ENABLED
+ #include "py32f0xx_hal_pwr.h"
+#endif /* HAL_PWR_MODULE_ENABLED */
+
+#ifdef HAL_RTC_MODULE_ENABLED
+ #include "py32f0xx_hal_rtc.h"
+#endif /* HAL_RTC_MODULE_ENABLED */
+
+#ifdef HAL_SPI_MODULE_ENABLED
+ #include "py32f0xx_hal_spi.h"
+#endif /* HAL_SPI_MODULE_ENABLED */
+
+#ifdef HAL_TIM_MODULE_ENABLED
+ #include "py32f0xx_hal_tim.h"
+#endif /* HAL_TIM_MODULE_ENABLED */
+
+#ifdef HAL_LPTIM_MODULE_ENABLED
+ #include "py32f0xx_hal_lptim.h"
+#endif /* HAL_LPTIM_MODULE_ENABLED */
+
+#ifdef HAL_UART_MODULE_ENABLED
+ #include "py32f0xx_hal_uart.h"
+#endif /* HAL_UART_MODULE_ENABLED */
+
+#ifdef HAL_WWDG_MODULE_ENABLED
+ #include "py32f0xx_hal_wwdg.h"
+#endif /* HAL_WWDG_MODULE_ENABLED */
+
+#ifdef HAL_USART_MODULE_ENABLED
+ #include "py32f0xx_hal_usart.h"
+#endif /* HAL_USART_MODULE_ENABLED */
+
+/* Exported macro ------------------------------------------------------------*/
+#ifdef USE_FULL_ASSERT
+/**
+ * @brief The assert_param macro is used for function's parameters check.
+ * @param expr: If expr is false, it calls assert_failed function
+ * which reports the name of the source file and the source
+ * line number of the call that failed.
+ * If expr is true, it returns no value.
+ * @retval None
+ */
+ #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
+/* Exported functions ------------------------------------------------------- */
+ void assert_failed(uint8_t* file, uint32_t line);
+#else
+ #define assert_param(expr) ((void)0U)
+#endif /* USE_FULL_ASSERT */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __PY32F0xx_HAL_CONF_H */
+
+/************************ (C) COPYRIGHT Puya *****END OF FILE******************/
diff --git a/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_hal_msp.c b/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_hal_msp.c
new file mode 100644
index 0000000..bfdd2d5
--- /dev/null
+++ b/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_hal_msp.c
@@ -0,0 +1,44 @@
+/**
+ ******************************************************************************
+ * @file py32f0xx_hal_msp.c
+ * @author MCU Application Team
+ * @brief This file provides code for the MSP Initialization
+ * and de-Initialization codes.
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) Puya Semiconductor Co.
+ * All rights reserved.
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "py32f0xx_hal.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+/* External functions --------------------------------------------------------*/
+
+/**
+ * @brief Configure the Flash prefetch and the Instruction cache,
+ * the time base source, NVIC and any required global low level hardware
+ * by calling the HAL_MspInit() callback function from HAL_Init()
+ *
+ */
+void HAL_MspInit(void)
+{
+}
+
+/************************ (C) COPYRIGHT Puya *****END OF FILE******************/
diff --git a/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_it.c b/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_it.c
new file mode 100644
index 0000000..2a0c9f6
--- /dev/null
+++ b/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_it.c
@@ -0,0 +1,85 @@
+/**
+ ******************************************************************************
+ * @file py32f0xx_it.c
+ * @author MCU Application Team
+ * @brief Interrupt Service Routines.
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) Puya Semiconductor Co.
+ * All rights reserved.
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "py32f0xx_hal.h"
+#include "py32f0xx_it.h"
+
+/* Private includes ----------------------------------------------------------*/
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+/* Private user code ---------------------------------------------------------*/
+/* External variables --------------------------------------------------------*/
+
+/******************************************************************************/
+/* Cortex-M0+ Processor Interruption and Exception Handlers */
+/******************************************************************************/
+/**
+ * @brief This function handles Non maskable interrupt.
+ */
+void NMI_Handler(void)
+{
+}
+
+/**
+ * @brief This function handles Hard fault interrupt.
+ */
+void HardFault_Handler(void)
+{
+ while (1)
+ {
+ }
+}
+
+/**
+ * @brief This function handles System service call via SWI instruction.
+ */
+void SVC_Handler(void)
+{
+}
+
+/**
+ * @brief This function handles Pendable request for system service.
+ */
+void PendSV_Handler(void)
+{
+}
+
+/**
+ * @brief This function handles System tick timer.
+ */
+void SysTick_Handler(void)
+{
+ HAL_IncTick();
+}
+
+/******************************************************************************/
+/* PY32F0xx Peripheral Interrupt Handlers */
+/* Add here the Interrupt Handlers for the used peripherals. */
+/* For the available peripheral interrupt handler names, */
+/* please refer to the startup file. */
+/******************************************************************************/
+
+/************************ (C) COPYRIGHT Puya *****END OF FILE******************/
diff --git a/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_it.h b/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_it.h
new file mode 100644
index 0000000..447d294
--- /dev/null
+++ b/Examples/HAL/Flash/SectorEraseAndWrite/py32f0xx_it.h
@@ -0,0 +1,48 @@
+/**
+ ******************************************************************************
+ * @file py32f0xx_it.h
+ * @author MCU Application Team
+ * @brief This file contains the headers of the interrupt handlers.
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) Puya Semiconductor Co.
+ * All rights reserved.
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __PY32F0XX_IT_H
+#define __PY32F0XX_IT_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Private includes ----------------------------------------------------------*/
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions prototypes ---------------------------------------------*/
+void NMI_Handler(void);
+void HardFault_Handler(void);
+void SVC_Handler(void);
+void PendSV_Handler(void);
+void SysTick_Handler(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __PY32F0XX_IT_H */
+
+/************************ (C) COPYRIGHT Puya *****END OF FILE******************/
diff --git a/Libraries/BSP/Inc/py32f0xx_bsp_clock.h b/Libraries/BSP/Inc/py32f0xx_bsp_clock.h
new file mode 100644
index 0000000..bd01491
--- /dev/null
+++ b/Libraries/BSP/Inc/py32f0xx_bsp_clock.h
@@ -0,0 +1,31 @@
+/**
+ ******************************************************************************
+ * @file py32f0xx_bsp_clock.h
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef PY32F0XX_BSP_CLOCK_H
+#define PY32F0XX_BSP_CLOCK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+
+#include "py32f0xx_hal.h"
+#include "py32f0xx_hal_rcc.h"
+
+HAL_StatusTypeDef BSP_HSI_24MHzClockConfig(void);
+HAL_StatusTypeDef BSP_HSI_PLL_48MHzClockConfig(void);
+
+HAL_StatusTypeDef BSP_HSE_ClockConfig(void);
+HAL_StatusTypeDef BSP_HSE_PLL_ClockConfig(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PY32F0XX_BSP_CLOCK_H */
diff --git a/Libraries/BSP/Src/py32f0xx_bsp_clock.c b/Libraries/BSP/Src/py32f0xx_bsp_clock.c
new file mode 100644
index 0000000..9ee3fc2
--- /dev/null
+++ b/Libraries/BSP/Src/py32f0xx_bsp_clock.c
@@ -0,0 +1,123 @@
+#include "py32f0xx_bsp_clock.h"
+
+HAL_StatusTypeDef BSP_HSI_24MHzClockConfig(void)
+{
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
+ RCC_OscInitStruct.HSIState = RCC_HSI_ON; /* HSI ON */
+ RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_24MHz; /* Set HSI clock 24MHz */
+ RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; /* No division */
+ RCC_OscInitStruct.HSEState = RCC_HSE_OFF; /* OFF */
+ RCC_OscInitStruct.LSIState = RCC_LSI_OFF; /* OFF */
+ RCC_OscInitStruct.LSEState = RCC_LSE_OFF; /* OFF */
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_OFF; /* OFF */
+
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ {
+ return HAL_ERROR;
+ }
+
+ /* Reinitialize AHB,APB bus clock */
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; /* Select HSI as SYSCLK source */
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; /* APH clock, no division */
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; /* APB clock, no division */
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
+ {
+ return HAL_ERROR;
+ }
+ return HAL_OK;
+}
+
+
+HAL_StatusTypeDef BSP_HSI_PLL_48MHzClockConfig(void)
+{
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
+ RCC_OscInitStruct.HSIState = RCC_HSI_ON; /* HSI ON */
+ RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; /* No division */
+ RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_16MHz; /* HSI =16MHz */
+ RCC_OscInitStruct.HSEState = RCC_HSE_OFF; /* OFF */
+ RCC_OscInitStruct.HSEFreq = RCC_HSE_16_32MHz;
+ RCC_OscInitStruct.LSIState = RCC_LSI_OFF; /* OFF */
+ RCC_OscInitStruct.LSEState = RCC_LSE_OFF; /* OFF */
+ RCC_OscInitStruct.LSEDriver = RCC_ECSCR_LSE_DRIVER_1; /* LSE default */
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; /* PLL ON */
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; /* PLL clock source (freq >= 12MHz) */
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ {
+ return HAL_ERROR;
+ }
+
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; /* Set PLL as SYSCLK source */
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; /* APH no division */
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; /* APB no division */
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
+ {
+ return HAL_ERROR;
+ }
+ return HAL_OK;
+}
+
+
+HAL_StatusTypeDef BSP_HSE_ClockConfig(void)
+{
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON; /* Turn on HSE */
+ RCC_OscInitStruct.HSEFreq = RCC_HSE_16_32MHz; /* HSE frequency range */
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ {
+ return HAL_ERROR;
+ }
+
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE; /* SYSCLK source */
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
+ /*
+ * Re-initialize RCC clock
+ * -- clock <= 24MHz: FLASH_LATENCY_0
+ * -- clock > 24MHz: FLASH_LATENCY_1
+ */
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
+ {
+ return HAL_ERROR;
+ }
+ return HAL_OK;
+}
+
+HAL_StatusTypeDef BSP_HSE_PLL_ClockConfig(void)
+{
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON; /* Turn on HSE */
+ RCC_OscInitStruct.HSEFreq = RCC_HSE_16_32MHz; /* HSE frequency range */
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; /* PLL ON */
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; /* PLL clock source from HSE (freq >= 12MHz) */
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ {
+ return HAL_ERROR;
+ }
+
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; /* Set PLL as SYSCLK source */
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; /* APH no division */
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; /* APB no division */
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
+ {
+ return HAL_ERROR;
+ }
+ return HAL_OK;
+}
\ No newline at end of file