基于STM32F0的GPIO外部中断

背景:项目中需要使用hall传感器检测门锁状态,触发中断,发送门锁状态信息。(这儿中断服务中只是点了led灯说明了状况)

硬件情况:采用PB3管脚,因而使用中断线:EXTI_Line3和中断服务函数:EXTI2_3_IRQn。

具体过程:

1、设置中断时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

2、配置GPIO

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;   //输入
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  //拉高
 GPIO_Init(GPIOB, &GPIO_InitStructure);

3、GPIO与中断线的映射

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource3);

4、配置EXTI

EXTI_InitTypeDef EXTI_InitStructure

EXTI_InitStructure.EXTI_Line = EXTI_Line3;  //中断线3
 EXTI_InitStructure.EXTI_LineCmd = ENABLE;
 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;  //边沿触发
 EXTI_Init(&EXTI_InitStructure);

5、配置NVIC

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_3_IRQn;  //顶层头文件重定义好的
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;  //中断优先级
 NVIC_Init(&NVIC_InitStructure);

6、中断服务程序及标志位清除

void EXTI2_3_IRQHandler()  //启动文件中定义好的
{

  if (LOCK_SENSOR == 0)
  {

    GPIO_SetBits(GPIOF, GPIO_Pin_6);

    GPIO_ResetBits(GPIOF, GPIO_Pin_7);
  }

  if (LOCK_SENSOR == 1)
  {

    GPIO_SetBits(GPIOF, GPIO_Pin_7);

    GPIO_ResetBits(GPIOF, GPIO_Pin_6);
  }

  EXTI_ClearITPendingBit(EXTI_Line3);

}

STM32外部中断易出错总结(详见链接)

http://blog.csdn.net/yskcg/article/details/8201505

时间: 2024-10-06 01:10:07

基于STM32F0的GPIO外部中断的相关文章

GPIO外部中断

STM32的"中断"机制很复杂,看了PM(Cortex-m4)和RM,对它只了解了一个大概.首先,与"中断"相关的术语就有 exception, interrupt, event 三个.Cortex-m4核中包含一个NVIC控制器,用于处理 exception.而 interrupt 是属于 exception 之一种,其它 exception 类型包括 SysTick等.interrupt 又叫作IRQ. STM32之中.Cortex-m4核之外的"中断

嵌入式外部中断控制编程方法论—比較CC2541(51核)和S5PV210(ARM核)

这是一篇阐述怎样对嵌入式SOC外部中断进行控制编程的方法论文章.希望读者理解本篇文章后.能够具备对市场上全部已经面世和将来面世的嵌入式芯片的外部中断进行控制编程的能力. 笔者原创的技术分享一直都恪守下面原则: 从需求的角度去理解嵌入式各种软件和硬件模块的作用和组成.并从芯片系统设计的角度去阐述怎样进行控制编程. 前者对于理解复杂的系统(如linux的各个子系统)是非常有效的:后者所讲的是代表一个芯片设计project师的视觉,芯片模块由他负责设计,他对于该模块的控制编程自然是最有发言权的. 笔者

外部中断的使用

STM32学习笔记:外部中断的使用 中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加复杂.今天就将来探讨一下关于STM32中的中断系统. 1 基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编

LPC1768外部中断与GPIO中断

LPC1768的外部中断严格来说只有四个,分别是EINT0,EINT1,EINT2,EINT3,技术手册上有如下说明 控制这四个外部中断靠以下寄存器 这三个寄存器的0 1 2 3位分别代表中断的0 1 2 3,EXTINT寄存器表示中断是否发生,在发生中断的时候该寄存器会置位,可以通过写1清零,EXTMODE寄存器表示触发模式,有电平触发和变化沿触发两种,EXTPOLAR与EXTMODE,在电平触发模式下,决定高电平还是低电平触发,在变化沿触发的情况下决定上升沿还是下降沿触发 这三个中断分别相关

LPC1788的外部中断和GPIO中断

首先是gpio中断,这一点和1768不同,1768使用的中断时和eint3共用中断通道,到了1788,专门为gpio开辟了中断 #ifndef __JOYPAD_H_ #define __JOYPAD_H_ #include "sys.h" #include "delay.h" #define JOYPAD_A        0X01 #define JOYPAD_B        0X02 #define JOYPAD_C        0X03 #define

GPIO和外部中断/时间控制器(EXTI)

2.1          GPIO的8种工作模式 GPIO工作图如下: 4种输入模式 结构图的上半部分分为输入模式结构, 分为上拉模式,下拉模式,浮空模式和模拟输入模式. 上/下拉模式:通过设置配置寄存器(CRL,CRH)来控制1和2开关,于是得到GPIO的上拉输入模式(GPIO_Mode_IPU)和下拉输入模式(GPIO_Mode_IPD). 浮空输入模式(GPIO_Mode_IN_FLOATING):没有接上下拉电阻,经由TTL施密特触发器输入. 配置成这个模式直接用电压表测量其引脚电压为1

STM32基本GPIO操作:按键输入(扫描+外部中断)

(涉及专有名词较多,难免解释不到位,若有错误还请指出,谢谢!) 硬件连接图如下: 一.扫描 思路是在main函数中通过死循环来扫描端口电平状态检测,以此判断按键是否按下.实现较为简单. 1.初始化(注意C语言中变量声明需放在函数开头) 以下是初始化PB5端口(LED灯)的代码,每一条语句的含义在我另一篇博客里 GPIO_InitTypeDef GPIO_Init1; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_Init1.

《零死角玩转STM32》-17-EXTI外部中断/事件控制器

/* * 本文中的相关图片来自火哥的教程,只作为随笔记录,无侵权之意 * 21:25:46, 2017-04-08 */ EXTI:外部中断/事件控制器.STM32F429共有23根,其中EXTI0~EXTI15,分别对应GPIO中的PX0 ~ PX15,另外7根线有如下用途: (中间省略了EXTI1 ~ EXTI15) EXTI功能框图如下所示: 按照图中的序号标识,可以清晰的看出外部GPIO引脚上的电平变化是如何传递到内核,即GPIO -> EXTI -> NVIC,并触发相应的中断/事件

STM32F4——NVIC中断优先级及外部中断

NVIC中断优先级 一.简介: CM4内核可以支持256个中断,包括16个内核中断和240个外部中断,256级的可编程中断设置.对于STM32F4没有用到CM4内核的所有东西,只是用到了一部分,对于STM32F40和41系列共有92个中断,其中有10个内核中断和82个可屏蔽中断,常用的为82个可屏蔽中断. 二.相关寄存器: ISER[8]-中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82个可屏蔽的中断,因此利用ISER[0~2]这三个32位寄存器就够了.一下的几个寄