/************************************************************************************************/
/**
* @file               main.c
* @author             MCU Ecosystem Development Team
* @brief              该示例展示PVD用于上电欠压复位(BOR)功能,通过POR复位时将选项字节区PVD位域加载到
*                     PMU_CR2寄存器中，从而实现上电阶段的欠压复位功能。
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/

/*------------------------------------------includes--------------------------------------------*/
#include "main.h"

/*-------------------------------------------functions------------------------------------------*/
int main(void)
{    
    /* 配置系统时钟 */
    system_clock_config();
  
    /* GPIO初始化，配置LED1 */
    gpio_init();
    
    /* 检查Flash选项字节区PVD位域是否成功加载到电源管理控制寄存器（PMU_CR2）的PVD_EN和PVD_LEVEL位域 */
    if((std_pmu_get_pvd_enable_status() != true) || (std_pmu_get_pvd_level() != PMU_PVD_LEVEL_1))
    {
        /* 清除复位标志 */
        std_rcc_clear_reset_flags();

        /* 清除FLASH所有标志 */
        std_flash_clear_flag(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR);

        /* Flash控制寄存器解锁 */
        std_flash_unlock();

        if (std_flash_get_lock_status() == false)
        {        
            /* 配置PVD选项字节 */    
            bsp_pvd_option_byte_config();
            
            /* Flash控制寄存器加锁 */
            std_flash_lock();
        }
        
        /* 等待执行POR复位加载PVD选项后，上电欠压复位使能生效 */
        while(1);
    }        
    
    /* 检查POR和PVD复位标志 */
    if((std_rcc_get_reset_flag(RCC_RESET_FLAG_POR)) && (std_rcc_get_reset_flag(RCC_RESET_FLAG_PVD)))
    {
        /* 清除复位标志 */
        std_rcc_clear_reset_flags();
        
        /* 点亮LED1 */
        LED1_ON();
    }
    
    while(1)
    {
       
    }
}




