?? wkup.c
字號:
#include "wkup.h"
#include "led.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供學習使用,未經作者許可,不得用于其它任何用途
//Mini STM32開發板
//待機喚醒 驅動代碼
//正點原子@ALIENTEK
//技術論壇:www.openedv.com
//修改日期:2010/6/7
//版本:V1.0
//版權所有,盜版必究。
//Copyright(C) 正點原子 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//系統進入待機模式
void Sys_Enter_Standby(void)
{
//關閉所有外設(根據實際情況寫)
RCC->APB2RSTR|=0X01FC;//復位所有IO口
Sys_Standby();//進入待機模式
}
//檢測WKUP腳的信號
//返回值1:連續按下3s以上
// 0:錯誤的觸發
u8 Check_WKUP(void)
{
u8 t=0;
u8 tx=0;//記錄松開的次數
LED0=0; //亮燈DS0
while(1)
{
if(WKUP_KD)//已經按下了
{
t++;
tx=0;
}else
{
tx++; //超過300ms內沒有WKUP信號
if(tx>3)
{
LED0=1;
return 0;//錯誤的按鍵,按下次數不夠
}
}
delay_ms(30);
if(t>=100)//按下超過3秒鐘
{
LED0=0; //點亮DS0
return 1; //按下3s以上了
}
}
}
//中斷,檢測到PA0腳的一個上升沿.
//中斷線0線上的中斷檢測
void EXTI0_IRQHandler(void)
{
EXTI->PR=1<<0; //清除LINE10上的中斷標志位
if(Check_WKUP())//關機?
{
Sys_Enter_Standby();
}
}
//PA0 WKUP喚醒初始化
void WKUP_Init(void)
{
RCC->APB2ENR|=1<<2; //先使能外設IO PORTA時鐘
RCC->APB2ENR|=1<<0; //開啟輔助時鐘
GPIOA->CRL&=0XFFFFFFF0;//PA0設置成輸入
GPIOA->CRL|=0X00000008;
Ex_NVIC_Config(GPIO_A,0,RTIR);//PA0上升沿觸發
//(檢查是否是正常開)機
if(Check_WKUP()==0)Sys_Standby(); //不是開機,進入待機模式
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//搶占2,子優先級2,組2
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -