OpenEdv-开源电子网

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

stm32如何设置上升沿和下降沿双触发中断

[复制链接]

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-5-19
在线时间
0 小时
发表于 2013-8-8 14:28:39 | 显示全部楼层 |阅读模式
stm32如何设置上升沿和下降沿双触发中断,求解啊。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2022-12-8
在线时间
1 小时
发表于 2022-12-8 11:25:50 | 显示全部楼层
请教各位高手,如果是双边沿中断,进入中断函数后,怎么判断上升沿和下降沿?

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{

        /*第一通道*/
        if (GPIO_PIN_4==GPIO_Pin)
         {
                if (上升沿)

                a--;
         else if (下降沿)
                a++;

         }
回复 支持 1 反对 0

使用道具 举报

10

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2012-10-11
在线时间
15 小时
发表于 2013-8-8 14:33:06 | 显示全部楼层
Ex_NVIC_Config(GPIO_A,0,FTIR);  //下降沿触发
Ex_NVIC_Config(GPIO_C,13,FTIR);  //下降沿触发
Ex_NVIC_Config(GPIO_A,8,FTIR);  //下降沿触发
  Ex_NVIC_Config(GPIO_D,3,FTIR);  //下降沿触发


#ifndef __SYS_H
#define __SYS_H  
#include <stm32f10x_map.h>
#include <stm32f10x_nvic.h>
#define FTIR   1  //下降沿触发
#define RTIR   2  //上升沿触发
回复 支持 反对

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-5-19
在线时间
0 小时
 楼主| 发表于 2013-8-8 14:36:37 | 显示全部楼层
回复【2楼】MDC012170:
---------------------------------
我的意思是不管上升沿还是下降沿都会触发一个io口的外部中断
回复 支持 反对

使用道具 举报

10

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2012-10-11
在线时间
15 小时
发表于 2013-8-8 14:38:03 | 显示全部楼层
0X03就是任意触发
回复 支持 反对

使用道具 举报

10

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2012-10-11
在线时间
15 小时
发表于 2013-8-8 14:42:53 | 显示全部楼层


回复 支持 反对

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-5-19
在线时间
0 小时
 楼主| 发表于 2013-8-8 14:59:27 | 显示全部楼层
恩,刚才看了,但是如果这样设置,我的io是设置成上拉还是下拉啊???
回复 支持 反对

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-5-19
在线时间
0 小时
 楼主| 发表于 2013-8-8 14:59:42 | 显示全部楼层
回复【5楼】MDC012170:
---------------------------------
恩,刚才看了,但是如果这样设置,我的io是设置成上拉还是下拉啊???
回复 支持 反对

使用道具 举报

10

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2012-10-11
在线时间
15 小时
发表于 2013-8-8 15:11:17 | 显示全部楼层
我想只要你触发外部中断电压满足触发条件的话应该设上拉和下来都没关系的吧,这只是我的猜想,我也是新手,你就下进去试试看就知道了。
回复 支持 反对

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-5-19
在线时间
0 小时
 楼主| 发表于 2013-8-8 15:15:46 | 显示全部楼层
回复【8楼】MDC012170:
---------------------------------
恩,正在试验呢,灰常感谢啊。。。呵呵呵
回复 支持 反对

使用道具 举报

3

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
371
金钱
371
注册时间
2013-6-1
在线时间
54 小时
发表于 2017-8-16 18:17:41 | 显示全部楼层
嗨!哥们,你的那个问题解决了么?我遇到跟你同样的问题
回复 支持 反对

使用道具 举报

7

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
745
金钱
745
注册时间
2016-1-20
在线时间
78 小时
发表于 2017-10-20 09:08:52 | 显示全部楼层
我的STM32F030 设置双触发,老是出错。。。。。。
回复 支持 反对

使用道具 举报

7

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
745
金钱
745
注册时间
2016-1-20
在线时间
78 小时
发表于 2017-10-20 14:58:09 | 显示全部楼层
如果你是用库函数,这里有程序可以参考(STM32F030)
        EXTI_InitStruct.EXTI_Line = EXTI_Line2;
        EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling ;//EXTI_Trigger_Falling;
        EXTI_InitStruct.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStruct);
回复 支持 反对

使用道具 举报

3

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2019-5-8
在线时间
27 小时
发表于 2019-5-8 19:58:20 | 显示全部楼层
我也是一个IO要分别做成上升沿触发和下降沿触发 怎么搞?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2018-7-11
在线时间
1 小时
发表于 2020-4-6 15:36:44 | 显示全部楼层
刚学到IO中断   也是想设置双边触发   看到楼上回复   经过实验  发现双边沿触发条件
除  EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling ;   外
还需要GPIO设置为   上拉输入  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入

贴上代码
/////////
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);//使能PORTA,PORTE时钟
//初始化GPIOA.8,       上拉输入
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

  //GPIOA.8          中断线以及中断初始化配置 上升沿触发 PA8  
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource8);
        EXTI_InitStructure.EXTI_Line=EXTI_Line8;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_Init(&EXTI_InitStructure);                //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器




////EXTI15_10_IRQn
          NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;                        //使能按键WK_UP所在的外部中断通道
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //抢占优先级2,
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;                                        //子优先级3
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //使能外部中断通道
          NVIC_Init(&NVIC_InitStructure);
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2020-10-10
在线时间
16 小时
发表于 2020-11-26 09:13:19 | 显示全部楼层
MDC012170 发表于 2013-8-8 15:11
我想只要你触发外部中断电压满足触发条件的话应该设上拉和下来都没关系的吧,这只是我的猜想,我也是新手, ...

你要作为外部中断输入的IO口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。否则可能导致中断不停的触发。在干扰较大的地方,就算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一定程度防止外部干扰带来的影响。我也知道才知道。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-10-23
在线时间
6 小时
发表于 2022-8-5 08:49:31 | 显示全部楼层
最近刚好用到STM32的外部中断的上升沿触发和下降沿触发,来学习一下
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2022-12-8
在线时间
1 小时
发表于 2022-12-8 08:25:00 | 显示全部楼层
在Mbed OS能做双边沿中断,上升沿和下降沿分别有两个中断函数
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2022-12-8
在线时间
1 小时
发表于 2022-12-8 08:26:49 | 显示全部楼层
Murphyer 发表于 2020-4-6 15:36
刚学到IO中断   也是想设置双边触发   看到楼上回复   经过实验  发现双边沿触发条件
除  EXTI_InitStruct ...

你这个只能是一个中断,不是上升和下降分别中断
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2022-12-8
在线时间
1 小时
发表于 2022-12-8 08:28:40 | 显示全部楼层
MDC012170 发表于 2013-8-8 14:33
Ex_NVIC_Config(GPIO_A,0,FTIR);&nbsp;                        //下降沿触发
        Ex_NVIC_Config(GPIO_C,13,FTIR);&nbsp;                        //下降 ...

请教一下,这个怎么用?我要上升沿的时候做一下处理,下降沿的时候做一下处理。。。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2022-12-8
在线时间
1 小时
发表于 2022-12-8 08:30:30 | 显示全部楼层
在Mbed OS 可以做双边沿中断,上升沿和下降沿分别做两个中断函数
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2022-12-8
在线时间
1 小时
发表于 2022-12-8 10:43:03 | 显示全部楼层
nokiagx 发表于 2022-12-8 08:28
请教一下,这个怎么用?我要上升沿的时候做一下处理,下降沿的时候做一下处理。。。

谢谢,回得挺快的,你这个是配置吧?处理函数呢?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 20:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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