|
單片機(jī)的休眠喚醒和停止喚醒實(shí)驗(yàn)代碼示例
0.png (36.07 KB, 下載次數(shù): 49)
下載附件
2018-8-28 18:42 上傳
單片機(jī)源程序如下:
- #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();
- }
- //系統(tǒng)進(jìn)入待機(jī)模式
- void Sys_Enter_Sys_Sleepy(void)
- {
- // RCC_APB2PeriphResetCmd(0X01FC,DISABLE); //復(fù)位所有IO口
- Sys_Sleepy();
- }
- void EXTI2_IRQHandler(void)
- {
- EXTI_ClearITPendingBit(EXTI_Line2); // 清除LINE10上的中斷標(biāo)志位
- SCB->SCR |=SCB_SCR_SEVONPEND;
- // Sys_Enter_Sys_Sleepy();
- if(E2==0)//關(guān)機(jī)?
- {
- delay_ms(10000);
- if(E2==0)
- {
- LED0=0;
- Sys_Enter_Sys_Sleepy();
- }
- } else LED1=0;
-
- }
- void EXTI3_IRQHandler(void)
- {
- EXTI_ClearITPendingBit(EXTI_Line3); // 清除LINE10上的中斷標(biāo)志位
- SCB->SCR |=SCB_SCR_SEVONPEND;
- LED1=!LED1;
- /* if(E3!=0)//關(guān)機(jī)?
- {
- 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和復(fù)用功能時(shí)鐘
- 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; //設(shè)置按鍵所有的外部線路
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //設(shè)外外部中斷模式:EXTI線路為中斷請(qǐng)求
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //上升沿觸發(fā)
- 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); //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)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); //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器
- if(E2!=0) Sys_Sleepy(); //不是開(kāi)機(jī),進(jìn)入待機(jī)模式
- }
復(fù)制代碼
所有資料51hei提供下載:
睡眠喚醒和停止喚醒實(shí)驗(yàn).rar
(649.88 KB, 下載次數(shù): 70)
2018-8-28 18:42 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|