單片機的休眠喚醒和停止喚醒實驗代碼示例
0.png (36.07 KB, 下載次數: 49)
下載附件
2018-8-28 18:42 上傳
單片機源程序如下:
- #include "wkup.h"
- #include "led.h"
- #include "delay.h"
- void Sys_Sleepy(void)
- {
- SCB->SCR |=0X00;
- #if defined ( __CC_ARM )
- __force_stores();
- #endif
- /* Request Wait For Interrupt */
- __WFI();
- }
- //系統進入待機模式
- void Sys_Enter_Sys_Sleepy(void)
- {
- // RCC_APB2PeriphResetCmd(0X01FC,DISABLE); //復位所有IO口
- Sys_Sleepy();
- }
- void EXTI2_IRQHandler(void)
- {
- EXTI_ClearITPendingBit(EXTI_Line2); // 清除LINE10上的中斷標志位
- SCB->SCR |=SCB_SCR_SEVONPEND;
- // Sys_Enter_Sys_Sleepy();
- if(E2==0)//關機?
- {
- delay_ms(10000);
- if(E2==0)
- {
- LED0=0;
- Sys_Enter_Sys_Sleepy();
- }
- } else LED1=0;
-
- }
- void EXTI3_IRQHandler(void)
- {
- EXTI_ClearITPendingBit(EXTI_Line3); // 清除LINE10上的中斷標志位
- SCB->SCR |=SCB_SCR_SEVONPEND;
- LED1=!LED1;
- /* if(E3!=0)//關機?
- {
- Sys_Enter_Sys_Sleepy();
- } else LED0=1; */
- }
- //PA0 WKUP喚醒初始化
- void WKUP_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA和復用功能時鐘
- GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2; //PE.2
- GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;//上拉輸入
- GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化IO
- GPIO_InitStructure.GPIO_Pin =GPIO_Pin_3; //PE.3
- GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;//上拉輸入
- GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化IO
- //使用外部中斷方式
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2); //中斷線2連接GPIOE.2
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource3);
- EXTI_InitStructure.EXTI_Line = EXTI_Line3|EXTI_Line2; //設置按鍵所有的外部線路
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //設外外部中斷模式:EXTI線路為中斷請求
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //上升沿觸發
- EXTI_InitStructure.EXTI_LineCmd =ENABLE;// DISABLE;
- EXTI_Init(&EXTI_InitStructure); // 初始化外部中斷
- NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; //使能按鍵所在的外部中斷通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
- NVIC_Init(&NVIC_InitStructure); //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器
- /*----------------------------------------*/
- NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //使能按鍵所在的外部中斷通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
- NVIC_Init(&NVIC_InitStructure); //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器
- if(E2!=0) Sys_Sleepy(); //不是開機,進入待機模式
- }
復制代碼
所有資料51hei提供下載:
睡眠喚醒和停止喚醒實驗.rar
(649.88 KB, 下載次數: 70)
2018-8-28 18:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|