一、前言

我在学习的过程中,经历过毫无头绪,找到一堆学习资料却不知从何开始的痛苦。我希望我整理的笔记,不光可以方便自己在以后的项目中拿来即用,也希望能够对那些喜欢玩硬件、爱折腾的小伙伴有所帮助。如果你们觉得我的文章对你们有用,欢迎大家点赞+收藏,让我知道,我的工作是有价值的。

这篇笔记,综合参考了野火、正点原子、st官方以及网络上的一些资料,然后经过我自己的思考、尝试与实践,从而整理出来的。感谢那些愿意在学习的路上分享自己知识与经验的前辈。

二、学习笔记

(一)、编程思路和代码

编程顺序,NVIC,EXIT(系统时钟开启和连接),中断服务函数

1.初始化GPIO(配置按键GPIO为输入模式)

2.开启按键GPIO的时钟和SYSCFG的时钟(很重要,在初始化GPIO开时钟后弄)

同时将IO口线连接到中断线上面来

GPIO_InitTypeDef GPIO_InitStructure; /*开启按键GPIO口的时钟*/RCC_AHB1PeriphClockCmd(KEY1_INT_GPIO_CLK|KEY2_INT_GPIO_CLK ,ENABLE);/* 使能 SYSCFG 时钟 ,使用GPIO外部中断时必须使能SYSCFG时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);/* 选择按键1的引脚 */ GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;/* 设置引脚为输入模式 */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                /* 设置引脚不上拉也不下拉 */GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;/* 使用上面的结构体初始化按键 */GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure); 

3.将按键GPIO连接到EXTI源输入

/* 连接 EXTI 中断源 到key1引脚 */SYSCFG_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE,KEY1_INT_EXTI_PINSOURCE);

4配置NVIC(嵌套向量中断控制器)

不可屏蔽中断和外部中断由它处理,SYSTICK不是由他处理。

1.抢占优先级和响应优先级

抢占优先比较抢占优先级,当抢占优先级相同时,比较响应优先级,两者编号越小,表明优先级越高,抢占优先级相同时,则不能被对方打断,但会依据响应优先级来判断优先相应。

2.NVIC 的优先级组

第0组:所有4位用于指定响应优先级

16种相应优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响 应优先级

2种抢断优先级(0、1),8种响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第四组:所有4位用于指定抢占式优先级

3.其中优先级分组写在主函数中,NVIC配置写在一个函数中(中断源,抢占优先级和响应优先级,使能中断)

NVIC_InitTypeDef NVIC_InitStructure;/* 配置NVIC为优先级组1 */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/* 配置中断源:按键1 */NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;/* 配置抢占优先级:1 */NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;/* 配置子优先级:1 */NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;/* 使能中断通道 */NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/* 配置中断源:按键2,其他使用上面相关配置 */  NVIC_InitStructure.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ;NVIC_Init(&NVIC_InitStructure);

5.配置按键EXTI中断线

1.中断事件线,用于选择哪个位

2.中断模式,产生中断或产生事件

EXTI_InitTypeDef EXTI_InitStructure;/* 选择 EXTI 中断源 */EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;/* 中断模式 */EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;/* 下降沿触发 */EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  /* 使能中断/事件线 */EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);

6编写EXTI中断服务函数

void KEY1_IRQHandler(void)
{//确保是否产生了EXTI Line中断if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET) {// LED1 取反     LED1_TOGGLE;//清除中断标志位EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);     }
}void KEY2_IRQHandler(void)
{//确保是否产生了EXTI Line中断if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE) != RESET) {// LED2 取反     LED2_TOGGLE;//清除中断标志位EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);     }
}

STM32F407野火霸天虎系列笔记(四)EXTI相关推荐

  1. STM32F407野火霸天虎系列笔记(三)UART通信

    一.前言 我在学习的过程中,经历过毫无头绪,找到一堆学习资料却不知从何开始的痛苦.我希望我整理的笔记,不光可以方便自己在以后的项目中拿来即用,也希望能够对那些喜欢玩硬件.爱折腾的小伙伴有所帮助.如果你 ...

  2. 操作系统系列笔记(四) - 进程,线程及CPU调度

    进程和线程 进程 进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程 进程包含了正在运行的一个程序的所有状态信息, 代码, 数据, 状态寄存器, 通用寄存器, 进程占用系统资源等 进 ...

  3. 看雪学院-OllyDBG入门系列(四)内存写入 笔记

    看雪学院-OllyDBG入门系列(四)内存断点 笔记 原作地址:http://bbs.pediy.com/showthread.php?threadid=21378 作者:CCDebuger 在 Ol ...

  4. 无人驾驶笔记系列(四):Fast-RTPS初体验

    无人驾驶笔记系列(四):Fast-RTPS初体验 背景介绍 ROS1在节点启动前,必须通过roscore启动一个master节点,通过master管理节点之间的通信.这样master节点如果出现问题, ...

  5. 机器学习-白板推导系列笔记(三十四)-MDP

    此文章主要是结合哔站shuhuai008大佬的白板推导视频:马尔科夫决策过程_107min 全部笔记的汇总贴:机器学习-白板推导系列笔记 一.背景介绍 Random Variable:XYX⊥YX\; ...

  6. 1、野火freertos学习笔记

    野火freertos学习笔记 1.任务 1.1 栈 1.2 任务的切换 taskYIELD(); 1.3 临界段 2.空闲任务 3.任务优先级 4.任务延时的表现 5.时间片 5.1抢占式.协做式 6 ...

  7. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  8. Java系列笔记(4) - JVM监控与调优【转】

    Java系列笔记(4) - JVM监控与调优[转] 目录 参数设置 收集器搭配 启动内存分配 监控工具和方法 调优方法 调优实例       光说不练假把式,学习Java GC机制的目的是为了实用,也 ...

  9. 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9327377 作者:七十一雾央 新浪微博:http:// ...

最新文章

  1. spring28: aspectJ--基于xml
  2. cocos2dx vs2010 配置
  3. Nginx 搭建图片缓存服务器-转
  4. java中如何判断aabb_java判断改错题
  5. android user版本默认开启调试模式
  6. node学习笔记,第一个Node程序
  7. Python生态概览(二):网络爬虫、web信息提取、网站开发、网络应用开发
  8. IEEE ISO/IEC简介
  9. Linux调度器 - deadline调度器
  10. C#:根据特定分隔符分割字符串
  11. 【python教程入门学习】机器学习常用术语
  12. 阅读分享——李开复老师《开工愉快:如何保持每天精力充沛》
  13. QueryDSL 自定义返回结果集类型
  14. MDP 与 贝尔曼方程
  15. 02-Vue基础之条件渲染和列表渲染
  16. 复习单片机:动态数码管(1 数码管介绍+2 74HC245 和 74HC138 芯片介绍+3 硬件设计+4 软件设计+5 实验现象)
  17. caffe中的concate层
  18. 现在程序员圈竞争激烈,如何才能避免焦虑?如何才能打破现状......
  19. 【C语言】实现一个函数,打印乘法口诀表,口诀表的行列数自己指定
  20. Sparkthrift-sql执行报错-File does not exist: hdfs://xxx/t_bd_materialgroup/xxx.parquet

热门文章

  1. 播放器选型及实例演练
  2. 1、物联网Thingsboard实战 ThingsBoard构建物联网平台概述
  3. 建标库标准怎么导出pdf_建标 172-2016-粮食仓库建设标准.pdf
  4. 手撕代码insightFace中的arcface_torch
  5. C陷阱与缺陷(一)词法“陷阱”、语法“陷阱”
  6. IBM serverx服务器RAID阵列磁盘配置JBOD模式(直通模式)
  7. Django基础必会
  8. 项目范围管理的重要性
  9. 安全漏洞是如何被发现的?
  10. 大学物理实验报告 迈克尔逊干涉 and 三棱镜衍射