通过按键实现备份域软件复位
int main(void)
{
u8 key;
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
u8 tbuf[40];
u8 t=0;
Cache_Enable(); //打开L1-Cache
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(432,25,2,9); //设置时钟,216Mhz
delay_init(216); //延时初始化
uart_init(115200); //串口初始化
usmart_dev.init(108); //初始化USMART
LED_Init(); //初始化LED
KEY_Init(); //初始化按键
SDRAM_Init(); //初始化SDRAM
LCD_Init(); //LCD初始化
RTC_Init(); //初始化RTC
RTC_Set_WakeUp(RTC_WAKEUPCLOCK_CK_SPRE_16BITS,0); //配置WAKE UP中断,1秒钟中断一次
POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"Apollo STM32F4/F7");
LCD_ShowString(30,70,200,16,16,"RTC TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,"2016/7/12");
while(1)
{
t++;
if((t%10)==0) //每100ms更新一次显示数据
{
HAL_RTC_GetTime(&RTC_Handler,&RTC_TimeStruct,RTC_FORMAT_BIN);
sprintf((char*)tbuf,"Time:%02d:%02d:%02d",RTC_TimeStruct.Hours,RTC_TimeStruct.Minutes,RTC_TimeStruct.Seconds);
LCD_ShowString(30,140,210,16,16,tbuf);
HAL_RTC_GetDate(&RTC_Handler,&RTC_DateStruct,RTC_FORMAT_BIN);
sprintf((char*)tbuf,"Date:20%02d-%02d-%02d",RTC_DateStruct.Year,RTC_DateStruct.Month,RTC_DateStruct.Date);
LCD_ShowString(30,160,210,16,16,tbuf);
sprintf((char*)tbuf,"Week:%d",RTC_DateStruct.WeekDay);
LCD_ShowString(30,180,210,16,16,tbuf);
}
if((t%20)==0)LED0_Toggle; //每200ms,翻转一次LED0
delay_ms(10);
key=KEY_Scan(0); //得到键值
if(key)
{
switch(key)
{
case WKUP_PRES: //备份域软件复位
__HAL_RCC_BACKUPRESET_FORCE();
break;
case KEY2_PRES:
__HAL_RCC_BACKUPRESET_RELEASE();
HAL_RTC_DeInit(&RTC_Handler);
break;
case KEY1_PRES:
RTC_Init(); //初始化RTC
RTC_Set_WakeUp(RTC_WAKEUPCLOCK_CK_SPRE_16BITS,0); //配置WAKE UP中断,1秒钟中断一次
break;
case KEY0_PRES:
break;
}
}
}
}
按下WKUP_PRES后实现备份域软件复位
疑问:备份域软件复位后无法重新开始RTC功能?