STM32-外部中断,没有硬件干扰就是快乐

一:触发方式

STM32 的外部中断是通过边沿来触发的,不支持电平触发;

二:外部中断分组

STM32 的每一个GPIO都能配置成一个外部中断触发源,STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。

STM32 分组和对应中断处理函数分配:


管脚


中断标志


中断处理函数分配


PA0~PG0


EXTI0


EXTI0_IRQHandler


PA1~PG1


EXTI1


EXTI1_IRQHandler


PA2~PG2


EXTI2


EXTI2_IRQHandler


PA3~PG3


EXTI3


EXTI3_IRQHandler


PA4~PG4


EXTI4


EXTI4_IRQHandler


PA5~PG5


EXTI5


EXTI9_5_IRQHandler


PA6~PG6


EXTI6


PA7~PG7


EXTI7


PA8~PG8


EXTI8


PA9~PG9


EXTI9


PA10~PG10


EXTI10


EXTI15_10_IRQHandler


PA11~PG11


EXTI11


PA12~PG12


EXTI12


PA13~PG13


EXTI13


PA14~PG14


EXTI14


PA15~PG15


EXTI15

三:外部中断的配置过程

l 配置触发源 -GPIO

触发源为通过GPIO端口输入,所以,要配置GPIO的模式,输入方式,输入方式有以下几种:

1.GPIO_Mode_AIN ,模拟输入(ADC模拟输入,或者低功耗下省电)

2.GPIO_Mode_IN_FLOATING ,浮空输入

3.GPIO_Mode_IPD = 0x28,带下拉输入

4.GPIO_Mode_IPU = 0x48,带上拉输

-----------------------具体配置例子-----------------------

参考STM32的库函数版自带例程 PB5对应的EXTI9_5_IRQHandler,及5号中断线,这个不能乱设,否则不工作

void EXTIX_Init(void)
{

GPIO_InitTypeDef GPIO_InitStructure;
     EXTI_InitTypeDef EXTI_InitStructure;
     NVIC_InitTypeDef NVIC_InitStructure;

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);     //关闭jtag

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
       GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource5);

EXTI_InitStructure.EXTI_Line=EXTI_Line5;
       EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;    
       EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
       EXTI_InitStructure.EXTI_LineCmd = ENABLE;
       EXTI_Init(&EXTI_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;               //使能按键所在的外部中断通道
       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;     //先占优先级4位,共16级
       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;                         //先占优先级0位,从优先级4位
       NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                        //使能外部中断通道
       NVIC_Init(&NVIC_InitStructure);

}

处理函数,要清除中断标志位,不然一秒M次的中断都可能

void EXTI9_5_IRQHandler(void)
{
       delay_ms(10);    //消抖,是按键的话这里就需要,否则就不用延迟               
printf("delay_ms\r\n");

if (EXTI_GetITStatus(EXTI_Line5) != RESET)
     {

//自己要实现的动作
          printf("EXTI0_IRQHandler\r\n");
     }
     EXTI_ClearITPendingBit(EXTI_Line5);  //清除EXTI13线路挂起位
    
}

时间: 2024-10-02 16:37:36

STM32-外部中断,没有硬件干扰就是快乐的相关文章

STM32 外部中断

1)STM32一般有19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断.线 16:连接到 PVD 输出. 线 17:连接到 RTC 闹钟事件. 线 18:连接到 USB 唤醒事件. 2)配置 GPIO 与中断线的映射关系的函数 GPIO_EXTILineConfig()来实现的: void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) ; 中断线上中断的初始化是通过函数 EXTI_Init(

STM32 外部中断简介

文章来源:http://blog.chinaunix.net/uid-24219701-id-4088004.html STM32  IO 口中断的一些基础概念.STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处.STM32F103 的中断控制器支持 19 个外部中断/事件请求.每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置.STM32F103 的19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断. 线 16:连接到 PVD 输出

嵌入式02 STM32 外部中断实验

一.中断 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序.该程序执行完成后,CPU接着执行被暂停的程序.这个过程称为中断.(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家吃饭,回家途中,发现泥鳅没带,回去把泥鳅带回家,然后吃完饭继续捉泥鳅!!!) 中断是CPU处理外部突发事件的一个重要技术.引起中断的原因或者说发出中断请求的来源叫做中断源.根据中断源的不同,可以分为硬件中断和软件中断两大类,有了中断,系统可以更好更快的利用有限的系统资源解决系统响应速度和运行效率的一

STM32外部中断

0.STM32F103上测试 #include <stm32f10x.h> void GPIO_Config(void); void NVIC_Config(void); void EXTI_Config(void); int main(void) { GPIO_Config(); NVIC_Config(); EXTI_Config(); while(1): } void GPIO_Config(void) { /*定义一个GPIO_InitTypeDef类型的结构体,本类型在stm32f1

STM32——外部中断EXIT实现

外部中断实现步骤: 一.初始化,包括:1.AFIO时钟中断和GPIO时钟使能:                          2.GPIO初始化                          3.设置EXTI线                          4.中断向量初始化 二.中断服务函数 采用PB9作为外部中断源,具体实现程序如下: 一.初始化 1 void EXTI_PB9_Init(void) 2 3 { 4 5 GPIO_InitTypeDef GPIO_InitStru

STM32外部中断简介

结构体里的寄存器的具体含义在STM32的技术手册上很详细. 特别注意:SYSTICK不是NVIC来控制.

STM32学习笔记(九) 外部中断,待机模式和事件唤醒

学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为例详细讲解这些内容,希望对每一个阅读者有帮助. 1.外部中断 如果已经学习了SysTick系统时钟滴答实验,掌握了Cortex-M3中断的相关知识,那么外部中断也是比较好理解的,和SysTick中断一样,外部中断也是当有信号触发时,如果中断屏蔽寄存器允许触发,就会产生中断,这时CPU查找中断向量表,

STM32之外部中断控制

一.STM32外部中断 1.STM32外部中断结构图 如上图所示: 主要包括四个环节,GPIO.AFIO.EXTI.NVIC. 2.STM32外部中断软件配置步骤 ① 配置NVIC控制器 ② 使能GPIO和AFIO时钟 ③ 配置GPIO (复用功能的输入输出配置) ④ 配置AFIO (选定要配置为EXTI的I/O口线) ⑤  EXTI控制器的配置 配置寄存器就好像是我们在更改STM32的硬件电路,让它们处于一种新的工作状态--外部中断模式. 二.STM32外部中断软件配置细节 以PA0引脚的外部

外部中断实验

实验4 外部中断实验 一.实验目的 理解中断的基本概念. 掌握STM32的中断源及中断优先级. 掌握STM32外部中断技术的基本使用方法. 掌握STM32中断处理程序的编程方法. 二.实验内容 硬件设计原理图如下图1所示:LED的连接在上一节已经介绍过了,在STM32开发板上的按键KEY0是接在PE4上,KEY1是接在PE3上的,KEY2是连在PE2上,WK_UP接在PA0上. 三.实验预备知识 中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部