OpenEdv-开源电子网

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

外部中断触发问题

[复制链接]

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2012-12-22
在线时间
65 小时
发表于 2014-12-20 12:52:03 | 显示全部楼层 |阅读模式
5金钱
最近做外部中断出现一个问题,
我设置的是PC3 为下降沿触发 外部中断,PA0~7为自己定义的总线,但是当PA3电平发生变化时会进入外部中断3函数, 
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);这调语句
好像没什么用一样;不管我怎么配置这调语句都是PA3触发中断。

问题:我程序问题出在那里?

附程序:
void other_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); //使能PF端口时钟
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PC端口时钟

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //INIT0-->C.3端口
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;   //下拉输入
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
 GPIO_Init(GPIOC, &GPIO_InitStructure);   //下拉输入 ,IO口速度为50MHz

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // K1-->F.1
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
 GPIO_Init(GPIOF, &GPIO_InitStructure);   //开漏输出 ,IO口速度为50MHz

 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1; //FMQ-->F.0 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
 GPIO_Init(GPIOF, &GPIO_InitStructure);   //推挽输出 ,IO口速度为50MHz
 GPIO_SetBits(GPIOF,GPIO_Pin_0); //PF.0 输出高 
}

void EXTI_INIT0(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;
 EXTI_InitTypeDef EXTI_InitStruct;  
 /*时钟配置函数 */
 RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO,ENABLE); //使能功能复用时钟AFIO

  NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn; //设置外部中断3
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; //抢占优先级为2
 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //从优先级为0
 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中断
 NVIC_Init(&NVIC_InitStructure); //设置该中断

 /*外部中断映射配置 */
 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);//设置GPIOC.3为外部中断3

 EXTI_InitStruct.EXTI_Line=EXTI_Line3; //设置外部中断3
 EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt; //设置中断模式为中断
 EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling; //设置输入线路下降沿为中断请求
 EXTI_InitStruct.EXTI_LineCmd=ENABLE; //使能该中断
 EXTI_Init(&EXTI_InitStruct); //根据配置设置外部函数
}

void EXTI3_IRQHandler(void)
{
   if(EXTI_GetITStatus(EXTI_Line3) !=RESET)
   {
k1=~k1;    //PC3
EXTI_ClearITPendingBit(EXTI_Line3);    //清除LINE3上的中断标志位 
  }
}







最佳答案

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

RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO,ENABLE);  //使能功能复用时钟AFIO----这句错了吧 C时钟没有使能呢
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2014-12-20 12:52:04 | 显示全部楼层
RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO,ENABLE);  //使能功能复用时钟AFIO----这句错了吧 C时钟没有使能呢
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5782
金钱
5782
注册时间
2013-11-22
在线时间
1212 小时
发表于 2014-12-20 12:52:04 | 显示全部楼层
LZ 你把复用时钟复位了   而不是使能了
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2014-12-20 14:14:52 | 显示全部楼层
#include "exti.h"
#include "led.h"
#include "key.h"
#include "delay.h"
#include "usart.h"


//外部中断初始化程序
//初始化PA0,PA13,PA15为中断输入.

u8 Extix_05_flag=0;
//u8 Extix_11_flag=0;
//u8 Extix_12_flag=0;

void EXTIX_Init(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;
  EXTI_InitTypeDef EXTI_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

   GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); //关闭jtag
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);

//GPIOB.5   上拉输入
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
   GPIO_Init(GPIOB, &GPIO_InitStructure);

   //GPIOB.5
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource5);
  EXTI_InitStructure.EXTI_Line= EXTI_Line5;
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
   EXTI_Init(&EXTI_InitStructure);


   NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键所在的外部中断通道
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //先占优先级4位,共16级
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //先占优先级0位,从优先级4位
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
   NVIC_Init(&NVIC_InitStructure); 
}

void EXTI9_5_IRQHandler(void)
{  
    if(EXTI_GetITStatus(EXTI_Line5) != RESET)
{
if(Extix_05_flag<250)
Extix_05_flag++;
EXTI_ClearITPendingBit(EXTI_Line5);  
}
if(EXTI_GetITStatus(EXTI_Line6) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line6); 
}
if(EXTI_GetITStatus(EXTI_Line7) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line7);  
}
if(EXTI_GetITStatus(EXTI_Line8) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line8); 
}
    if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line9);  //清除EXTI线路挂起位
}
}
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2014-12-20 14:16:07 | 显示全部楼层
这个是我配置好的PB5下降沿有效。注意看有这句哦:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2012-12-22
在线时间
65 小时
 楼主| 发表于 2014-12-21 16:05:23 | 显示全部楼层
一语点醒梦中人····谢谢各位
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 18:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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