|
楼主 |
发表于 2014-10-22 13:37:29
|
显示全部楼层
真没东西,配置下就好了。大概粘贴一下:配下管脚,任务里一头睡下去就行。不唤醒不会醒。醒来后一定会有任务调度,而且是最高优先级的,正好我最高优先级的任务就是串口,过去后直接发条消息,上位机就知道下面醒了。
GPIO_INIT.GPIO_Pin = GPIO_Pin_0; //管脚0
GPIO_INIT.GPIO_Mode = GPIO_Mode_IPU; //弱上拉
GPIO_Init(GPIOC, &GPIO_INIT);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource0);
/* Configure EXTI0 line */
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//EXTI_Mode_Event;//事件中断不用清标志
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//------------------------------------------------------------------------
void Task_SLEEP(void *p_arg)
{
u8 serr;
u32 i;
while(1)
{
OSSemPend(Sem_SLEEP,0,&serr);//
for(i=0;i<12000;i++);//延时1ms;
SysTick->CTRL &=~0x01; //关SysTick
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);// 切换时钟到HSI内部8Mhz
while(RCC_GetSYSCLKSource() != 0x00)
{}
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Disable); //关闭预取指
FLASH_SetLatency(FLASH_Latency_0); // Flash零等待——因为唤醒后是内部8Mhz运行
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFE); //调压器关、事件唤醒
RCC_Configuration(); //必须复位FLASH和时钟
SysTick->CTRL |=0x01; //
}
} |
|