OpenEdv-开源电子网

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

外部中断GPIOC不能响应,本应GPIOC响应的在GPIOA上进入中断了

[复制链接]

2

主题

14

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-7-13
在线时间
0 小时
发表于 2014-7-16 17:44:38 | 显示全部楼层 |阅读模式
5金钱
求解STM32F103RBT6  原子的mini板  出现了一个搞不通的问题,一个外部按键中断 就有这么一个问题:外部中断GPIOC不能响应,本应GPIOC响应的在GPIOA上进入中断了。。本想在中断上不会出问题,可是这样的情况真的很困扰,,希望各位朋友帮忙解答一下,谢谢了。
下面贴上代码:
[mw_shl_code=c,true]void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO , ENABLE);//打开GPIOA GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8| GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_Init(GPIOB, &GPIO_InitStructure); } /**************************** EXTI函数定义区*********************************/ /*--************************************************************************ ***函数名称:void EXTI_Configuration(void) ***功能:外部中断初始化 ***参数: 无 ***返回值:无 ************************************************************************--*/ void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; //外部设备中断恢复默认参数 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6|GPIO_PinSource7|GPIO_PinSource8|GPIO_PinSource9); EXTI_InitStructure.EXTI_Line = EXTI_Line6|EXTI_Line7|EXTI_Line8|EXTI_Line9; //设定所需产生外部中断的通道,一共19个。 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //产生中断 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE; //启动中断的接收 EXTI_Init(&EXTI_InitStructure); //外部设备中断启动 // GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource15); EXTI_InitStructure.EXTI_Line = EXTI_Line15; EXTI_Init(&EXTI_InitStructure); } /**************************** NVIC(中断向量)函数定义区*********************************/ /*--************************************************************************ ***函数名称:void NVIC_Configuration(void) ***功能:中断优先级初始化 ***参数: 无 ***返回值:无 ************************************************************************--*/ void NVIC_EXTI_Configuration(void) //中断设置 { NVIC_InitTypeDef NVIC_InitStructure; //定义中断变量 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //设置哪一个通道中断(中断名) NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //启动中断 NVIC_Init(&NVIC_InitStructure); //中断初始化 NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //设置哪一个通道中断(中断名) NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //响应优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //启动中断 NVIC_Init(&NVIC_InitStructure); } void EXTI15_10_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line15) != RESET) //是否EXTI12线路中断 { exti_flag = 5; } EXTI_ClearITPendingBit(EXTI_Line15); } void EXTI9_5_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line6) != RESET) //是否EXTI12线路中断 { exti_flag = 4; } if(EXTI_GetITStatus(EXTI_Line7) != RESET) //是否EXTI10线路中断 { exti_flag = 3; } if(EXTI_GetITStatus(EXTI_Line8) != RESET) //是否EXTI10线路中断 { exti_flag = 2; } if(EXTI_GetITStatus(EXTI_Line9) != RESET) //是否EXTI10线路中断 { exti_flag = 1; } EXTI_ClearITPendingBit(EXTI_Line6); EXTI_ClearITPendingBit(EXTI_Line7); EXTI_ClearITPendingBit(EXTI_Line8); EXTI_ClearITPendingBit(EXTI_Line9); } [/mw_shl_code]


最佳答案

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

回复【5楼】正点原子: --------------------------------- 原子哥,问题解决了,,我把那五个中断的GPIO口初始化全部分开写之后可以了,中断配置也全分开写了,最后正常了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-7-13
在线时间
0 小时
 楼主| 发表于 2014-7-16 17:44:39 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥,问题解决了,,我把那五个中断的GPIO口初始化全部分开写之后可以了,中断配置也全分开写了,最后正常了。
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2014-7-16 21:29:19 | 显示全部楼层
是不是中断口没对应正确
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-16 23:01:53 | 显示全部楼层
看上去貌似正常.
建议楼主先调试单路中断,单路ok了再联调.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-7-13
在线时间
0 小时
 楼主| 发表于 2014-7-16 23:44:30 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
单路是正常的,加五个就不正常了,B15能正常中断,但是C6-C9的中断就都没用了,而且把A6-A9拉低会进中断。。。这很不可思议。。重建工程之后还是这个原因。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-17 00:00:35 | 显示全部楼层
把这句话:GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6|GPIO_PinSource7|GPIO_PinSource8|GPIO_PinSource9);

放到PB15初始化的位置试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-7-13
在线时间
0 小时
 楼主| 发表于 2014-7-17 00:13:44 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥,还是不行。。。。我看了GPIOC6-9都是普通IO口恩。而且我还有个其他的工程是PA8-PA12的五个外部中断,那个工程运行很正常。可这个怎么样就调不出来。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-5 02:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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