CW32 实现VBAT功能案例参考代码:
int32_t main(void)
{
RCC_Configuration(); // 时钟配置
GPIO_Configuration(); //GPIO 配置
OLED_Init(); //OLED 显示屏初始化配置
dis_err("RTC_TestBoard"); // 显示
FirmwareDelay(5000000); // 增加延时防止过早休眠影响程序烧写
RTC_init(); //RTC 时钟初始化
//DeepSleep 唤醒时,保持原系统时钟来源
RCC_WAKEUPCLK_Config(RCC_SYSCTRL_WAKEUPCLKDIS);
ShowTime(); // 获取时间数据
displaydatetime(); // 显示当前时间
while(1)
{
if( 0==PB05_GETVALUE() ) // 循环检测是否掉电
{
PA05_SETHIGH(); // 关OLED 电源
SCB->SCR = 0X04; //DeepSleep
__WFI(); //MCU 进入DeepSleep 模式以节省功耗
OLED_Init(); // 外部电源接入后唤醒,重新初始化OLED
}
else
{
ShowTime(); // 获取时间数据
displaydatetime(); // 显示当前时间
}
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStruct= {0};
__RCC_GPIOB_CLK_ENABLE(); // 开GPIOB 时钟
GPIO_InitStruct.IT = GPIO_IT_RISING; // 使能上升沿中断
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式
GPIO_InitStruct.Pins = GPIO_PIN_5 ; //PB05,连接WAKEIO 网络
GPIO_Init(CW_GPIOB, &GPIO_InitStruct); // 初始化IO
GPIOB_INTFLAG_CLR(bv5); // 清除PB05 中断标志
NVIC_EnableIRQ(GPIOB_IRQn); // 使能PB05 中断
}
|