2# 香水城
你好,我想请问一下关于stm32睡眠唤醒的事情。。。手册上说睡眠是可以用任何一个中断唤醒的,那么我想着应该包括ADC和串口,但是我把这两个都试过,板子还是不动啊。
我首先是在程序开始RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); 然后PWR_DeInit();
PWR_BackupAccessCmd(DISABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
SCB->SCR |= SCB_SCR_SLEEPDEEP;
__WFI();
SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);
之后就是while循环,在里面循环点亮LED灯作为唤醒的指示。但是这样的话程序就不进入while循环中,屏幕上什么也没有变化。。。如果吧上面的_WFI注释掉,就能正常执行,请问这是什么原因呢?我用的中断语句是下面的这些:
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //选择中断分组0
NVIC_InitStructure.NVIC_IRQChannel = ADC1_IRQn; //选择串口1中断 /*3.4的库不是使用USART1_IRQChannel,看stm32f10x.h吧*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占式中断优先级设置为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断
NVIC_Init(&NVIC_InitStructure);
}
请指导。。。谢谢 |