OpenEdv-开源电子网

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

最近用到stm32的外部中断的时候,又碰到了一个奇怪的问题,百思不得其解,求大神指导

[复制链接]

31

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2013-4-22
在线时间
7 小时
发表于 2014-11-13 15:46:40 | 显示全部楼层 |阅读模式
5金钱
       最近,使用stm32的外部中断,EXTI15_10_IRQHandler死活不受控制,便又折腾了半天发现了一个奇怪的事,我试过了EXTI0_IRQHandler、EXTI2_IRQHandler、EXTI3_IRQHandler,外部中断都没有问题,可是EXTI0_IRQHandler,我没有给信号也不停的往中断跑,代码如下:
void EXTIx_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);  //使能PA端口时钟 复用功能

// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //选中管脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_3|GPIO_Pin_14; //选中管脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //上拉输RU
GPIO_Init(GPIOA,&GPIO_InitStructure);


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //选择中断分组2

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //中断优先级初始化
NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //中断优先级初始化
NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //中断优先级初始化
NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //中断优先级初始化
NVIC_Init(&NVIC_InitStructure);

//GPIO 中断线以及中断初始化配置,下降沿触发
EXTI_ClearITPendingBit(EXTI_Line0);
EXTI_ClearITPendingBit(EXTI_Line2);
EXTI_ClearITPendingBit(EXTI_Line3);
EXTI_ClearITPendingBit(EXTI_Line14);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource2);//GPIOa2
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource3);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource14);
EXTI_InitStructure.EXTI_Line = EXTI_Line0|EXTI_Line2|EXTI_Line3|EXTI_Line14;//|EXTI_Line15;  //中短线
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}

void EXTI2_IRQHandler(void)
{

if(EXTI_GetITStatus(EXTI_Line2) !=RESET)
{
TIMxCHx_PinLv_Count++;
EXTI_ClearITPendingBit(EXTI_Line2);   //清除line2上的中断标志

}

}

void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) !=RESET)
{
TIMxCHx_PinLv_Count++;
EXTI_ClearITPendingBit(EXTI_Line0);   //清除line2上的中断标志

}

}

void EXTI3_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line3) !=RESET)
{
TIMxCHx_PinLv_Count++;
EXTI_ClearITPendingBit(EXTI_Line3);   //清除line2上的中断标志

}

}

void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line13) !=RESET)
{
TIMxCHx_PinLv_Count++;
EXTI_ClearITPendingBit(EXTI_Line13);
}
if(EXTI_GetITStatus(EXTI_Line14) !=RESET)
{
TIMxCHx_PinLv_Count++;
EXTI_ClearITPendingBit(EXTI_Line14);
}
if(EXTI_GetITStatus(EXTI_Line15) !=RESET)
{
TIMxCHx_PinLv_Count++;
EXTI_ClearITPendingBit(EXTI_Line15);
}
}
EXTI0_IRQHandler、EXTI2_IRQHandler、EXTI3_IRQHandler这三个已经实测,都没有问题,可是EXTI15_10_IRQHandler不受控制,一样的初始化代码,实在是搞不明白了,求大神们指点啊

http://www.tudou.com/programs/view/h5G_H9Kpk04/?bid=03&pid=1&resourceId=375113802_03_05_01
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5782
金钱
5782
注册时间
2013-11-22
在线时间
1212 小时
发表于 2014-11-13 18:41:36 | 显示全部楼层
PA14  用做了下载接口    关闭JTAG 和SW才能做IO口用   你可以试试PB14
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-13 20:06:28 | 显示全部楼层
所有中断我都用过,没发现你说的问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

31

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2013-4-22
在线时间
7 小时
 楼主| 发表于 2014-11-14 10:58:26 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
你也是用的库函数么,难道是我的芯片坏了,不过哪几个io输出高低电平受控制
http://www.tudou.com/programs/view/h5G_H9Kpk04/?bid=03&pid=1&resourceId=375113802_03_05_01
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-14 21:45:28 | 显示全部楼层
回复【4楼】华夏小川:
---------------------------------
我用寄存器的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

87

主题

569

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2014-9-30
在线时间
140 小时
发表于 2014-11-15 01:08:10 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子老大::昨天下单买了 F103RCT6 的开发板,,

就是 相中 你的 “寄存器版本”。。(重庆)。。

说起:ST的库,就老火,,无法 完全 脱离硬件。

还不如:跟着 原子老大 学习 寄存器编程。小开发足够。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-15 17:33:05 | 显示全部楼层
回复【6楼】caosix:
---------------------------------
谢谢支持
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 03:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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