|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
#include "wkup.h"
#include "led.h"
#include "delay.h"
void Sys_Standby(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //ʹÄÜPWRÍâÉèʱÖÓ
PWR_WakeUpPinCmd(ENABLE); //ʹÄÜ»½ÐѹܽŹ¦ÄÜ
PWR_EnterSTANDBYMode(); //½øÈë´ýÃü£¨STANDBY£©Ä£Ê½
}
//ϵͳ½øÈë´ý»úģʽ
void Sys_Enter_Standby(void)
{
RCC_APB2PeriphResetCmd(0X01FC,DISABLE); //¸´Î»ËùÓÐIO¿Ú
Sys_Standby();
}
//¼ì²âWKUP½ÅµÄÐźÅ
//·µ»ØÖµ1:Á¬Ðø°´ÏÂ3sÒÔÉÏ
// 0:´íÎóµÄ´¥·¢
u8 Check_WKUP(void)
{
u8 t=0; //¼Ç¼°´ÏµÄʱ¼ä
LED0=0; //ÁÁµÆDS0
while(1)
{
if(WKUP_KD)
{
t++; //ÒѾ°´ÏÂÁË
delay_ms(30);
if(t>=100) //°´Ï³¬¹ý3ÃëÖÓ
{
LED0=0; //µãÁÁDS0
return 1; //°´ÏÂ3sÒÔÉÏÁË
}
}
else
{
LED0=1;
return 0; //°´Ï²»×ã3Ãë
}
}
}
//ÖжÏ,¼ì²âµ½PA0½ÅµÄÒ»¸öÉÏÉýÑØ.
//ÖжÏÏß0ÏßÉϵÄÖжϼì²â
void EXTI0_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line0); // Çå³ýLINE10ÉϵÄÖжϱê־λ
if(Check_WKUP())//¹Ø»ú?
{
Sys_Enter_Standby();
}
}
//PA0 WKUP»½Ðѳõʼ»¯
void WKUP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//ʹÄÜGPIOAºÍ¸´Óù¦ÄÜʱÖÓ
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0; //PA.0
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//ÏÂÀÊäÈë
GPIO_Init(GPIOA, &GPIO_InitStructure); //³õʼ»¯IO
//ʹÓÃÍⲿÖжϷ½Ê½
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //ÖжÏÏß0Á¬½ÓGPIOA.0
EXTI_InitStructure.EXTI_Line = EXTI_Line0; //ÉèÖð´¼üËùÓеÄÍⲿÏß·
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //ÉèÍâÍⲿÖжÏģʽ:EXTIÏß·ΪÖжÏÇëÇó
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //ÉÏÉýÑØ´¥·¢
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); // ³õʼ»¯ÍⲿÖжÏ
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //ʹÄÜ°´¼üËùÔÚµÄÍⲿÖжÏͨµÀ
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //ÏÈÕ¼ÓÅÏȼ¶2¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //´ÓÓÅÏȼ¶2¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ʹÄÜÍⲿÖжÏͨµÀ
NVIC_Init(&NVIC_InitStructure); //¸ù¾ÝNVIC_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèNVIC¼Ä´æÆ÷
if(Check_WKUP()==0) Sys_Standby(); //²»ÊÇ¿ª»ú,½øÈë´ý»úģʽ
}
#ifndef __WKUP_H#define __WKUP_H
#include "sys.h"
#define WKUP_KD PAin(0) //PA0 ¼ì²âÊÇ·ñÍⲿWK_UP°´¼ü°´ÏÂ
u8 Check_WKUP(void); //¼ì²âWKUP½ÅµÄÐźÅ
void WKUP_Init(void); //PA0 WKUP»½Ðѳõʼ»¯
void Sys_Enter_Standby(void); //ϵͳ½øÈë´ý»úģʽ
#endif
#include "led.h"#include "delay.h"
#include "sys.h"#include "usart.h"
#include "lcd.h"#include "wkup.h"
int main(void) {
delay_init(); //ÑÓʱº¯Êý³õʼ»
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// ÉèÖÃÖжÏÓÅÏȼ¶·Ö×é2 uart_init(9600); //´®¿Ú³õʼ»¯Îª9600
LED_Init(); //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú WKUP_Init(); //³õʼ»¯WK_UP°´¼ü£¬Í¬Ê±¼ì²âÊÇ·ñÕý³£¿ª»ú£¿
LCD_Init(); //³õʼ»¯LCD POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"Mini STM32"); LCD_ShowString(30,70,200,16,16,"WKUP TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(30,110,200,16,16,"2014/3/8");
while(1) {
LED0=!LED0; delay_ms(250);
} } |
|