中级会员
 
- 积分
- 283
- 金钱
- 283
- 注册时间
- 2015-2-17
- 在线时间
- 9 小时
|
发表于 2015-3-10 14:17:27
|
显示全部楼层
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "wkup.h"
//ALIENTEK战舰STM32开发板实验16
//待机唤醒实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
int main(void)
{
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init(); //LED端口初始化
WKUP_Init(); //待机唤醒初始化
LCD_Init(); //LCD初始化
POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"Warship 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,"2012/9/7");
while(1)
{
LED0=!LED0;
delay_ms(250);
}
}
上面是原子哥待机唤醒实验的例程主函数。
按理来说你只有按下WKUP_KD就能够退出待机模式,但你去按得时候为什么不能退出呢。
首先你要明白什么是待机唤醒,我理解的待机唤醒就是唤醒后程序重新全部执行一次,就是执行我面贴出来的函数,
当你按下WKUP_KD,函数从上面的delay_init(),一直执行,当执行到WKUP_Init();的时候,由于WKUP_Init();函数的最末尾有语句if(Check_WKUP()==0) Sys_Standby();
当你按下的WKUP_KD按键不足3秒时,Check_WKUP()函数返回的值是0,此时if语句成立,就会执行Sys_Standby(),从而单片机刚唤醒不到几毫秒的时间就会又进入待机模式,
所以你是看不到TFT显示屏任何现象。
如果你按下WKUP_KD超过3秒,Check_WKUP()函数返回的值是1,此时if语句不成立,就会跳过Sys_Standby(),单片机不会进入待机模式,此时,单片机就会执行WKUP_Init()后面
的函数例如LCD_Init();,POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"Warship 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,"2012/9/7");
while(1)
{
LED0=!LED0;
delay_ms(250);
}
}
此时,液晶有显示正常 |
|