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

查看: 3728|回复: 1

STM32F103ZGT6外部中断exti异常

[复制链接]

1

主题

10

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-6-15 23:12:02 | 显示全部楼层 |阅读模式
各位,我遇到一个很离奇的问题,我设置上升沿触发,但检测到一个外部中断时,其上升沿/下降沿都触发,我只需要上升沿触发,很奇怪,那位大侠指点下!  
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示波器能观察到很好的触发信号,遮挡一次,只有一次高电平信号。希望大侠指点下。
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-6-16 07:57:39 | 显示全部楼层

RE:STM32F103ZGT6外部中断exti异常

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

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版