OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5034|回复: 3

关于WK_UP按键检测的问题。。

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2012-12-22
在线时间
0 小时
发表于 2013-10-20 18:21:10 | 显示全部楼层 |阅读模式
void EXTI_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure; //定义枚举类型

EXTI_DeInit();//初始化EXTI的缺省项
EXTI_ClearFlag(EXTI_Line0);//清除中断的标志位 
//EXTI要设置的是中断线、工作模式、触发方式、中断线使能ENABLE DISABLE
//工作模式:事件Event,中断Interrupt
//触发方式:上升沿Rising、下降沿Falling、上升沿和下降沿Rising_Falling
EXTI_InitStructure.EXTI_Line = EXTI_Line0 ;//设置中断线  主要是看用到的那些引脚
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//设置工作模式  中断方式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//设置触发方式  上升沿和下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能中断线
EXTI_Init(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
}











void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;//定义枚举类型

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//设置优先级分组长度
//有5中选择:NVIC_PriorityGroup_0     NVIC_PriorityGroup_1
//NVIC_PriorityGroup_2   NVIC_PriorityGroup_3  NVIC_PriorityGroup_4
//优先级分组只能设置一次

//EXTI_Line0
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//对应数据手册来设置NVIC线
//对应数据手册 将我们要用到的EXTI事件线 对应到NVIC中
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级
//抢占优先级,也叫先占优先级   在0组的时候,我们可以设置的参数只能为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;//响应优先级
//响应优先级  在0组的时候,我们可以设置的参数是0~15
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
NVIC_Init(&NVIC_InitStructure);



if(EXTI_GetITStatus(EXTI_Line0) == SET) 
{
// delay_ms(10);
// if(EXTI_GetITStatus(EXTI_Line0) == RESET)
{
temp1 = GPIOA->ODR;
temp1 = temp1 & 0X0100;
temp2 = GPIOD->ODR;
temp2 = temp2 & 0X0004;
if(temp1&&temp2)
{
GPIOA->ODR &= 0XFEFF;
GPIOD->ODR &= 0XFFFB;
}
else 
{
GPIOA->ODR |= 1<<8;
GPIOD->ODR |= 1<<2;
}
// GPIOA->ODR &= 0XFEFF;
// GPIOD->ODR &= 0XFFFB;
EXTI_ClearFlag(EXTI_Line0);       //清除中断标志(必须)
EXTI_ClearITPendingBit(EXTI_Line0);
}


程序如上,但是检测不到WK_UP按键,请问一下,检测高电平可以这样检测不啊?同样的程序,用来检测KEY1的时候,就可以检测到,但是出现的问题是不是很灵敏,请问应该怎么解决。。




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2012-12-22
在线时间
0 小时
 楼主| 发表于 2013-10-20 18:23:31 | 显示全部楼层
回复【楼主位】两个嘴巴笑:
---------------------------------
我想先按我这样的方法做,按原子哥的程序基本上不会出错,但是我这样做的话,就出现了问题,想请教一下,详细的解决方案,或者提示一下应该往那个方向去走也行,。。
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-10-20 19:09:10 | 显示全部楼层
“if(EXTI_GetITStatus(EXTI_Line0) == SET) ”这个是查询中断状态,一般放在中断函数中,你应该查询电平。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2012-12-22
在线时间
0 小时
 楼主| 发表于 2013-10-21 15:23:56 | 显示全部楼层
回复【3楼】xiaoyan:
---------------------------------
我是放在中断函数中。还有就是这个延时好像也不行,有延时就检测不到按键,但是我把延时去掉的话,就可以检测到按键,但是不是很灵敏、、
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-10 15:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表