RCC CSR寄存器會存儲復位標示,可經過它來知道復位緣由,來源:ide
1 if(RCC_GetFlagStatus(RCC_FLAG_PINRST)) 2 printf("PINRST\r\n"); 3 if(RCC_GetFlagStatus(RCC_FLAG_PORRST)) 4 printf("PORRST\r\n"); 5 if(RCC_GetFlagStatus(RCC_FLAG_SFTRST)) 6 printf("SFTRST\r\n"); 7 if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST)) 8 printf("IWDGRST\r\n"); 9 if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST)) 10 printf("WWDGRST\r\n"); 11 if(RCC_GetFlagStatus(RCC_FLAG_LPWRRST)) 12 printf("LPWRRST\r\n"); 13 printf("RCC->CSR:%x \r\n",RCC->CSR); 14 RCC->CSR|=0X1000000 ; //清楚中斷標示 15 printf("RCC->CSR:%x \r\n",RCC->CSR);
軟件復位:轉載函數
測試:按鍵中斷進行軟件復位,獨立看門狗復位,窗口看門狗復位測試
測試發現:分別使用軟件復位,獨立看門狗復位,窗口看門狗復位,復位按鍵,掉電覆位,都會觸發復位按鍵標識位。ui
1 PINRST 2 SFTRST 3 RCC->CSR:14000000 4 RCC->CSR:0 5 PINRST 6 IWDGRST 7 RCC->CSR:24000000 8 RCC->CSR:0 9 PINRST 10 WWDGRST 11 RCC->CSR:44000000 12 RCC->CSR:0 13 PINRST 14 RCC->CSR:4000000 15 RCC->CSR:0 16 PINRST 17 PORRST 18 RCC->CSR:c000000 19 RCC->CSR:0