SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP); } 在执行最后一句代码前,系统由于调用了__WFI 或 __WFE,已经进入了停止模式,因此,这句清除SLEEPDEEP 位并不会执行。而当内核重新被唤醒时,才会清除SLEEPDEEP位,方便使用。 SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP); 4 ...
/* 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. ...
1)设置 SLEEPDEEP 位。 该位在系统控制寄存器(SCB_SCR)的第二位(详见《CM3 权威指南》 ,第182 页表13.1),我们通过设置该位,作为进入待机模式的第一步。 2)使能电源时钟,设置 WK_UP 引脚作为唤醒源。 因为要配置电源控制寄存器,所以必须先使能电源时钟。然后再设置 PWR_CSR 的EWUP位,使能 WK_UP用于将 CPU...
SCB->SCR |=1<<2;//设置SLEEPDEEP位RCC->APB1ENR |=1<<28;//使能电源时钟PWR->CSR |=1<<8;//设置WK_UP作为唤醒源PWR->CR |=1<<1;//设置PDDS位,进入深睡眠模式PWR->CR |=1<<2;//清除唤醒位__ASMvolatile("wfi");//执行WFI命令} 最后实现的现象是,烧入程序,复位后,开始执行程序,进入待...
1、设置Cortex-M3系统控制寄存器中的SLEEPDEEP位(SCB_SCR参考Cortex-M3权威指南182页)。 2、 清除电源控制寄存器(PWR_CR)中的PDDS位。 3、通过设置PWR_CR中LPDS位选择电压调节器的模式 4、执行WFI或者WFE汇编指令 注:为了进入停止模式,所有的外部中断的请求位(挂起寄存器(EXTI_PR))和RTC的闹钟标志都必须被清除...
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; /* Select STOP mode entry ———–*/ if(PWR_STOPEntry == PWR_STOPEntry_WFI) { /* Request Wait For Interrupt */ __WFI(); } else { /* Request Wait For Event */ __WFE(); } /* Reset SLEEP...
{/* 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 are completed */#if defined...
*/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 ...
该位在系统控制寄存器(SCB_SCR)的第二位(详见《CM3 权威指南》 ,第182 页表13.1),我们通过设置该位,作为进入待机模式的第一步。 2)使能电源时钟,设置 WK_UP 引脚作为唤醒源。 因为要配置电源控制寄存器,所以必须先使能电源时钟。然后再设置 PWR_CSR 的EWUP位,使能 WK_UP用于将 CPU从待机模式唤醒。 3)设置...
reg.scb_scr.sleeponexit.set_bit(); 设置SCB_SCR注册的寄存器中的启动睡眠位为1。 通常没有实际应用会使用所有可用的内存映射寄存器。我们使用宏将单个token移出逻辑区块,如上面代码中的periph_gpio_e!(reg)宏,仅引用了gpioE相关寄存器的内容。 寄存器操作API举例 ...