SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP); } 在执行最后一句代码前,系统由于调用了__WFI 或 __WFE,已经进入了停止模式,因此,这句清除SLEEPDEEP 位并不会执行。而当内核重新被唤醒时,才会清除SLEEPDEEP位,方便使用。 SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP); 4 ...
SCB->SCR |= SCB_SCR_SLEEPDEEP;// 设置 PDDS 位(进入深度睡眠时进入待机模式)PWR->CR |= PWR...
*/voidPWR_EnterSTANDBYMode(void) {/* Clear Wake-up flag */PWR- >CR |= PWR_CR_CWUF;/* Select STANDBY mode */PWR- >CR |= PWR_CR_PDDS;/* Set SLEEPDEEP bit of Cortex System Control Register */SCB- >SCR |= SCB_SCR_SLEEPDEEP;/* This option is used to ensure that store operat...
/* Set SLEEPDEEP bit of Cortex System Control Register */ SCB->SCR|=SCB_SCR_SLEEPDEEP; /* This option is used to ensure that store operations are completed */ #if defined ( __CC_ARM ) __force_stores(); #endif /* Request Wait For Interrupt */ __WFI();// } 1. 2. 3. 4. ...
SCB_SCR的第二位 2、使能电源时钟,设置WK_UP引脚作为唤醒源 因为要配置电源控制寄存器,所以必须先使能电源时钟。然后再设置PWR_CSR的EWUP位,使能WK_UP用于将CPU从待机模式唤醒。 3、设置 PDDS PDDS位,执行 WFI 指令,进入待机模式。 通过PWR_CR 设置 PDDS 位,使得 CPU 进入深度睡眠时待机模式,最后执行 WFI指...
*/voidPWR_EnterSTANDBYMode(void){/* Clear Wake-up flag */PWR->CR |= PWR_CR_CWUF;/* Select STANDBY mode */PWR->CR |= PWR_CR_PDDS;/* Set SLEEPDEEP bit of Cortex System Control Register */SCB->SCR |= SCB_SCR_SLEEPDEEP;/* This option is used to ensure that store operations ...
1、设置Cortex-M3系统控制寄存器中的SLEEPDEEP位(SCB_SCR参考Cortex-M3权威指南182页)。 2、 清除电源控制寄存器(PWR_CR)中的PDDS位。 3、通过设置PWR_CR中LPDS位选择电压调节器的模式 4、执行WFI或者WFE汇编指令 注:为了进入停止模式,所有的外部中断的请求位(挂起寄存器(EXTI_PR))和RTC的闹钟标志都必须被清除...
在确保所有外设和时钟配置正确后,调用进入停机模式的指令。STM32F410 使用 SCB->SCR 和 PWR 寄存器进行...
{/* 需要中断唤醒 */__WFI();}else{/* 需要事件唤醒 */__WFE();}/* 以下的程序是当重新唤醒时才执行的,清除SLEEPDEEP位的状态 */SCB->SCR&=(uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);} 这个函数有两个输入参数,分别用于控制调压器的模式及选择使用WFI或WFE停止,代码中先是根据调压器的模式...
reg.scb_scr.sleeponexit.set_bit(); 设置SCB_SCR注册的寄存器中的启动睡眠位为1。 通常没有实际应用会使用所有可用的内存映射寄存器。我们使用宏将单个token移出逻辑区块,如上面代码中的periph_gpio_e!(reg)宏,仅引用了gpioE相关寄存器的内容。 寄存器操作API举例 ...