[STM32F1] F103外部中断问题

[复制链接]
1296|14
 楼主| wanyisq 发表于 2016-5-3 22:32 | 显示全部楼层 |阅读模式
本帖最后由 wanyisq 于 2016-5-3 22:34 编辑

新手编写了一个F103的外部中断程序,不知错误在哪,就是不能实现中断。
请教一下各位
  1. void GPIO_EXIT_Init(void)
  2. {
  3.         
  4.         GPIO_InitTypeDef GPIO_InitStructure;
  5.         EXTI_InitTypeDef EXTI_InitStructure;
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE);  //PA8-KEY
  7.         
  8.        NVIC_InitTypeDef NVIC_InitStructure;
  9.       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  10.       NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;
  11.       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  12.       NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  13.       NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  14.       NVIC_Init(&NVIC_InitStructure);
  15.         
  16.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
  17.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  18.         GPIO_Init(GPIOA, &GPIO_InitStructure);        
  19.         
  20.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource8);
  21.         EXTI_InitStructure.EXTI_Line = EXTI_Line8;
  22.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  23.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  24.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  25.         EXTI_Init(&EXTI_InitStructure);
  26.         
  27.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9 | GPIO_Pin_8;   //PD8、9--LED
  28.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  29.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  30.         GPIO_Init(GPIOD, &GPIO_InitStructure);

  31. }

  32. int main(void)
  33. {
  34.         
  35.         GPIO_EXIT_Init();
  36.         GPIO_SetBits(GPIOD, GPIO_Pin_8);
  37.         while(1)
  38.         {
  39.                 GPIO_SetBits(GPIOD, GPIO_Pin_8);
  40.         }
  41. }

  42. void EXIT9_5_IRQHandler(void)
  43. {
  44.         if(EXTI_GetITStatus(EXTI_Line8)!=RESET)
  45.         {
  46. //                GPIO_WriteBit(GPIOD,GPIO_Pin_8,
  47. //                        (BitAction)(1-GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_8)));
  48.                 GPIO_WriteBit(GPIOD, GPIO_Pin_9, (BitAction)((1-GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_9))));
  49.                 EXTI_ClearITPendingBit(EXTI_Line8);
  50.                
  51.         }
  52. }
头文件都已经包含进去了
xyz549040622 发表于 2016-5-4 08:54 | 显示全部楼层
随便找个例程看看知道了。中断函数居然在主函数中,难道不应该在it.c中么。
liyuxing 发表于 2016-5-4 09:17 | 显示全部楼层
PA8输入引脚不要设置悬空,改成 GPIO_Mode_In_PU_IT试试
 楼主| wanyisq 发表于 2016-5-4 20:41 | 显示全部楼层
xyz549040622 发表于 2016-5-4 08:54
随便找个例程看看知道了。中断函数居然在主函数中,难道不应该在it.c中么。 ...

中断放在主函数里也可以吧
 楼主| wanyisq 发表于 2016-5-4 20:41 | 显示全部楼层
liyuxing 发表于 2016-5-4 09:17
PA8输入引脚不要设置悬空,改成 GPIO_Mode_In_PU_IT试试

因为电路里有上拉 所以我设置的是浮空
xyz549040622 发表于 2016-5-4 21:11 | 显示全部楼层
wanyisq 发表于 2016-5-4 20:41
中断放在主函数里也可以吧

这样,中断向量表如何找的到呢?没这么干过,你可以试试。51中经常这么干,建议规范点,放在it.c文件中
ywlzh 发表于 2016-5-4 21:41 | 显示全部楼层
xyz549040622 发表于 2016-5-4 08:54
随便找个例程看看知道了。中断函数居然在主函数中,难道不应该在it.c中么。 ...

这个很好奇吗? 放在哪个文件里不一样吗?中断来了,自然会跳到相应的函数上去。这个只是习惯使然罢了
lovecat2015 发表于 2016-5-4 21:58 | 显示全部楼层
没开中断吗?
xyz549040622 发表于 2016-5-4 23:14 | 显示全部楼层
ywlzh 发表于 2016-5-4 21:41
这个很好奇吗? 放在哪个文件里不一样吗?中断来了,自然会跳到相应的函数上去。这个只是习惯使然罢了 ...

这个真心没试过,中断向量表中应该包含it.h文件,it.c中定义中断函数,it.h中申明。中断函数放在main.c中的话,申明是直接申明就可以呢?还需要加个main.h文件呢?
ywlzh 发表于 2016-5-5 10:22 | 显示全部楼层
xyz549040622 发表于 2016-5-4 23:14
这个真心没试过,中断向量表中应该包含it.h文件,it.c中定义中断函数,it.h中申明。中断函数放在main.c中 ...

不用声明,也不需要main.h这个文件

评分

参与人数 1威望 +5 收起 理由
xyz549040622 + 5 赞一个!

查看全部评分

杨爱林林 发表于 2016-5-5 13:42 | 显示全部楼层
xyz549040622 发表于 2016-5-4 23:14
这个真心没试过,中断向量表中应该包含it.h文件,it.c中定义中断函数,it.h中申明。中断函数放在main.c中 ...

向量表在.s文件里面
 楼主| wanyisq 发表于 2016-5-5 20:00 | 显示全部楼层
xyz549040622 发表于 2016-5-4 23:14
这个真心没试过,中断向量表中应该包含it.h文件,it.c中定义中断函数,it.h中申明。中断函数放在main.c中 ...

启动文件已经申明了中断,只用写中断函数,自己就会找到这个函数执行的

评分

参与人数 1威望 +5 收起 理由
xyz549040622 + 5 赞一个!

查看全部评分

 楼主| wanyisq 发表于 2016-5-5 20:01 | 显示全部楼层
问题找到了,BitAction这里出问题了,去掉就好了。结贴
mintspring 发表于 2016-5-5 21:15 | 显示全部楼层
外部中断IO:
1,设置输入模式,
2,再配置跟中断相关的寄存器。
ccw1986 发表于 2016-5-5 22:17 | 显示全部楼层
一次中断都没有进入吗,进去记得清中断
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:--By Dr. Heinz Doofenshmirtz

40

主题

180

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部