OpenEdv-开源电子网

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

外中断奇怪的问题

[复制链接]

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-9-14
在线时间
0 小时
发表于 2013-10-20 00:16:55 | 显示全部楼层 |阅读模式
*******************************/
#include<stm32f10x.h>
#include"led.h"
#include"delay.h"
char flag;
/**********************
PG8 :user
**********************/
void  buttoninit()
{
  GPIO_InitTypeDef GPIO_InitStruct;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE);
  GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;
  //GPIO_InitStruct.GPIO_Speed= GPIO_Speed_2MHz;
  GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
  GPIO_Init(GPIOG,&GPIO_InitStruct);
}
void button_exit_init()
{
   EXTI_InitTypeDef  EXTI_InitStructure;
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource8);
   EXTI_ClearITPendingBit(EXTI_Line8); 
   EXTI_InitStructure.EXTI_Line = EXTI_Line8;
   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()
{
 NVIC_InitTypeDef  NVIC_InitStructure;
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn ;  //外部中断线9-5
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
}
int main()
{
   
   buttoninit();
   ledinit();
   NVIC_Configuration();
   button_exit_init();
  while(1)
  {
   if(flag)
   {
      GPIO_WriteBit( GPIOF, GPIO_Pin_6,  Bit_SET);
      delay_ms(100);
 GPIO_WriteBit( GPIOF, GPIO_Pin_6,  Bit_RESET);
      GPIO_WriteBit( GPIOF, GPIO_Pin_7,   Bit_SET);
      delay_ms(100);
 GPIO_WriteBit( GPIOF, GPIO_Pin_7, Bit_RESET);
   }
  else 
   {
      GPIO_WriteBit( GPIOF, GPIO_Pin_8,  Bit_SET);
      delay_ms(100);
 GPIO_WriteBit( GPIOF, GPIO_Pin_8,  Bit_RESET);
      GPIO_WriteBit( GPIOF, GPIO_Pin_9, Bit_SET);
      delay_ms(100);   
 GPIO_WriteBit( GPIOF, GPIO_Pin_9, Bit_RESET);
   }   
  }
}
中断函数
void EXTI9_5_IRQn_IRQHandler(void)
{
 if(EXTI_GetFlagStatus(EXTI_Line8)!=RESET)
 {
  flag=!flag;
 }
 EXTI_ClearFlag(EXTI_Line8);
}
void ledinit()
{
  GPIO_InitTypeDef GPIO_InitStruct;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);
  GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
  GPIO_InitStruct.GPIO_Speed= GPIO_Speed_2MHz;
  GPIO_InitStruct.GPIO_Mode= GPIO_Mode_Out_PP;
  GPIO_Init(GPIOF,&GPIO_InitStruct);
  GPIO_Write(GPIOF,0x0000);
}
void delay_ms(u16 time)
{
  SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
  //SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
  SysTick_Config(72000);
  nTime =time;
  while(nTime);
}
void SysTick_Handler(void)
{
  nTime--;
}
程序进中断就卡死了,很奇怪,求解
led都正常,一按按键程序似乎停住了。

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

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-10-20 13:46:25 | 显示全部楼层
将中断函数改成这样试试
void EXTI9_5_IRQn_IRQHandler(void)
{
 if(EXTI_GetFlagStatus(EXTI_Line8)!=RESET)
 {
 EXTI_ClearFlag(EXTI_Line8);
  flag=!flag;
 }

}
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-9-14
在线时间
0 小时
 楼主| 发表于 2013-10-20 15:46:43 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
问题依旧,还是一按按键要么led8亮了,要么led9亮着,程序就像卡住了,再按也没反应,好奇怪啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-20 16:54:40 | 显示全部楼层
仿真看看吧
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-9-14
在线时间
0 小时
 楼主| 发表于 2013-10-20 20:26:35 | 显示全部楼层
回复【4楼】正点原子:
------------------------------按键中断怎么仿啊?求指点
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-20 21:19:23 | 显示全部楼层
回复【5楼】STM32-newer:
---------------------------------
用JTAG仿真啊,学习下jtag仿真,很容易的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-9-14
在线时间
0 小时
 楼主| 发表于 2013-10-26 09:17:40 | 显示全部楼层



回复【6楼】正点原子: 



---------------------------------
找到问题了,是中断名错了,是这个void EXTI9_5_IRQHandler(void),就正常了,启动文件里的
而不是void EXTI9_5_IRQn_IRQHandler(void),进去就出不来,不过还是不太明白有啥区别,也没抱错

死在图上那个地方
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-9 23:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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