如何区分触发STM32 外部中断的GPIOstm8l 引脚中断代码

1.GPIO&的正确设置GPIO_InitTypeDef GPIO_InitS
/* Enable GPIOD clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
/* Configure PD.03, PC.04, as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3); //PD3作为外部中断引脚
其中GPIO_EXITLineConfig函数的声明如下:/**
* @brief Selects the GPIO pin used as EXTI Line.
* @param GPIO_PortSource: selects the GPIO port to be used as source for EXTI lines.
* This parameter can be GPIO_PortSourceGPIOx where x can be (A..G).
* @param GPIO_PinSource: specifies the EXTI line to be configured.
* This parameter can be GPIO_PinSourcex where x can be (0..15).
* @retval None
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
2.中断初始化EXTI_InitTypeDef EXTI_InitS
// Configure EXTI Line3 to generate an interrupt on falling edge
EXTI_InitStructure.EXTI_Line = EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_F
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource4);
// Configure EXTI Line4 to generate an interrupt on falling edge
EXTI_InitStructure.EXTI_Line = EXTI_Line4;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_F
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
3.在NVIC_Configuration 中Configures the NVIC and Vector Table base address./* Configure the Priority Group to 2 bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* enabling interrupt */
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQC
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* Enable the EXTI3 Interrupt on PD.3 */
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQC
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* Enable the EXTI4 Interrupt on PD.4 */
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQC
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
4.在stm32f0x_it.c 中写入 中断处理函数/*******************************************************************************
* Function Name : EXTI3_IRQHandler
* Description : This function handles External interrupt Line 3 request.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void EXTI3_IRQHandler(void)
if(EXTI_GetITStatus(EXTI_Line3) != RESET)
// Led_RW_ON();
GPIO_SetBits(GPIOC, GPIO_Pin_4| GPIO_Pin_5 );
/* Clear the EXTI line 9 pending bit */
EXTI_ClearITPendingBit(EXTI_Line3);
/*******************************************************************************
* Function Name : EXTI4_IRQHandler
* Description : This function handles External interrupt Line 4 request.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void EXTI4_IRQHandler(void)
if(EXTI_GetITStatus(EXTI_Line4) != RESET)
//Led_RW_OFF();
GPIO_ResetBits(GPIOC, GPIO_Pin_4 | GPIO_Pin_5);
/* Clear the EXTI line 9 pending bit */
EXTI_ClearITPendingBit(EXTI_Line4);
注:本文参考:另一个示例:配置如下:void vcm_airbag_exti_set(void)
EXTI_InitTypeDef EXTI_InitS
NVIC_InitTypeDef NVIC_InitS
GPIO_InitTypeDef GPIO_InitS
/* Enable key GPIO clock */
RCC_AHB1PeriphClockCmd(AIRBAG_GPIO_RCC, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
/* Configure
pin(PD_15): airbag gpio */
GPIO_InitStructure.GPIO_Pin = AIRBAG_GPIO_PIN;
GPIO_Init(AIRBAG_GPIO_PORT, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
//?ò??EXTI?±??
SYSCFG_EXTILineConfig(AIRBAG_EXTI_PORT, AIRBAG_EXTI_PIN);
//?è??PD15??EXTI
/* Configure
// EXTI_DeInit();
EXTI_InitStructure.EXTI_Line = AIRBAG_EXTI_LINE;
//?è???? 1/2 ?
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I //?è??????????????? 1/2
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_F
// ?è?????????? 1/2 u??? 1/4
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
//??????????????×???
EXTI_Init(&EXTI_InitStructure);
//,ù 3/4 ?EXTI_InitStruct???,?¨u???????? 1/4 >>????èEXTI 1/4 ??aeAE÷
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//?????????????¨u?
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
//??? 1/4 ???? 1/4 ?4?>>,??16 1/4 ?
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
//??? 1/4 ???? 1/4 ?0?>>,?????? 1/4 ?4?>>
NVIC_Init(&NVIC_InitStructure);
//,ù 3/4 ?NVIC_InitStruct???,?¨u???????? 1/4 >>????èNVIC 1/4 ??aeAE÷
}中断例程:void EXTI15_10_IRQHandler(void)
rt_interrupt_enter();
/* °??<<AE??????ss 1/4 ì?????í??*/
vcm_airbag_exti_check();
/* GPS?ì?ss???· 1/4 ì?????í??*/
gps_exti_check();
rt_interrupt_leave();
}void vcm_airbag_exti_check(void)
// 1/4 ì?éu±?°????u?×?????·???·¨
if(EXTI_GetITStatus(AIRBAG_EXTI_LINE) != RESET)
//?????? 1/2 ?u?×???,????·u>>?0±í? 3/4 °??<>
EXTI_ClearITPendingBit(AIRBAG_EXTI_LINE);
本文已收录于以下专栏:
相关文章推荐
中断分类&#160;&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; ...
STM32F103系列上面,又只有60个可屏蔽中断(在107系列才有68个)
中断管理方法:
首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。
STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级
的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢...
STM32F1外部中断的使用
中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,...
中断学习之外部中断,多个外部中断的使用
一.外部中断
STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处。STM32F407的中断控制器支持22个外部中断/事件请求。每个中断设有状态位,每个中断/事件...
首先来讲一讲GPIO的相关ch
NVIC中断优先级
一、简介:
&#160;&#160;&#160;&#160;&#160;&#160;&#160; CM4内核可以支持256个中断,包括16个内核中断和240个外部中断,256级的可编程中断设置。对于STM32F4没有用到CM4内核的所有东西,只是用到...
EXTI每个中断/事件都有独立的触发和屏蔽,每个中断线专用的状态位,支宽度持多达23个软件的中断/事件请求,在检测脉冲宽度低于APB2时钟宽度的外部信号参见数据手册中的电气特性部分。STM32F4xx...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)STM32外部中断总结
STM32外部中断配置总结一:触发方式STM32的外部中断是通过边沿来触发的,不支持电平触发;二:外部中断分组STM32的每一个GPIO都能配置成一个外部中断触发源,STM32通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16组,STM32规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。STM32分组和对应中断处理函数分配:管脚中断标志中断处理函数分配PA0~PG0EXTI0EXTI0_IRQHandlePA1~PG1EXTI1EXTI1_IRQHandlePA2~PG2EXTI2EXTI2_IRQHandlePA3~PG3EXTI3EXTI3_IRQHandlePA4~PG4EXTI4EXTI4_IRQHandlePA5~PG5EXTI5PA6~PG6EXTI6PA7~PG7EXTI7EXTI9_5_IRQHandlePA8~PG8EXTI8PA9~PG9EXTI9PA10~PG10EXTI10PA11~PG11EXTI11PA12~PG12EXTI12EXTI15_10_IRQHandlePA13~PG13EXTI13PA14~PG14EXTI14PA15~PG15EXTI15三:外部中断的配置过程?配置触发源-GPIO触发源为通过GPIO端口输入,所以,要配置GPIO的模式,输入方式,输入方式有以下几种:1.GPIO_Mode_AIN,模拟输入(ADC模拟输入,或者低功耗下省电)2.GPIO_Mode_IN_FLOATING,浮空输入3.GPIO_Mode_IPD=0x28,带下拉输入4.GPIO_Mode_IPU=0x48,带上拉输入
& 果果文库所有资源均来源于互联网,仅供网友学习交流,若侵犯了您的权益,请联系我们予以删除。
13906&&人浏览
5420&&人浏览
18449&&人浏览
15815&&人浏览
12128&&人浏览
2001&&人浏览
14600&&人浏览
18511&&人浏览
16757&&人浏览
3468&&人浏览
2658&&人浏览
3324&&人浏览
19704&&人浏览
9573&&人浏览
15932&&人浏览
本文标题:STM32外部中断总结 链接地址:
copyright@ 2013- Inc. All Rights Reserved 果果文库 版权所有 联系站长: ; 经营许可证编号:浙ICP备号&STM32F103有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级16级可编程的中断优先级。
理解STM32的中断,要从中断优先级哦分组开始。而理解中断优先级分组,就要理解什么是抢占优先级,什么是响应优先级。
抢占优先级:如果有两中断先后出发,已经在执行的中断优先级如果没有后出发的中断优先级高,就会先处理抢占优先级高的中断,也就是说有较高的抢占优先级的中断可以打断抢占优先级较低的中断,这是实现中断嵌套的基础。
响应优先级:只在同一抢占优先级的中断同时触发时起作用。抢占优先级相同,则优先执行响应优先级较高的中断。响应优先级不会造成中断的嵌套,如果中断的两个优先级都一致,那么优先执行位于中断向量表中位置较高的中断。
STM32通过中断向量控制器(NVIC)来分配抢占优先级和响应优先级的数量。
ARM cortex-m3内核中有一个3位宽度的PRIGROUP数据区,用来指示一个8位数据序列中的小数点的位置从而表示中断优先级的分组。
如果PRIGROUP数据位为000,即为0,说明8位数据序列中小数位置在第1位的左边,为xxxxxxx.y 。用于表示中断优先级的分组的含义就是:用7位的数据宽度来表示抢占优先级的数量,即为128,用1位的数据宽度来表示响应优先级的数量即为2。
STM32中只有5个优先级分组,表示方法略有不同:
MDK中定义的中断相关的寄存器结构体为:
typedef struct
& vu32 ISER[2];
& u32 &RESERVED0[30];
& vu32 ICER[2];
& u32 &RSERVED1[30];
& vu32 ISPR[2];
& u32 &RESERVED2[30];
& vu32 ICPR[2];
& u32 &RESERVED3[30];
& vu32 IABR[2];
& u32 &RESERVED4[62];
& vu32 IPR[15];
} NVIC_TypeD
ISER 全称是interupt set-Enable Registers,这是以讹中断使能寄存器组。ISER[0]的bit0~bit31分别对应中断0~31.ISER[1]的bit0~bit27对应中断32~59,要是能某个中断,必须设置相应的ISER位为1,使该中断被使能。
ICER全称是Interrupt clear-Enable Registers中断清除寄存器组。该寄存器组的功能与ISER的作用恰好相反,是用来清除某个走红段的使能的。
ISPR全称是Interrupt set-Enable Registers,中断挂起控制寄存器。通过置1,可以将正在进行的中断挂起,而执行同级或更高级别的中断,写0无效。
ICPR全称是Interrupt clear-Enable Registers,中断解挂控制寄存器,通过设置1,可以将挂起的中断解挂,置0无效。
IABR全称是Active Bit Registers,是中断激活标志位寄存器组。对应位所代表的中断和ISER一样,如果为1,则表示该位所对应的中断正在被执行。
IPR[15]全称是Interrupt Priority Registers,是中断优先级控制的寄存器。IPR寄存器由15个32bit的寄存器组成,每个可屏蔽中断用8bit,IPR[0]的 [31~24],[23~16],[15~8],[7~0]分别对应中断3~0。
每个可屏蔽中断占用的8bit并没有全部使用,只用了高4位,这4位又分为抢占优先级和响应优先级。
一般把IO口作为外部中断输入的步骤:
1.初始化IO口为输入
2.开启IO口服用时钟,设置IO口与中断线的映射关系
3.开启与该IO口相对应的线上中断/事件,设置触发条件
4.配置中断分组(NVIC),并使能中断
5.编写中断服务函数
分享一下中断程序:
void EXTIX_Init(void)
GPIO_InitTypeDef & GPIO_InitS & & & & & & & & & & //定义端口结构初始化
EXTI_InitTypeDef & EXTI_InitS
& & & & &//定义中断结构初始化
NVIC_InitTypeDef & NVIC_InitS & & & & & & & & & &//定义中断优先级结构初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); & & //改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ完全禁用澹(JTAG+SW-DP)
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); & & //改变指定管脚的映射GPIO_Remap_SWJ_JTAGDisable,JTAG-DP 禁用?SW-DP使能
//初始化KEY01-& PB5, &KEY00-&PB4 &设置为输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
KEY01 = 1;
KEY00 = 0;
//初始化KEY13-&PB3 设置为输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//初始化KEY12-&PC12, KEY11-&PC11, KEY10-&PC10,设置为输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_11|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//设置KEY12-&PC12, KEY11-&PC11, KEY10-&PC10中断
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource3); & & & & //开启肞B3与中断线的映射
EXTI_InitStructure.EXTI_Line = EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_F
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource12);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource11);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10);
EXTI_InitStructure.EXTI_Line = EXTI_Line12;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_F
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
EXTI_InitStructure.EXTI_Line = EXTI_Line11;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_F
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
EXTI_InitStructure.EXTI_Line = EXTI_Line10;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_F
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
void EXTI3_IRQHandler(void)
//delay_ms(10);
if(EXTI_GetITStatus(EXTI_Line3) !=RESET)
LED4 =!LED4;
EXTI_ClearITPendingBit(EXTI_Line3);
void EXTI15_10_IRQHandler(void)
//delay_ms(10);
if (EXTI_GetITStatus(EXTI_Line12) !=RESET)
LED3 =!LED3;
else if (EXTI_GetITStatus(EXTI_Line11) !=RESET)
LED2 =!LED2;
& & & & &}
else if (EXTI_GetITStatus(EXTI_Line10) !=RESET)
LED1 =!LED1;
& & & & &}
EXTI_ClearITPendingBit(EXTI_Line12); & & &//清除EXTI线路挂起位
EXTI_ClearITPendingBit(EXTI_Line11); & & &//清除EXTI线路挂起位
EXTI_ClearITPendingBit(EXTI_Line10); & & &//清除EXTI线路挂起位
与非门科技(北京)有限公司 All Rights Reserved.
京ICP证:070212号
北京市公安局备案编号: 京ICP备:号21ic官方微信-->
后使用快捷导航没有帐号?
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请完成以下验证码
查看: 6473|回复: 11
在STM32F051的EXTI的ISR中怎么分辨是上升沿还是下降沿触发的中断
&&已结帖(20)
主题帖子积分
高级技术员, 积分 645, 距离下一级还需 355 积分
高级技术员, 积分 645, 距离下一级还需 355 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 645, 距离下一级还需 355 积分
高级技术员, 积分 645, 距离下一级还需 355 积分
extern void KEYS_Init(void)
& & & & GPIO_InitTypeDef GPIO_InitS
& & & & EXTI_InitTypeDef EXTI_InitS
& & & & NVIC_InitTypeDef NVIC_InitS
& & & & /* config the extiline(PB0) clock and AFIO clock */
& & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
& & & & RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE);
& & & && &
& & & & /* Configyre P[A|B|C|D|E]0&&NIVC&&*/
& & & & NVIC_InitStruct.NVIC_IRQChannel = EXTI4_15_IRQn;
& & & & NVIC_InitStruct.NVIC_IRQChannelPriority = 0x00;
& & & & NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
& & & & NVIC_Init(&NVIC_InitStruct);
& & & & /* EXTI line gpio config(PF7) */& & & &
& & & & GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;
& & & & GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
& & & & GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_2;
& & & & GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
& & & & GPIO_Init(GPIOF, &GPIO_InitStruct);
& & & & /* EXTI line(PF7) mode config */
& & & & SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource7);
& & & & EXTI_InitStruct.EXTI_Line = EXTI_Line7;
& & & & EXTI_InitStruct.EXTI_Mode = EXTI_Mode_I
& & & & EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_F//EXTI_Trigger_F// | EXTI_Trigger_R
& & & & EXTI_InitStruct.EXTI_LineCmd = ENABLE;
& & & & EXTI_Init(&EXTI_InitStruct);
我设置了PF7为外部中断,触发方式为上升沿和下降沿。在ISR里面,我需要对上升沿和下降沿有不同的处理,所以需要分辨当前触发了中断时是上升沿还是下降沿,不知道代码怎么写,最好是用到固件库的方式,不要直接操作寄存器,这样移植性好点。现在我正在找合适的范例,不知道找不找得到。
满意回复+10
在ISR中读IO电平
嗯楼上的办法不错, 如果还担心误判, 可以只设置 EXTI_Trigger_Rising, EXTI_Trigger_Falling 的一种, 在中断服务中修改这个设置. ...
是不是可以进入中断后用GPIO_ReadInputDataBit读一下信号引脚电平,SET 或 RESET?
设置成EXTI_Trigger_Rising_Falling触发,中断程序再判断是IO的当前电平,就知道是上升沿还是下降沿了;
2,3楼都不错
主题帖子积分
中级工程师, 积分 3309, 距离下一级还需 1691 积分
中级工程师, 积分 3309, 距离下一级还需 1691 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级工程师, 积分 3309, 距离下一级还需 1691 积分
中级工程师, 积分 3309, 距离下一级还需 1691 积分
EXTI_Trigger_Rising_Falling是1种,应该还有EXTI_Trigger_Rising和EXTI_Trigger_Falling
主题帖子积分
高级工程师, 积分 5631, 距离下一级还需 2369 积分
高级工程师, 积分 5631, 距离下一级还需 2369 积分
主题帖子积分
专家等级:结帖率:55%打赏:0.00受赏:1.00
主题帖子积分
高级工程师, 积分 5631, 距离下一级还需 2369 积分
高级工程师, 积分 5631, 距离下一级还需 2369 积分
在ISR中读IO电平
主题帖子积分
---------------------
主题帖子积分
---------------------
专家等级:结帖率:97%打赏:0.00受赏:58.00
主题帖子积分
---------------------
嗯楼上的办法不错, 如果还担心误判, 可以只设置 EXTI_Trigger_Rising, EXTI_Trigger_Falling 的一种, 在中断服务中修改这个设置.
欢迎进入 !
主题帖子积分
主题帖子积分
专家等级:结帖率:46%打赏:135.80受赏:158.50
主题帖子积分
2,3楼都不错
←← +→→←←
主题帖子积分
高级技术员, 积分 645, 距离下一级还需 355 积分
高级技术员, 积分 645, 距离下一级还需 355 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 645, 距离下一级还需 355 积分
高级技术员, 积分 645, 距离下一级还需 355 积分
aozima 发表于
在ISR中读IO电平
嗯,目前我也只能用读IO电平的方法了,本来是想有个固件库函数可以返回中断时是上升沿还是下降沿,发现没有这样的库函数,再想去找中断标志寄存器,以为有某个标志寄存器可以记录当前是上升沿中断还是下降沿中断,也没找到。
主题帖子积分
高级技术员, 积分 645, 距离下一级还需 355 积分
高级技术员, 积分 645, 距离下一级还需 355 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 645, 距离下一级还需 355 积分
高级技术员, 积分 645, 距离下一级还需 355 积分
airwill 发表于
嗯楼上的办法不错, 如果还担心误判, 可以只设置 EXTI_Trigger_Rising, EXTI_Trigger_Falling 的一种, 在中 ...
你说的这个方法感觉也应该是可以的。
主题帖子积分
中级工程师, 积分 3534, 距离下一级还需 1466 积分
中级工程师, 积分 3534, 距离下一级还需 1466 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级工程师, 积分 3534, 距离下一级还需 1466 积分
中级工程师, 积分 3534, 距离下一级还需 1466 积分
本帖最后由 gxliu08 于
10:30 编辑
是不是可以进入中断后用GPIO_ReadInputDataBit读一下信号引脚电平,SET 或 RESET?
主题帖子积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:43.00
主题帖子积分
设置成EXTI_Trigger_Rising_Falling触发,中断程序再判断是IO的当前电平,就知道是上升沿还是下降沿了;
ST、机器人、电路欣赏等版主;感谢大家的支持;
电子工程师群(深圳):
电子工程师群1:1897584;
物联网群:;智能机器人群:; AGV及立体仓库群:;
主题帖子积分
高级技术员, 积分 645, 距离下一级还需 355 积分
高级技术员, 积分 645, 距离下一级还需 355 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 645, 距离下一级还需 355 积分
高级技术员, 积分 645, 距离下一级还需 355 积分
问题已解决了,试过了可以。
在ISR中读取IO电平状态:
#if& & & & & & & & (MODE_POLLING == KEY_MODE)
#elif& & & & & & & & (MODE_INTERRUPTE == KEY_MODE)
extern void EXTI4_15_IRQHandler(void)
&&if(EXTI_GetITStatus(EXTI_Line6) != RESET){& & & &
& & & & & & & & if(0 == GPIO_ReadInputDataBit(KEYS_PORT,KEY1_PIN)){// ?? 1/2 u??
& & & & & & & & & & & & & & & & LED1_ON();
& & & & & & & & }else{//??????
& & & & & & & & & & & & & & & & LED1_OFF();
& & & & & & & & }
& & EXTI_ClearITPendingBit(EXTI_Line6);
&&}else if(EXTI_GetITStatus(EXTI_Line7) != RESET){
& & & & & & & & if(0 == GPIO_ReadInputDataBit(KEYS_PORT,KEY2_PIN)){// ?? 1/2 u??
& & & & & & & & & & & & & & & & LED2_ON();
& & & & & & & & }else{//??????
& & & & & & & & & & & & & & & & LED2_OFF();
& & & & & & & & }
& & & & & & & &
& & EXTI_ClearITPendingBit(EXTI_Line7);& & & &
主题帖子积分
中级技术员, 积分 234, 距离下一级还需 66 积分
中级技术员, 积分 234, 距离下一级还需 66 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 234, 距离下一级还需 66 积分
中级技术员, 积分 234, 距离下一级还需 66 积分
真好需需要
主题帖子积分
高级技术员, 积分 904, 距离下一级还需 96 积分
高级技术员, 积分 904, 距离下一级还需 96 积分
主题帖子积分
专家等级:结帖率:95%
主题帖子积分
高级技术员, 积分 904, 距离下一级还需 96 积分
高级技术员, 积分 904, 距离下一级还需 96 积分
正需要,思想重要。
技术高手奖章
人才类勋章
时间类勋章
甘甜之泉水
发帖类勋章
精华达人奖章
等级类勋章
湍急之河流
发帖类勋章
时间类勋章
技术导师奖章
人才类勋章
突出贡献奖章
等级类勋章
沉静之湖泊
发帖类勋章
时间类勋章
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
技术领袖奖章
人才类勋章
技术奇才奖章
人才类勋章
时间类勋章
技术新星奖章
人才类勋章
时间类勋章
时间类勋章
晶莹之水滴
发帖类勋章

我要回帖

更多关于 stm8l 引脚中断代码 的文章

 

随机推荐