搜索
bottom↓
回复: 11

为什么stm32的外部中断触发不了?

[复制链接]

出0入0汤圆

发表于 2012-5-4 16:55:46 | 显示全部楼层 |阅读模式
本帖最后由 enterpriseZ 于 2012-5-4 22:49 编辑

刚刚接触stm32f107不久,今天在学习它的外部中断模块时遇到一点问题,就是设置好中断之后,主程序在死循环里面等待,可是中断程序就是进不去啊!这到底是为什么啊?对着书上看了很久也看不明白啊,求帮助啊!……
PS:程序如下


#include "stm32f10x.h"
void Dis_Init ( void )                                        //显示LED的初始化,接在PD2上的
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOD, ENABLE );
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_Init ( GPIOD, &GPIO_InitStructure );
}
void Interrupt_Init ( void )
{
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOC, ENABLE );                                                         //也试过其他的引脚,结果一样
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                                 //浮空输入
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_Init ( GPIOC, &GPIO_InitStructure );

        GPIO_EXTILineConfig ( GPIO_PortSourceGPIOC, GPIO_PinSource13 );                  //选取PC13口作为中断的输入口
        EXTI_InitStructure.EXTI_Line = EXTI_Line13;                                                          
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                                  //下降沿触发中断
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init ( &EXTI_InitStructure );
       
        NVIC_PriorityGroupConfig ( NVIC_PriorityGroup_1 );                                          //分组方式选择第一组
        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;                                          //使能EXTI通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;                          //先占优先级为0,即抢占优先级为0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                          //从优先级为0,即响应优先级为0
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                  //使能
        NVIC_Init ( &NVIC_InitStructure );                                                                          //初始化
}
void delay ( u32 count )
{
        for ( ; count != 0; count -- );
}
int main ( void )                                       
{
        Dis_Init ();
        Interrupt_Init ();
        while (1)
        {
                //死循环
        }
}
void EXTI15_10_IRQHandler ( void )                                //中断处理函数
{
        if ( EXTI_GetITStatus ( EXTI_Line13 ) != RESET )
        {
                EXTI_ClearFlag ( EXTI_Line13 );
                EXTI_ClearITPendingBit ( EXTI_Line13 );
                GPIO_SetBits ( GPIOD, GPIO_Pin_2 );
                delay ( 0xeffffff );
                GPIO_ResetBits ( GPIOD, GPIO_Pin_2 );
                delay ( 0xeffffff );
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-5-4 22:28:50 | 显示全部楼层
   GPIO_EXTILineConfig ( GPIO_PortSourceGPIOC, GPIO_PinSource13 );                  //选取PB0口作为中断的输入口
这一行明明是设置GPIOC,怎么是用PB0呢?而且PB的时钟也没有打开。

出0入0汤圆

 楼主| 发表于 2012-5-4 22:46:04 | 显示全部楼层
rakcart 发表于 2012-5-4 22:28
GPIO_EXTILineConfig ( GPIO_PortSourceGPIOC, GPIO_PinSource13 );                  //选取PB0口作为 ...

不好意思啊,后面的注释我可能改过,但是我整个程序中用的都是PC13这个IO口啊!但是在实际应用的过程中有点问题啊!不知道是为什么?

出0入0汤圆

发表于 2012-5-5 11:58:38 | 显示全部楼层
enterpriseZ 发表于 2012-5-4 22:46
不好意思啊,后面的注释我可能改过,但是我整个程序中用的都是PC13这个IO口啊!但是在实际应用的过程中有 ...

PC13链接有外部按键吗?

出0入0汤圆

发表于 2012-5-5 12:23:14 | 显示全部楼层
开AFIO时钟

出0入0汤圆

 楼主| 发表于 2012-5-5 12:28:04 | 显示全部楼层
b260123292 发表于 2012-5-5 12:23
开AFIO时钟

这个需要怎么设置啊?能顺便说一下嘛?

出0入0汤圆

 楼主| 发表于 2012-5-5 12:28:36 | 显示全部楼层
rakcart 发表于 2012-5-5 11:58
PC13链接有外部按键吗?

有一个独立按键,含上拉电阻

出0入0汤圆

发表于 2012-5-5 12:52:46 | 显示全部楼层
enterpriseZ 发表于 2012-5-5 12:28
这个需要怎么设置啊?能顺便说一下嘛?

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

出0入0汤圆

 楼主| 发表于 2012-5-5 13:43:20 | 显示全部楼层
rakcart 发表于 2012-5-5 12:52
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

好了,表示感谢!!!!

出0入0汤圆

发表于 2012-5-5 21:53:05 | 显示全部楼层
时钟木有开

出0入0汤圆

 楼主| 发表于 2012-5-6 00:07:48 | 显示全部楼层
abnerle 发表于 2012-5-5 21:53
时钟木有开

那只要GPIO不作为普通的IO使用的话,都要使能相应的时钟么?

出0入0汤圆

发表于 2012-5-6 19:34:32 | 显示全部楼层
enterpriseZ 发表于 2012-5-6 00:07
那只要GPIO不作为普通的IO使用的话,都要使能相应的时钟么?

不管干什么,按理说都要先开的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 10:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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