//中断,检测到PA0脚的一个上升沿. //中断线0线上的中断检测 void EXTI0_IRQHandler(void) { EXTI->PR=1<<0; //清除LINE10上的中断标志位 if(2==Check_WKUP())//待机? { StandbyMode(); } }
int main(void) { char msg[20]; HAL_Init(); Nucleo_BSP_Init(); /* Before we can access to every register of the PWR peripheral we must enable it */ __HAL_RCC_PWR_CLK_ENABLE(); while (1) { if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB)) { /* If standby flag set in PWR->CSR, then the reset is generated from * the exit of the standby mode */ sprintf(msg, "RESET after STANDBY mode\r\n"); HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY); /* We have to explicitly clear the flag */ __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU|PWR_FLAG_SB); } sprintf(msg, "MCU in run mode\r\n"); HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY); while(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET) { HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); HAL_Delay(100); } HAL_Delay(200); sprintf(msg, "Entering in SLEEP mode\r\n"); HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY); SleepMode(); sprintf(msg, "Exiting from SLEEP mode\r\n"); HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY); while(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET); HAL_Delay(200); sprintf(msg, "Entering in STOP mode\r\n"); HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY); StopMode(); sprintf(msg, "Exiting from STOP mode\r\n"); HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY); while(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET); HAL_Delay(200); sprintf(msg, "Entering in STANDBY mode\r\n"); HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY); StandbyMode(); while(1); //Never arrives here, since MCU is reset when exiting from STANDBY } }