#include "ExtiConfig.h"

unsigned char key1Down = 0;
unsigned char key2Down = 0; /**************************************************************
**
**
***************************************************************/
void EXTI_Config(void)
{
EXTI_InitTypeDef extiStruct;
NVIC_InitTypeDef nvicStruct;
GPIO_InitTypeDef GPIOInit; // NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//先4 从4
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE); //GPIOA 配置
GPIOInit.GPIO_Mode = GPIO_Mode_IPU; //PA0 上拉输入
GPIOInit.GPIO_Pin = GPIO_Pin_3; //LF
GPIOInit.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIOInit); GPIOInit.GPIO_Mode = GPIO_Mode_IPU; //PB5 上拉输入
GPIOInit.GPIO_Pin = GPIO_Pin_13;
GPIOInit.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIOInit); GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); extiStruct.EXTI_Line = EXTI_Line3 | EXTI_Line13;
extiStruct.EXTI_Mode = EXTI_Mode_Interrupt;
extiStruct.EXTI_Trigger = EXTI_Trigger_Falling;
extiStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&extiStruct);
EXTI_ClearITPendingBit(EXTI_Line3);
EXTI_ClearITPendingBit(EXTI_Line13); //外部中断线0,中断复用PA0
nvicStruct.NVIC_IRQChannel = EXTI3_IRQn;
nvicStruct.NVIC_IRQChannelPreemptionPriority = 1;
nvicStruct.NVIC_IRQChannelSubPriority = 1;
nvicStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvicStruct); nvicStruct.NVIC_IRQChannel = EXTI15_10_IRQn;
nvicStruct.NVIC_IRQChannelPreemptionPriority = 1;
nvicStruct.NVIC_IRQChannelSubPriority = 0;
nvicStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvicStruct);
} /**************************************************************
** 外部中断函数,中断线为13
**
***************************************************************/
void EXTI_Line13IRQ(void)
{
if(EXTI_GetITStatus(EXTI_Line13)!=RESET)
{
if(key1Down==0)
{
key1Down = 1;
}
EXTI_ClearITPendingBit(EXTI_Line13); //清除 LINE 上的中断标志位
}
} /**************************************************************
** 外部中断函数,中断线为13
**
***************************************************************/
void EXTI_Line3IRQ(void)
{
if(EXTI_GetITStatus(EXTI_Line3)!=RESET)
{
if(key2Down==0)
{
key2Down = 1;
}
EXTI_ClearITPendingBit(EXTI_Line3); //清除 LINE 上的中断标志位
}
}

一些全局的中断标志key1Down和key2Down是为了给工程的其他部分的程序提供一些逻辑。

STM32外部中断线编程的更多相关文章

  1. stm32中断优先级管理与外部中断编程

    stm32中断优先级管理与外部中断编程 中断优先级管理 外部中断编程 官方示例程序 exti.h #ifndef __EXTI_H #define __EXIT_H #include "sy ...

  2. Stm32外围模块编程初始化步骤

    Stm32外围模块编程初始化步骤: 一.外部中断 1)初始化 IO 口为输入. 这一步设置你要作为外部中断输入的 IO 口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要 ...

  3. STM32F103外部中断编程

    STM32F103外部中断编程   中断,顾名思义就是停下手头的活,去干另外一件急活,干完急活然后回来继续干手头的活. 单片机和人一样,有时候也有更急的程序需要执行,执行完之后再回来执行之前正在执行的 ...

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

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

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

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

  6. 关于STM32的可编程电压检测器的使用方法

    关于STM32的可编程电压检测器的使用方法 思维导图总览: 代码: 1 #include "sys.h" 2 #include "delay.h" 3 #inc ...

  7. STM32外部中断具体解释

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

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

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

  9. STM32外部中断初理解

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

随机推荐

  1. 201521123069 《Java程序设计》 第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. (1)我们可以利用堆栈追踪来获得异常发生的根源(堆栈追踪信息最顶层). (2)自定义异常:不是由Java系统 ...

  2. 201521123115《java程序设计》第十一周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1. ...

  3. 浅谈JAVA中“增强”类的某个方法的几个中方法!

    一.继承 使用场景:能够控制这个类的构造的时候,才可以使用继承. 优点:简单容易使用, 缺点:耦合性大大的增强,不利于后期的维护,所以对于继承这种方法,谨慎使用.  代码实现:二.装饰者模式 使用场景 ...

  4. Java Classloader机制解析(转)

    做Java开发,对于ClassLoader的机制是必须要熟悉的基础知识,本文针对Java ClassLoader的机制做一个简要的总结.因为不同的JVM的实现不同,本文所描述的内容均只限于Hotspo ...

  5. C++初学 virtual 相关

    声明: 1.为了节省篇幅,头文件和域什么的都没写.另外可能是java转C++,有些叫法可能会不对 2.因初学,都是自己摸索的,有错望指出,勿喷 假设父类声明 Parent.h中如下 class Par ...

  6. Floyd算法(最短路)

    如题,这是最短路算法Floyd. Floyd,是只有五行的代码. 简单,易懂.O(N的三方)的时间也可以. 遇到简单的就这么用. #include<iostream> #include&l ...

  7. 实例讲解webpack的基本使用第一篇

    更新文章不容易,尤其是更新高质量的文章更加不易,因此为了节约时间,闲话就不多说了.关于webpack的介绍,webpack是用来干嘛的,这些基础概念性的东西,就不在此赘述,下面直接开始正题. webp ...

  8. 【2016美团】浏览器和服务器在基于https进行请求链接到数据传输过程中,用到了如下哪些技术

    A.非对称加密技术 B.对称加密技术 C.散列(哈希)算法 D.数字证书 答案:ABCD HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数 ...

  9. Docker入门之五数据管理

    在Docker使用过程中,需要对数据进行持久化或需要在多个容器之间进行数据共享,就会涉及容器的数据管理操作.主要有两种方式:1.数据卷 2.数据卷容器. 一.数据卷 数据卷是一个可供容器使用的特殊目录 ...

  10. Python打印乘法口诀表

    思路:第一行:1*1,第二行:1*2.,2*2,第三行:1*3,2*3,3*3-- 最后一行:1*9,2*9,3*9,-9*9,以此类推,可以设2个数:i,j:让 i 从1循环到9,让 j 从1到小于 ...