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

用STM32F103RET的PB8来做外部中断的问题

[复制链接]
wqlalala 发布时间:2013-3-28 19:24
       我做的一个板子上用STM32F103RET6的PB8的IO管脚来接收外部轻触按键输入的中断。我将这个PB8初始化并使能后运行,不去按轻触按键时发现程序总是不断的触发中断,使程序总是处于中断服务当中服务当中。下面是我的中断初始化和中断处理函数的代码,显示输出的计数器在不断的加一计数。这个PB8的管脚只连接了轻触按键,PB8通过10K电阻上拉到3.3V。我用示波器探了这个PB8也没发现有触发中断的脉冲产生,是一个平稳的3.3V。不知道出了什么问题,还望路过的大侠指点小弟。

    void Exti_IOPort_Init(void)
{
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);

        EXTI_InitStructure.EXTI_Line =EXTI_Line8;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);

        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}

void EXTI9_5_IRQHandler(void)
{
        unsigned short Itemp;
        ITStatus ItState,FlagState;

        ItState = EXTI_GetITStatus(EXTI_Line8);
        FlagState = EXTI_GetFlagStatus(EXTI_Line8);
        
        if((ItState != RESET) & (FlagState != RESET))
                {
                KEY2_NUM++;
                EXTI_ClearITPendingBit(EXTI_Line8);
                EXTI_ClearFlag(EXTI_Line8);
                ShowString88(3, 0, "K2 On!Count:");
                ShowCharNum(3, 12, KEY2_NUM);
                }
<span style="color: rgb(68, 68, 68); font-family: Tahoma, Helvetica, SimSun, sans-serif; line-height: 18px; background-color: rgb(238, 238, 238);">        for(Itemp=0;Itemp
收藏 评论7 发布时间:2013-3-28 19:24

举报

7个回答
zykzyk-93033 回答时间:2013-3-28 20:35:03

RE:用STM32F103RET的PB8来做外部中断的问题

你的本意是按键按下中断,可是你设置的是EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;上升沿中断,这个就是原因了。换成EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;肯定可以了
wqlalala 回答时间:2013-3-29 08:58:18

回复:用STM32F103RET的PB8来做外部中断的问题

        这个 EXTI_InitStructure.EXTI_Trigger我也改成EXTI_Trigger_Falling试过,结果还是一样的现象。我在电路上另外还有个一个轻触按键,也是一样的电路,只是连接到了PA0上,用 EXTI_InitStructure.EXTI_Trigger = Rising是没问题的的,每次按下去就产生一次中断。另外从理论上来分析的话,上下沿触发应该都是可以的,只是触发的时间是不一样的,一个是在按键按下的时候触发,一个是在按键按下去后等弹回来的时候触发。就是设置成上升沿触发,我按键不按下去,也不会产生上升沿电平,应该一直都是3.3V电平,就不会触发中断产生才对。
       不过还是谢谢二楼的建议。
wallwall1111 回答时间:2015-6-9 14:16:17
请问你的问题解决了吗?我也遇到一个类似的问题
我用到了GPIOG0-5一共6个按键,当我按下任意一个按键时   有可能其他按键的中断也会产生,我同样用示波器观察了STM32的引脚,都是稳定在3.3V。奇了怪了!
求指导!
novemer 回答时间:2015-6-21 00:43:50
wallwall1111 发表于 2015-6-9 14:16
请问你的问题解决了吗?我也遇到一个类似的问题
我用到了GPIOG0-5一共6个按键,当我按下任意一个按键时    ...

我也遇到这个问题了,区别是一直进中断,每次都清标志了,还是不停的进,诶。
chuxiaobo 回答时间:2017-6-5 15:09:48
http://www.eeboard.com/bbs/thread-4763-1-1.html请参考该文,时钟问题
chuxiaobo 回答时间:2017-6-5 15:10:25
http://www.eeboard.com/bbs/thread-4763-1-1.html请参考该文,时钟问题
zhao.zhao 回答时间:2017-6-5 17:40:38
基本可以判断为PA8的上拉电阻没焊好

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

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