OpenEdv-开源电子网

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

搞了几个按键中断,问题多多啊

[复制链接]

13

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2011-8-2
在线时间
0 小时
发表于 2012-2-16 10:01:05 | 显示全部楼层 |阅读模式
 

fficeffice" /> 

调试中问题有:(1if((key_up)&&(GetState_KEY(KEY1)==0))  //这里仿佛(GetState_KEY(KEY1)==0)永久成立一样~~

所以我想问下大家在mdk调试中怎么查看寄存器的值呢?比如GPIOC->IDR

2)按键很不稳定,有时候按2号键,它可能进入3号的中断;而其特容易触发,我感觉还没碰着按键他就跳进中断了,就跟热感应一样

 

大家帮忙看看啊~~

 

//输入宏定义

#define GetState_KEY(key_num) GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0<<(key_num)) //返回按键所端口电平状态

 

void EXTI0_IRQHandler(void)

{    

       Key_Value =0;

       //判断中断管脚

  if(EXTI_GetITStatus(EXTI_Line0) != RESET)

  { 

//                   if((key_up)&&(GPIOC->IDR & ((uint16_t)0x0001)!=0))       //按键1

                     if((key_up)&&(GetState_KEY(KEY1)==0))  //这里仿佛(GetState_KEY(KEY1)==0)永久成立一样~~ 调试到这里我松开按键,但他还是继续往下执行~~

                     {    

                            key_up=0;

                            MyDelay_nms(50);                      //消抖

                            if(GetState_KEY(KEY1)==0)   //还是继续往下执行~~

 

                       { 

                                   Key_Value =1;                     //1号键

                       }

                     }      

         /* Clear the EXTI line 0 pending bit */

    EXTI_ClearITPendingBit(EXTI_Line0);

  } 

       key_up=1;

}

void EXTI1_IRQHandler(void)

{    

       Key_Value =0; 

       //判断中断管脚

  if(EXTI_GetITStatus(EXTI_Line1) != RESET)

  { 

                     if((key_up)&&(GetState_KEY(KEY2)==0))     

                     {    

                            key_up=0;

                            MyDelay_nms(50);

                            if(GetState_KEY(KEY2)==0)  

                       { 

                                   Key_Value =2;                      

                       }

                     }                         

//            }

    /* Clear the EXTI line 1 pending bit */

    EXTI_ClearITPendingBit(EXTI_Line1);

  } 

       key_up=1;

}

void EXTI2_IRQHandler(void)

{    

       Key_Value =0; 

       //判断中断管脚

  if(EXTI_GetITStatus(EXTI_Line2) != RESET)

  { 

                     if((key_up)&&(GetState_KEY(KEY3)==0))     

                     {    

                            key_up=0;

                            MyDelay_nms(50);

                            if(GetState_KEY(KEY3)==0)  

                       { 

                                   Key_Value =3;                      

                       }

                     }                                                     

//            }                  

    /* Clear the EXTI line 2 pending bit */

    EXTI_ClearITPendingBit(EXTI_Line2);

  } 

       key_up=1;

}

void EXTI3_IRQHandler(void)

{    

       Key_Value =0; 

       //判断中断管脚

  if(EXTI_GetITStatus(EXTI_Line3) != RESET)

  {   

                     if((key_up)&&(GetState_KEY(KEY4)==0))     

                     {    

                            key_up=0;

                            MyDelay_nms(50);

                            if(GetState_KEY(KEY4)==0)  

                       { 

                                   Key_Value =4;                      

                       }

                     }                                                     

//            }    

    /* Clear the EXTI line 3 pending bit */

    EXTI_ClearITPendingBit(EXTI_Line3);

  } 

       key_up=1;

}

 

 

以下是四个中断的优先级/* Enable the EXTI  Interrupt */

 

  //外部中断使用的NVIC配置

//  /* Configure one bit for preemption priority */

//  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//  

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

  /* Enable the EXTI  Interrupt */

  NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

  /* Enable the EXTI  Interrupt */

  NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

  /* Enable the EXTI  Interrupt */

  NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-16 10:36:00 | 显示全部楼层
1,看不完全手册.
2,防抖没做好吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2011-8-2
在线时间
0 小时
 楼主| 发表于 2012-2-16 12:02:27 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
嗯~~
那请问下在mdk调试中怎么查看寄存器的值呢???比如GPIOx->IDR~~

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-16 12:31:46 | 显示全部楼层
看不完全手册.
只能软件仿真的时候查看.
硬件仿真的时候,无法查看.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2011-8-2
在线时间
0 小时
 楼主| 发表于 2012-2-16 13:52:33 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
哦,,
我在网上看到stm32有以下参数:
最大可以输出8mA,灌入20mA,但要保证所有进入芯片VDD的电流不能超过150mA,同样所有从VSS流出的电流也不能超过150mA。
请问原子哥以上参数合理吗?对48脚64脚100脚144脚的总电流怎么加以区分呢,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-16 15:00:46 | 显示全部楼层
回复【5楼】提刀上马:
---------------------------------
总电流就是不能超过150ma.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 22:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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