打印

按键中断问题,大家帮帮忙。新手~~

[复制链接]
1788|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
太阳1|  楼主 | 2013-8-2 10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IO, pi, gp, GPIO, TI
#include "stm32f10x.h"


//配置GPIO
void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        /* Configure IO connected to LD1, LD2, LD3 and LD4 leds *********************/       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOD, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOD, &GPIO_InitStructure);

}


//配置系统时钟,使能各外设时钟
void RCC_Configuration(void)
{
        SystemInit();       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE );
  // RCC_APB2PeriphClockCmd(RCC_APB2Periph_ALL ,ENABLE );
  // RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
}

void EXTI_Configuration(void)
{
   EXTI_InitTypeDef EXTI_InitStructure;
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13);
   /* 连接EXTI14 线到PD14 引脚*/
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource14);
   EXTI_InitStructure.EXTI_Line = EXTI_Line13 | EXTI_Line14;
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
   EXTI_Init(&EXTI_InitStructure);
}

void NVIC_Configuration(void)
{   NVIC_InitTypeDef NVIC_InitStructure;
   /* 使能并设置EXTI15_10 中断为最高优先级别*/
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

}

//配置所有外设
void Init_All_Periph(void)
{
        RCC_Configuration();       
        GPIO_Configuration();
        NVIC_Configuration();
        EXTI_Configuration();
}

/*void Delay(vu32 nCount)
{
  for(; nCount != 0; nCount--);
}*/


int main(void)
{  
        Init_All_Periph();
for(;;);
}

void EXTI15_10_IRQHandler(void) //PD13 和PD14 所接按键中断服务程序

{
if(EXTI_GetITStatus(EXTI_Line13) != RESET)
{
/* 翻转D2 */
GPIO_WriteBit(GPIOA, GPIO_Pin_4,SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_7, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_7)));
/* Clear the EXTI line 9 pending bit */
EXTI_ClearITPendingBit(EXTI_Line13);
}
/*****if(EXTI_GetITStatus(EXTI_Line14) != RESET)
{
/* 翻转D3
GPIO_WriteBit(GPIOA,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5)));
/* Clear the EXTI line 9 pending bit
EXTI_ClearITPendingBit(EXTI_Line14);
} */
}
沙发
太阳1|  楼主 | 2013-8-2 10:34 | 只看该作者
我按了按键没反应。。。。大家帮帮忙

使用特权

评论回复
板凳
outstanding| | 2013-8-2 12:48 | 只看该作者
你要确定的管脚配置没有错误

使用特权

评论回复
地板
太阳1|  楼主 | 2013-8-2 14:08 | 只看该作者
outstanding 发表于 2013-8-2 12:48
你要确定的管脚配置没有错误

D口13.14脚做按键输入,A口4.5.7做LED输出口,应该没做

使用特权

评论回复
5
outstanding| | 2013-8-2 14:20 | 只看该作者
按键中断 来控制LED么?  那你就在中断设置一个断电看看是否进入了中断。

使用特权

评论回复
6
dabayi2006| | 2013-8-2 14:23 | 只看该作者
void EXTI15_10_IRQHandler(void)   处设置断点,跟踪一下按键后是否运行到此处,看设置好像没什么问题

使用特权

评论回复
7
太阳1|  楼主 | 2013-8-2 15:32 | 只看该作者
dabayi2006 发表于 2013-8-2 14:23
void EXTI15_10_IRQHandler(void)   处设置断点,跟踪一下按键后是否运行到此处,看设置好像没什么问题 ...

void EXTI15_10_IRQHandler(void) 这个函数在写在stm32f10x_it.c不是在main函数中,可以设置断电吗?我用的是keil调试,新手不大懂得玩:'(

使用特权

评论回复
8
太阳1|  楼主 | 2013-8-2 15:49 | 只看该作者
dabayi2006 发表于 2013-8-2 14:23
void EXTI15_10_IRQHandler(void)   处设置断点,跟踪一下按键后是否运行到此处,看设置好像没什么问题 ...

好像一直在for那边死循环了。

使用特权

评论回复
9
dabayi2006| | 2013-8-16 17:13 | 只看该作者
可以设置断点的啊。你现在的程序如果暂停肯定是停在for循环的,因为中断的触发如果单步运行是无法触发的

使用特权

评论回复
10
dabayi2006| | 2013-8-16 17:28 | 只看该作者
再有可以做以下尝试:
1、  GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13);前加入EXTI_ClearITPendingBit(EXTI_Line13);EXTI_ClearITPendingBit(EXTI_Line14);清一下中断标志
2、 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        改变其中的优先级为其他,不用0,0

使用特权

评论回复
11
bbstr| | 2013-8-16 17:32 | 只看该作者
先看看你按键的那个管脚,在按下去和不按的时候,分别电压是多少

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝