STM32F051为什么进不了stm32f4 外部中断断

STM32无法进入外部中断 - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
STM32无法进入外部中断
19:48:18  
各位大侠好&&小弟今年刚毕业学习STM32&&现在编程外部中断时无法进入中断函数&&恳请大侠们帮小弟看看&&小弟感激不尽!&&
PC6控制LED灯,高电平亮,低电平灭;&&PD13连接按键,外部中断,接有上拉,通过10K电阻接入3.3V, 程序无法进入中断,将PD13改为PD4,程序可以正常中断。
&&程序如下:
& & 正常灯亮,按键后灯灭,但按键后灯还亮着& &&&编程软件&&MDK5.10& & STM32F103VBT6& &程序编译无错误
#include &stm32f10x_lib.h&
EXTI_InitTypeDef EXTI_InitS
ErrorStatus HSEStartUpS
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void delay(u32 n);
int main(void)
#ifdef DEBUG
&&debug();
RCC_Configuration();
NVIC_Configuration();
GPIO_Configuration();
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13);
& &EXTI_InitStructure.EXTI_Line = EXTI_Line13;
& &EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I
& &EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_F
& &EXTI_InitStructure.EXTI_LineCmd = ENABLE;
& &EXTI_Init(&EXTI_InitStructure);
& &delay(0xffff);
&&GPIO_SetBits(GPIOC, GPIO_Pin_6);
& & & &&&delay(0xffff);
& &EXTI_GenerateSWInterrupt(EXTI_Line13);
& &while (1)
void RCC_Configuration(void)
&&RCC_DeInit();
&&RCC_HSEConfig(RCC_HSE_ON);
&&HSEStartUpStatus = RCC_WaitForHSEStartUp();
& & & & if(HSEStartUpStatus == SUCCESS)
& &FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
& &FLASH_SetLatency(FLASH_Latency_2);
& &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)
& &RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOC
& && && && && && && && & | RCC_APB2Periph_AFIO, ENABLE);
void GPIO_Configuration(void)
&&GPIO_InitTypeDef GPIO_InitS
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
&&GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
&&GPIO_Init(GPIOC, &GPIO_InitStructure);
& & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
&&GPIO_Init(GPIOD, &GPIO_InitStructure);
void NVIC_Configuration(void)
&&NVIC_InitTypeDef NVIC_InitS
#ifdef&&VECT_TAB_RAM&&
&&NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else&&/* VECT_TAB_FLASH&&*/
&&NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);& &
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
&&NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQC
&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
&&NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
&&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
&&NVIC_Init(&NVIC_InitStructure);
#ifdef&&DEBUG
void assert_failed(u8* file, u32 line)
&&while (1)
void EXTI15_10_IRQHandler(void)
{&&delay(0xffff);
& & & & if(EXTI_GetITStatus(EXTI_Line13) != RESET)
& & GPIO_ResetBits(GPIOC, GPIO_Pin_6);
& & EXTI_ClearITPendingBit(EXTI_Line13);
21:01:07  
在线等!{:12:}{:12:}
13:41:14  
各位大侠,问题已经解决,是固件库版本过低(V1.0)造成的,无法EXIT9_5中断,将固件库升级为V2.0后,EXIT9_5可以中断,谢谢大家关注!!
15:47:33  
具体可百度颖展ic芯片进官网查询
6个问题&&&&&&&&3421个浏览
5个问题&&&&&&&&1798个浏览
8个问题&&&&&&&&3864个浏览
每天选一个需要解决的问题,大家一起来帮忙。
授人玫瑰,手有余香
本次讲解答的问题例举:
1、NB-IoT有哪些技术特点和难点?
2、NB-IoT技术对物联网市场将带来什么样的影响。
3、NB-IoT物理层有哪些组成部分?
4、NB-IoT技术如何实现低功耗?
Powered by查看: 6741|回复: 18
关闭STM32外部外部中断的困惑
小弟使用STM32F103 + CC1101,在发送数据包的时候会产生一个中断,我不想接收这个外部中断,于是写了以下中断开关函数,在发送数据包前关中断,完成后开中断,
可是为什么在开中断的一瞬间,程序就会进入中断处理函数中,即使我在发送完成后延时一段时间,也会在开中断后马上进入外部中断处理函数????
& & & & EXTI_DISABLE();& & & & & & & &
& & & & halSpiStrobe(0x36);& && && && &
& && && &&&halRfSendPacket(txBuffer, 10);
& & & & Delay(100000);
& & & & EXTI_ENABLE();
void EXTI_ENABLE(void)
& & & & NVIC_InitTypeDef&&NVIC_InitS
& & & & 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 EXTI_DISABLE(void)
& & & & NVIC_InitTypeDef&&NVIC_InitS
& & & & NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;& & & &
& & & & NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;& & & && &
& & & & NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;& & & & & & & &
&&& & & & NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE; & & & & & & & &
& & & & NVIC_Init(&NVIC_InitStructure);
还有请问外部中断开关可不可以直接用下面的方式?
#define INT_OFF& & & & & & & & EXTI-&IMR &=~(1&&11)
#define INT_ON & & & & & & & & EXTI-&IMR |= (1&&11)& &
设置EXTI 外部中断
<font color="# 发表于
设置EXTI 外部中断
你说的是这样设置吧,我试过,关掉中断后,再打开就进入不了中断了,
你能把你的外部中断开关函数贴出来看看吗& & 谢谢你了
void RF_INT_ENABLE()
& & & & EXTI_InitTypeDef&&EXTI_InitS
& & & & NVIC_InitTypeDef&&NVIC_InitS
& & & & EXTI_InitStructure.EXTI_Line = EXTI_Line11;& && && && && && && &//选择中断线路6
& & & & EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I& && &//设置为中断请求,非事件请求
& & & & EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_F& & //下降沿触发
& & & & EXTI_InitStructure.EXTI_LineCmd = ENABLE;& && && && && && && && & //外部中断使能
& & & & EXTI_Init(&EXTI_InitStructure);
& & & & //外部中断NVIC配置
& & & & NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;& & & & & & & & //选择中断通道0
& & & & NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;& && &//抢占式中断优先级设置为0
& & & & NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;& && &&&//响应式中断优先级设置为0
& & & & NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;& && && &//使能中断
& & & & NVIC_Init(&NVIC_InitStructure);
void RF_INT_DISABLE()
& & & & EXTI_InitTypeDef&&EXTI_InitS
& & & & NVIC_InitTypeDef&&NVIC_InitS
& & & & EXTI_InitStructure.EXTI_Line = EXTI_Line11;& && && && && && && &//选择中断线路6
& & & & EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I& && &//设置为中断请求,非事件请求
& & & & EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_F& & //下降沿触发
& & & & EXTI_InitStructure.EXTI_LineCmd = DISABLE;& && && && && && && && & //外部中断使能
& & & & EXTI_Init(&EXTI_InitStructure);
& & & & //外部中断NVIC配置
& & & & NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;& & & & & & & & //选择中断通道0
& & & & NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;& && &//抢占式中断优先级设置为0
& & & & NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;& && &&&//响应式中断优先级设置为0
& & & & NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;& && && &//使能中断
& & & & NVIC_Init(&NVIC_InitStructure);
开中断之前把中断标志位清了,中断是判断该标志位的,如果不进中断服务函数,也没有手动清的话,打开中断后马上就会进入中断的
在下次打开中断之前先清终端标志!!
我的理解是,虽然你关了终端,但是中间不乏有中断来,只是没有响应,所以标志已经置位。所以要清标志
zzfei90 发表于
开中断之前把中断标志位清了,中断是判断该标志位的,如果不进中断服务函数,也没有手动清的话,打开中断后 ...
嗯,我后来在打开中断添加了清理函数:EXTI_ClearITPendingBit(EXTI_Line11);
可是这样一来就一直就不到中断处理函数。
用以下直接操作寄存器方式后,也一直进不到中断了,以前做按键测试的时候这种方法都可以,郁闷
EXTI-&IMR &=~(1&&11);
EXTI-&IMR |= (1&&11);
meme1oo 发表于
在下次打开中断之前先清终端标志!!
我的理解是,虽然你关了终端,但是中间不乏有中断来,只是没有响应, ...
嗯,我也是这样理解的,主要是添加后就一直不能再进入中断了
本帖子中包含更多资源
才可以下载或查看,没有帐号?
不是要清这个地方,而是要清中断标志寄存器,你清的是中断屏蔽寄存器,不是一回事儿
zzfei90 发表于
不是要清这个地方,而是要清中断标志寄存器,你清的是中断屏蔽寄存器,不是一回事儿 ...
我仔细看了参考手册,并没有看见外部中断标志寄存器,从上图外部中断框图上看是挂起寄存器,在中断处理函数中也是清的挂起寄存器
麻烦你能把清中断标志寄存器贴出来晒晒好吗?贴段正确关中断,再开中断的代码
嗯…我说错了,的确是挂起寄存器,把挂起寄存器清了还是不行吗?
关中断的时候:
EXTI-&IMR &=~(1&&11);&&//屏蔽中断
开中断的时候:
EXTI-&PR |= (1&&11);&&//先清挂起寄存器
EXTI-&IMR |= (1&&11);//开放中断
zzfei90 发表于
嗯…我说错了,的确是挂起寄存器,把挂起寄存器清了还是不行吗?
关中断的时候:
EXTI-&IMR &=~(1 ...
嗯,我照着这样做以后,就再也进不了中断了,用按键测试的时候不存在这个问题~~
进来学习学习
朋友,你这个问题解决了吗
Contiki 发表于
嗯,我照着这样做以后,就再也进不了中断了,用按键测试的时候不存在这个问题~~ ...
关中断的时候:
EXTI-&IMR &=~(1&&11);&&//屏蔽中断
开中断的时候:
EXTI-&PR |= (1&&11);&&//先清挂起寄存器
EXTI-&IMR |= (1&&11);//开放中断
我试过啦,这个好使····
heizi8474 发表于
朋友,你这个问题解决了吗
最终我换方案了
上面的中断一般使用没问题,可不知道在那个地方就有问题
Contiki 发表于
最终我换方案了
上面的中断一般使用没问题,可不知道在那个地方就有问题 ...
我的问题差不多,为了防止重复进中断,不得不在进入中断的时候清除中断位,关屏蔽位。但效果不如意
mark......
请问楼主的最终方案是?
请问楼主找到好的方法可以根据自己程序流程随意打开/关闭中断?????
阿莫电子论坛, 原"中国电子开发网"1048人阅读
最近几天折腾stm32,遇见了很郁闷的问题,外部中断进入不了,最后找到解决方法的时候觉得……唉,下面总结几条原因以便于大家少走弯路。
1.切记打开复用时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
2.最好加上一个EXTI_GenerateSWInterrupt(EXTI_LineX);产生软件中断便于判断是不是本来就配置错误;
3.开启硬件仿真:
4.正确设置中断向量地址:
#if defined (VECT_TAB_RAM)
& /* Set the Vector Table base location at 0x */&
& NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //设置中断向量在RAM
#else &/* VECT_TAB_FLASH &*/
& /* Set the Vector Table base location at 0x */&
& NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); //设置中断向量在FLASH中 &
以上的几种解决方案都是网络上整理所得,再次感谢各位网友的贡献!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5637次
排名:千里之外
(1)(1)(1)(2)查看: 4476|回复: 9
STM32F051为什么进不了外部中断?
主题帖子精华
新手上路, 积分 29, 距离下一级还需 21 积分
在线时间0 小时
RCC-&AHBENR |= 1&&17; //使能PORTA的时钟
RCC-&APB2ENR |= 1&&0; //使能SYSCFG时钟
SYSCFG-&EXTICR[0] = 2&&0; &//配置GPIOA0为外部中断0
EXTI-&IMR |=1&&0; & //打开线0上的中断请求
EXTI-&RTSR |=1&&0; //设置GPIOA0上升沿触发
void EXTI0_1_IRQHandler (void)
请问一下:
1、怎么进不了外部中断啊?
2、使能SYSCFG时钟后,如果不配置SYSCFG_EXTICR1(外部中断配置),那不默认GPIOA0\1\2\3都为外部中断脚引脚了吗?只是能否启用由EXTI_IMR(中断屏蔽寄存器)来决定?
主题帖子精华
新手上路, 积分 29, 距离下一级还需 21 积分
在线时间0 小时
在之前,也使能了GPIOA的时钟。
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间0 小时
回复【2楼】zhyong319:
---------------------------------
貌似还要配置下GPIOA-&CRL&=0XFFFF0000;//PA0,1,2,3设置成输入 &&
&&&&&&&&&&&&&GPIOA-&CRL|=0X;&&&
&&&&&&&&&&&&&GPIOA-&ODR|=0X00; &&&//PA0,1,2,3默认下拉(看你需要怎么触发中断了)
闭关修炼中!
主题帖子精华
新手上路, 积分 29, 距离下一级还需 21 积分
在线时间0 小时
回复【3楼】xstar:
---------------------------------
已经将PA0配置为输入了,&而且芯片在复位后默认所有IO口为输入模式。
我接仿真时,用软件置位相应的EXTI_SWIER(软件中断事件寄存器)位,能看到EXTI_PR(挂起寄存器)相应的线置位,但就是不能进入中断程序。
主题帖子精华
金钱102557
在线时间610 小时
&&中断分组设置都没设置.能进中断才怪.
好好看不完全手册吧,我讲的很明白了.
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
新手上路, 积分 29, 距离下一级还需 21 积分
在线时间0 小时
回复【5楼】正点原子:
---------------------------------
原子大哥,不好意思,我没有讲清楚,我用的是STM32F0-Discovery的板子。&使用的是STM32F051R8T6的芯片,在看手册时,没有看到设置中断分组啊。
主题帖子精华
金钱102557
在线时间610 小时
哦,我看错了,以为是我们的开发板呢...
F0没搞呢...帮不了你.
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
新手上路, 积分 29, 距离下一级还需 21 积分
在线时间0 小时
回复【7楼】正点原子:
---------------------------------
呵呵,还是灰常感谢啊!
主题帖子精华
初级会员, 积分 71, 距离下一级还需 129 积分
在线时间2 小时
回复【8楼】zhyong319:
---------------------------------
兄弟的外部中断正确了吗?后来是怎么搞好的?我现在也是进不了外部中断啊?
主题帖子精华
新手上路, 积分 34, 距离下一级还需 16 积分
在线时间1 小时
& & 还得设置nvic才行啊
Powered by

我要回帖

更多关于 stm32f051外部中断 的文章

 

随机推荐