diff --git a/Examples/LL/Flash/RestoreOptionBytes/main.c b/Examples/LL/Flash/RestoreOptionBytes/main.c new file mode 100644 index 0000000..8d1a450 --- /dev/null +++ b/Examples/LL/Flash/RestoreOptionBytes/main.c @@ -0,0 +1,81 @@ +/** + * Demo: Reset Option Bytes + * + * Board: PY32F003W1XS (SOP16) + * + * This demo will restore reset pin + */ + +#include "main.h" +#include "py32f0xx_bsp_printf.h" +#include "py32f0xx_bsp_clock.h" + + +static void APP_GPIOConfig(void); +static void APP_FlashSetOptionBytes(void); + +int main(void) +{ + BSP_RCC_HSI_24MConfig(); + + BSP_USART_Config(115200); + printf("PY32F0xx GPIO Example\r\nClock: %ld\r\n", SystemCoreClock); + LL_mDelay(1000); + + if(READ_BIT(FLASH->OPTR, FLASH_OPTR_NRST_MODE) == OB_RESET_MODE_GPIO) + { + printf("Configurate RESET as RESET\r\n"); + /* This will reset the MCU */ + APP_FlashSetOptionBytes(); + } + else + { + printf("RESET has been configurated as RESET\r\n"); + } + /* Don't config GPIO before changing the option bytes */ + APP_GPIOConfig(); + + while (1) + { + LL_GPIO_TogglePin(GPIOA, LL_GPIO_PIN_0); + printf("echo\r\n"); + LL_mDelay(1000); + } +} + +static void APP_GPIOConfig(void) +{ + // PA0 + LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); + LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_0, LL_GPIO_MODE_OUTPUT); +} + +static void APP_FlashSetOptionBytes(void) +{ + FLASH_OBProgramInitTypeDef OBInitCfg; + + LL_FLASH_Unlock(); + LL_FLASH_OB_Unlock(); + + OBInitCfg.OptionType = OPTIONBYTE_USER; + OBInitCfg.USERType = OB_USER_BOR_EN | OB_USER_BOR_LEV | OB_USER_IWDG_SW | OB_USER_WWDG_SW | OB_USER_NRST_MODE | OB_USER_nBOOT1; + OBInitCfg.USERConfig = OB_BOR_DISABLE | OB_BOR_LEVEL_3p1_3p2 | OB_IWDG_SW | OB_WWDG_SW | OB_RESET_MODE_RESET | OB_BOOT1_SYSTEM; + LL_FLASH_OBProgram(&OBInitCfg); + + LL_FLASH_Lock(); + LL_FLASH_OB_Lock(); + /* Reload option bytes */ + LL_FLASH_OB_Launch(); +} + +void APP_ErrorHandler(void) +{ + while (1); +} + +#ifdef USE_FULL_ASSERT +void assert_failed(uint8_t *file, uint32_t line) +{ + while (1); +} +#endif /* USE_FULL_ASSERT */ diff --git a/Examples/LL/Flash/RestoreOptionBytes/main.h b/Examples/LL/Flash/RestoreOptionBytes/main.h new file mode 100644 index 0000000..3121990 --- /dev/null +++ b/Examples/LL/Flash/RestoreOptionBytes/main.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file main.h + * @author MCU Application Team + * @brief Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @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 __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "py32f0xx_ll_rcc.h" +#include "py32f0xx_ll_bus.h" +#include "py32f0xx_ll_system.h" +#include "py32f0xx_ll_exti.h" +#include "py32f0xx_ll_cortex.h" +#include "py32f0xx_ll_utils.h" +#include "py32f0xx_ll_pwr.h" +#include "py32f0xx_ll_dma.h" +#include "py32f0xx_ll_flash.h" +#include "py32f0xx_ll_gpio.h" + +#if defined(USE_FULL_ASSERT) +#include "py32_assert.h" +#endif /* USE_FULL_ASSERT */ + +/* Private includes ----------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/* Exported variables prototypes ---------------------------------------------*/ +/* Exported functions prototypes ---------------------------------------------*/ +void APP_ErrorHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT Puya *****END OF FILE******************/ diff --git a/Examples/LL/Flash/RestoreOptionBytes/py32_assert.h b/Examples/LL/Flash/RestoreOptionBytes/py32_assert.h new file mode 100644 index 0000000..6b7dc2a --- /dev/null +++ b/Examples/LL/Flash/RestoreOptionBytes/py32_assert.h @@ -0,0 +1,59 @@ +/** + ****************************************************************************** + * @file py32_assert.h + * @brief PY32 assert 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 __PY32_ASSERT_H +#define __PY32_ASSERT_H + +#ifdef __cplusplus + extern "C" { +#endif + +#ifdef USE_FULL_ASSERT +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Includes ------------------------------------------------------------------*/ +#include "stdint.h" + +/* Exported macro ------------------------------------------------------------*/ + +/** + * @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 /* __PY32_ASSERT_H */ + +/************************ (C) COPYRIGHT Puya *****END OF FILE******************/ diff --git a/Examples/LL/Flash/RestoreOptionBytes/py32f0xx_it.c b/Examples/LL/Flash/RestoreOptionBytes/py32f0xx_it.c new file mode 100644 index 0000000..2d2f6e3 --- /dev/null +++ b/Examples/LL/Flash/RestoreOptionBytes/py32f0xx_it.c @@ -0,0 +1,84 @@ +/** + ****************************************************************************** + * @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 "main.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) +{ +} + +/******************************************************************************/ +/* 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/LL/Flash/RestoreOptionBytes/py32f0xx_it.h b/Examples/LL/Flash/RestoreOptionBytes/py32f0xx_it.h new file mode 100644 index 0000000..633fddb --- /dev/null +++ b/Examples/LL/Flash/RestoreOptionBytes/py32f0xx_it.h @@ -0,0 +1,49 @@ +/** + ****************************************************************************** + * @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/Examples/LL/Flash/WriteOptionBytes/main.c b/Examples/LL/Flash/WriteOptionBytes/main.c new file mode 100644 index 0000000..c542304 --- /dev/null +++ b/Examples/LL/Flash/WriteOptionBytes/main.c @@ -0,0 +1,90 @@ +/** + * Demo: Write Option Bytes + * + * Board: PY32F003W1XS (SOP16) + * + * This demo shows how to config reset pin as gpio output + */ + +#include "main.h" +#include "py32f0xx_bsp_printf.h" +#include "py32f0xx_bsp_clock.h" + + +static void APP_GPIOConfig(void); +static void APP_FlashSetOptionBytes(void); + +int main(void) +{ + BSP_RCC_HSI_24MConfig(); + + BSP_USART_Config(115200); + printf("PY32F0xx GPIO Example\r\nClock: %ld\r\n", SystemCoreClock); + LL_mDelay(1000); + + if(READ_BIT(FLASH->OPTR, FLASH_OPTR_NRST_MODE) == OB_RESET_MODE_RESET) + { + printf("Configurate RESET as GPIO\r\n"); + /* This will reset the MCU */ + APP_FlashSetOptionBytes(); + } + else + { + printf("RESET has been configurated as GPIO\r\n"); + } + /* Don't config GPIO before changing the option bytes */ + APP_GPIOConfig(); + + while (1) + { + LL_GPIO_TogglePin(GPIOA, LL_GPIO_PIN_0); + LL_GPIO_TogglePin(GPIOF, LL_GPIO_PIN_0); + printf("echo\r\n"); + LL_mDelay(1000); + } +} + +static void APP_GPIOConfig(void) +{ + // PA0 + LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); + LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_0, LL_GPIO_MODE_OUTPUT); + // PF0 -> GPIO output, PF2 -> analog + LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOF); + LL_GPIO_SetPinMode(GPIOF, LL_GPIO_PIN_0, LL_GPIO_MODE_OUTPUT); + // PY32F003W1XS: PF0 and PF2 share the same pin, it's recommended to set PF2 as analog + LL_GPIO_SetPinMode(GPIOF, LL_GPIO_PIN_2, LL_GPIO_MODE_ANALOG); +} + +static void APP_FlashSetOptionBytes(void) +{ + FLASH_OBProgramInitTypeDef OBInitCfg; + + LL_FLASH_Unlock(); + LL_FLASH_OB_Unlock(); + + OBInitCfg.OptionType = OPTIONBYTE_USER; + OBInitCfg.USERType = OB_USER_BOR_EN | OB_USER_BOR_LEV | OB_USER_IWDG_SW | OB_USER_WWDG_SW | OB_USER_NRST_MODE | OB_USER_nBOOT1; + /* + * The default value: OB_BOR_DISABLE | OB_BOR_LEVEL_3p1_3p2 | OB_IWDG_SW | OB_WWDG_SW | OB_RESET_MODE_RESET | OB_BOOT1_SYSTEM; + */ + OBInitCfg.USERConfig = OB_BOR_DISABLE | OB_BOR_LEVEL_3p1_3p2 | OB_IWDG_SW | OB_WWDG_SW | OB_RESET_MODE_GPIO | OB_BOOT1_SYSTEM; + LL_FLASH_OBProgram(&OBInitCfg); + + LL_FLASH_Lock(); + LL_FLASH_OB_Lock(); + /* Reload option bytes */ + LL_FLASH_OB_Launch(); +} + +void APP_ErrorHandler(void) +{ + while (1); +} + +#ifdef USE_FULL_ASSERT +void assert_failed(uint8_t *file, uint32_t line) +{ + while (1); +} +#endif /* USE_FULL_ASSERT */ diff --git a/Examples/LL/Flash/WriteOptionBytes/main.h b/Examples/LL/Flash/WriteOptionBytes/main.h new file mode 100644 index 0000000..3121990 --- /dev/null +++ b/Examples/LL/Flash/WriteOptionBytes/main.h @@ -0,0 +1,60 @@ +/** + ****************************************************************************** + * @file main.h + * @author MCU Application Team + * @brief Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @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 __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "py32f0xx_ll_rcc.h" +#include "py32f0xx_ll_bus.h" +#include "py32f0xx_ll_system.h" +#include "py32f0xx_ll_exti.h" +#include "py32f0xx_ll_cortex.h" +#include "py32f0xx_ll_utils.h" +#include "py32f0xx_ll_pwr.h" +#include "py32f0xx_ll_dma.h" +#include "py32f0xx_ll_flash.h" +#include "py32f0xx_ll_gpio.h" + +#if defined(USE_FULL_ASSERT) +#include "py32_assert.h" +#endif /* USE_FULL_ASSERT */ + +/* Private includes ----------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/* Exported variables prototypes ---------------------------------------------*/ +/* Exported functions prototypes ---------------------------------------------*/ +void APP_ErrorHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT Puya *****END OF FILE******************/ diff --git a/Examples/LL/Flash/WriteOptionBytes/py32_assert.h b/Examples/LL/Flash/WriteOptionBytes/py32_assert.h new file mode 100644 index 0000000..6b7dc2a --- /dev/null +++ b/Examples/LL/Flash/WriteOptionBytes/py32_assert.h @@ -0,0 +1,59 @@ +/** + ****************************************************************************** + * @file py32_assert.h + * @brief PY32 assert 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 __PY32_ASSERT_H +#define __PY32_ASSERT_H + +#ifdef __cplusplus + extern "C" { +#endif + +#ifdef USE_FULL_ASSERT +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Includes ------------------------------------------------------------------*/ +#include "stdint.h" + +/* Exported macro ------------------------------------------------------------*/ + +/** + * @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 /* __PY32_ASSERT_H */ + +/************************ (C) COPYRIGHT Puya *****END OF FILE******************/ diff --git a/Examples/LL/Flash/WriteOptionBytes/py32f0xx_it.c b/Examples/LL/Flash/WriteOptionBytes/py32f0xx_it.c new file mode 100644 index 0000000..2d2f6e3 --- /dev/null +++ b/Examples/LL/Flash/WriteOptionBytes/py32f0xx_it.c @@ -0,0 +1,84 @@ +/** + ****************************************************************************** + * @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 "main.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) +{ +} + +/******************************************************************************/ +/* 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/LL/Flash/WriteOptionBytes/py32f0xx_it.h b/Examples/LL/Flash/WriteOptionBytes/py32f0xx_it.h new file mode 100644 index 0000000..633fddb --- /dev/null +++ b/Examples/LL/Flash/WriteOptionBytes/py32f0xx_it.h @@ -0,0 +1,49 @@ +/** + ****************************************************************************** + * @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******************/