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 中断
- }
|