OpenEdv-开源电子网

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

外部中断,进不了!求帮忙!!

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-7-13
在线时间
0 小时
发表于 2014-7-13 17:03:48 | 显示全部楼层 |阅读模式
5金钱
外部中断一直进不去,我用的是 keil 4,无论是仿真还是硬件都不行。
使用例子是能够运行的,所以排除了硬件的原因。。
EXTI_GenerateSWInterrupt(EXTI_Line0); //使用这条是能够进入到中断的,但是硬件、仿真就是不行!!
现在代码贴上,,求解答!!
[mw_shl_code=c,true]#include "stm32f10x.h" //#include "stm32f10x_exti.h" //#include "stm32f10x_gpio.h" extern int time; void EXTI_configuration(void); void GPIO_configuration(void); void RCC_configuration(void); int main() { RCC_configuration(); GPIO_configuration(); EXTI_configuration(); while(1) { if(time) { GPIO_SetBits(GPIOE, GPIO_Pin_5); } else { GPIO_ResetBits(GPIOE, GPIO_Pin_5); } } } void GPIO_configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); /* Configure all the GPIOA in Input Floating mode */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOC, &GPIO_InitStructure); } void EXTI_configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource0); EXTI_ClearITPendingBit(EXTI_Line0); EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_Line = EXTI_Line0 ; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void RCC_configuration(void) { ErrorStatus HSEStartUpStatus; RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); HSEStartUpStatus = RCC_WaitForHSEStartUp(); if (HSEStartUpStatus == SUCCESS) { RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {} RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0x08) ; } }[/mw_shl_code]
现在把工程附上,真心求解决!问题卡在这里已经2天了。。

TEST.rar

4.03 MB, 下载次数: 46

最佳答案

查看完整内容[请看2#楼]

结贴! 两个错误: 1、GPIO_Speed速度选择过低,触发中断时,单片机响应过慢,按键没消抖,造成了干扰。 问题在于仿真设置断点一样不进入。。不知道为什么??硬件是有响应的。仿真有问题吗?? 2、extern int time 没赋初值,主要原因。time=0时运行正常。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-7-13
在线时间
0 小时
 楼主| 发表于 2014-7-13 17:03:49 | 显示全部楼层
结贴!
两个错误:
1、GPIO_Speed速度选择过低,触发中断时,单片机响应过慢,按键没消抖,造成了干扰。
问题在于仿真设置断点一样不进入。。不知道为什么??硬件是有响应的。仿真有问题吗??
2、extern int time 没赋初值,主要原因。time=0时运行正常。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-13 23:18:34 | 显示全部楼层
貌似中断分组没有设置.另外,楼主可以对比下和我们代码的区别,就比较容易找问题了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-7-13
在线时间
0 小时
 楼主| 发表于 2014-7-14 00:47:51 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
中断分组我应该在62-67行已经设置了吧,可能我配置的不对,错的地方可以给我指示出来吗?谢谢!
回复

使用道具 举报

29

主题

340

帖子

0

精华

高级会员

Rank: 4

积分
799
金钱
799
注册时间
2013-12-17
在线时间
100 小时
发表于 2014-7-14 07:55:44 | 显示全部楼层
没看见中断服务函数啊,你用的那个管脚啊,看你5,6教师浮空输入啊  0脚才是输出
就算有一天梦想成真,而你做好准备了吗?
回复

使用道具 举报

29

主题

340

帖子

0

精华

高级会员

Rank: 4

积分
799
金钱
799
注册时间
2013-12-17
在线时间
100 小时
发表于 2014-7-14 07:56:30 | 显示全部楼层
反了,0脚浮空输入,5,6脚输出
就算有一天梦想成真,而你做好准备了吗?
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-7-13
在线时间
0 小时
 楼主| 发表于 2014-7-14 08:48:44 | 显示全部楼层
回复【5楼】老虎的菜:
---------------------------------
我的PC0脚是按键,PE5、6脚是LED
中断函数我只是在里面加了
while(1);作识别作用,但是进不去。
里面的代码不执行!跳转不到EXTI0_IRQhandler里面来,除非软件中断。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-6 06:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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