你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103ZGT6外部中断exti异常

[复制链接]
xdpzxh-252225 提问时间:2011-6-15 23:12 /
各位,我遇到一个很离奇的问题,我设置上升沿触发,但检测到一个外部中断时,其上升沿/下降沿都触发,我只需要上升沿触发,很奇怪,那位大侠指点下!  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 使能AFIO时钟  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // GPIOB_11;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
void GPIO_Configuration(void)  
{  
    GPIO_InitTypeDef GPIO_InitStructure;  


    /* Configure PB11 as input floating */  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  
    GPIO_Init(GPIOB,&GPIO_InitStructure);  


}  
继续配置NVIC  
/**  
  * @brief  Configures NVIC and Vector Table base location.  
  * @param  None  
  * @retval : None  
  */  
void NVIC_Configuration(void)  
{  
    NVIC_InitTypeDef NVIC_InitStructure;  
    /* Configure the NVIC Preemption Priority Bits*/   
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  
    /* Set the Vector Table base location at 0x08000000 */   
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

    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);     



}  
配置EXTI ,PB11连接到EXTI  

void EXTI_Configuration(void)  
{  
    EXTI_InitTypeDef EXTI_InitStructure;  
    /*connect PB11 to EXTI*/  
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource11);  
    /*Config EXTI11*/  
    EXTI_InitStructure.EXTI_Line = EXTI_Line11;  
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  //设置上升沿触发
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;  
    EXTI_Init(&EXTI_InitStructure);  
}  


在中断函数里面记得清除标志位  

void EXTI15_10_IRQHandler(void)  
{  
     if(EXTI_GetITStatus(EXTI_Line11)!= RESET)  
     {  
        EXTI_ClearITPendingBit(EXTI_Line11);  
        GPIO_SetBits(GPIOC, GPIO_Pin_5);//PC5连蜂鸣器,让蜂鸣器响
        GPIO_SetBits(GPIOC, GPIO_Pin_6);//PC6连指示灯,让指示灯亮
        Delayms(100); //延时100ms
     }  
}  
在主函数里面蜂鸣器一直关着,指示灯一直灭,我PB11连接一红外光电对射管,光电管中间被遮挡后,就一直高电平。遮挡瞬间,上升沿触发蜂鸣器响一次和指示灯亮一下,然后一直高电平,无论多久时间后拿开遮挡物瞬间变下降沿又触发一次(异常),蜂鸣器又响一次,指示灯又亮一下后变为低电平,很郁闷。用泰克2440示波器能观察到很好的触发信号,遮挡一次,只有一次高电平信号。希望大侠指点下。
收藏 评论1 发布时间:2011-6-15 23:12

举报

1个回答
废鱼 回答时间:2011-6-16 07:57:39

RE:STM32F103ZGT6外部中断exti异常

IO口配置的问题,你不能配置为输入上拉,这样当检测到信号以后内部会产生你看不到的上升沿。应该配置为输入悬空 GPIO_Mode_IPD。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版