一:触发方式

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线路挂起位
    
}

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

  1. STM32 外部中断详解(原理+配置代码)

    本文介绍了STM32基于标准外设库的外部中断配置,以及基于参考手册如何更加寄存器配置外部中断 文章目录 1 前言 2 STM32的外部中断 3 中断服务函数的映射关系 4 外部中断的配置 5 寄存器的 ...

  2. 转别人的 STM32外部中断使用注意事项

    前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark. 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发: 二:外部中断分组 ST ...

  3. STM32外部中断初理解

    PA0,PB0...PG0--->EXTI0 PA1,PB1...PG1--->EXTI1 ....... PA15,PB15...PG15--->EXTI15 以上为GPIO和中断 ...

  4. STM32外部中断具体解释

      一.基本概念 ARM Coetex-M3内核共支持256个中断,当中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32眼下支持的中断共84个(16个内部+68个外部), ...

  5. STM32 外部中断

    1)STM32一般有19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断.线 16:连接到 PVD 输出. 线 17:连接到 RTC 闹钟事件. 线 18:连接到 USB 唤醒事件. 2) ...

  6. stm32 外部中断学习

    今天我们看看STM32的外部中断实验. STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,那么 STM32 是怎么把 16 个中断线和 IO 口一 ...

  7. STM32——外部中断EXIT实现

    外部中断实现步骤: 一.初始化,包括:1.AFIO时钟中断和GPIO时钟使能:                          2.GPIO初始化                           ...

  8. (stm32f103学习总结)—stm32外部中断

    一.外部中断介绍 1.1 EXTI简介 EXTI简介 STM32F10x外部中断/事件控制器(EXTI)包含多达 20 个用于产生事 件/中断请求的边沿检测器.EXTI的每根输入线都可单独进行配置,以 ...

  9. STM32外部中断.

    void EXTIX_Init(void){     EXTI_InitTypeDef EXTI_InitStructure;    NVIC_InitTypeDef NVIC_InitStructu ...

随机推荐

  1. One to One 的数据库模型设计与NHibernate配置

    在数据库模型设计中,最基本的实体关系有三种:一对一.一对多.多对多.关于一对多和多对多使用的情况较多,之前也有过一些讨论,现在来说明一下在数据库中一对一的模型设计. 首先,关系数据库中使用外键来表示一 ...

  2. proxool 连接池警告分析:appears to have started a thread named [HouseKeeper] but has failed to stop it

    1. 问题:日志中出现下面的警告: 警告: The web application [ROOT] appears to have started a thread named [HouseKeeper ...

  3. 005.TCP--拼接TCP头部IP头部,实现TCP三次握手的第一步(Linux,原始套接字)

    一.目的: 自己拼接IP头,TCP头,计算效验和,将生成的报文用原始套接字发送出去. 若使用tcpdump能监听有对方服务器的包回应,则证明TCP报文是正确的! 二.数据结构: TCP首部结构图: s ...

  4. 上一周,小白的我试着搭建了两个个人博客:在github和openshift上

    上一周,突发奇想,想搭建个自己的博客. 由于是突发奇想,自然想先找免费的试试手.仔细搜索下,选定了目标Openshift和Github. Openshift 安装WordPress OpenShift ...

  5. C语言中内存分配那些事儿

    C程序的内存结构 C语言的之所以复杂,首先它的内存模型功不可没.不像某些那样的高级语言只需要在使用对象的时候,用new创建.所有之后的事情,你不需要操心.对于C语言,所有与内存相关的东西,都需要熟悉, ...

  6. 景瑞地产商业智能BI整体实施过程

    1.1行业背景 1.1.1景瑞地产 景瑞地产成立于1993年,专注于房地产开发,并一直秉持“永远诚信.恪守专业.锐意进取.共赢未来”的核心价值观和“舒适之道”的企业使命. 景瑞地产,源自上海.通过多年 ...

  7. git忽略某些文件

    通常项目中编译过程产生的文件或者编译器生成的临时备份文件,不需要通过Git系统去追逐(track). 在项目顶层工作目录中添加一个叫".gitignore"的文件,来告诉Git系统 ...

  8. C#基础---事件的使用

    一:什么是事件     事件是可以被控件识别的操作,如按下确定按钮,选择某个单选按钮或者复选框.每一种控件有自己可以识别的事件,如窗体的加载.单击.双击等事件,编辑框(文本框)的文本改变事件,等等.事 ...

  9. AC小笔记

    1:基本库函数的使用 Rand()函数,可以产生0~32767之间的随机数. a+rand()%(b-a)  可以得到 [a,b] 之间的随机数. 2:基本数据类型的使用 可以使用强制类型转换 例如: ...

  10. [No000026]365种创业、办公、和生活成长的精华资源

    只需要具备以下技能,人人都可以成为企业家:经得起失败的考验,思维活跃,新点子不断,能够脚踏实地把新点子转化为产品,并在这个过程中坚持不懈,百折不挠,即使跌倒了,也要及时从失败中学习,迅速投入到下一次冒 ...