涉及的参考来自:野火的《【野火®】零死角玩转STM32—F103霸道》、网上大神、野火例程

1. EXTI0 至 EXTI15 用于 GPIO

2. 编程要点

(1)开启对应GPIO口时钟和GPIO_AF时钟,因为用到中断寄存器了,必须打开AF时钟。

(2)设置外部中断的优先级属性

我的理解:

我觉得给它起个名字叫“中断的优先级属性”—— 包含2个部分——软件可设的主优先级和子优先级、硬件不可设的中断向量号。

调用NVIC_PriorityGroupConfig函数实现

用NVIC进行配置,也就是先进行NVIC分组,把优先级分配下:几个bit的主优先级、几个bit的子优先级,

我的理解就是一个中断具有主优先级(抢占式优先级)和子优先级,为啥要具有这两个优先级呢?是用来判断多个中断同时进来时,如何对中断进行排序,也就是谁先处理。这就看这个中断的主优先级和子优先级了。如果主优先级一样那就判断子优先级,如果子优先级一样,那就判断硬件中断号的排序谁越靠前值越低的谁的优先级就越高就先执行谁。

主优先级和子优先级以及硬件中断表号(或者说中断向量表)是用来仲裁多个中断同时进来如何执行的问题而赋给每个中断的属性。

把中断优先级进行分组后,就是决定每个中断可设的主优先级值和子优先级值。STM32的优先级分配空间只有4bit,那么主优先级和子优先级各占几位,就相当于抢地盘,地盘就那么大,你占得多我就占的少,所以有4种方法,其中一个全部霸占完这个地盘4bit,另一个只有就是0bit。一方霸占3bit,另一方就剩1bit可用……。如下图:

调用NVIC_PriorityGroupConfig函数实现这个分配,这就决定了接下来所有中断可设的主优先级和子优先级的值(它们各自的地盘就固定了,所以就决定其各自地盘可用的资源)。

如果优先级分组为 0,则抢占优先级就不存在,优先级就全部由子优先级控制。

疑问:这个分组配置是针对所有中断的优先级属性配置的么?如果再次配置中断优先级分组了,那么之前设置的各中断及其优先级是不是就无效了,必须重新设?

大神答:是的,针对所有中断的,在中间运行如果再次配置肯定需要重新设了。一般是不会的。

配置中断优先级分组是不是决定各中断的主优先级和子优先级的值,另外主优先级和子优先级是不是可以这样理解:主优先级和子优先级相当于各中断的属性,以用来仲裁多个中断的同时发生?

大神答:是的

(3)引脚输入配置

/* 选择按键用到的GPIO */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

/* 配置为浮空输入 */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

(4)使能EXTI相应中断线

要产生中断,必须先配置好并使能中断线,调用GPIO_EXTILineConfig完成

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);

(5)中断线、边沿触发等中断模式配置

调用EXTI_Init完成

EXTI_InitStructure.EXTI_Line = EXTI_Line0;

/* EXTI为中断模式 */

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

/* 上升沿中断 */

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

/* 使能中断 */

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

STM32的EXTI相关学习笔记相关推荐

  1. STM32 LCD中英文字符显示学习笔记

    本实验基于STM32 LCD英文字符显示学习笔记. 开发板:野火指南者(STM32F103VE) STM32库版本:STM32F10x_StdPeriph_Lib_V3.5.0 IDE:KEIL5(代 ...

  2. 【STM32】OV2640摄像头学习笔记 转

    [STM32]OV2640摄像头学习笔记 2019年03月03日 13:01:35 淹死的大白鲨 阅读数 4736更多 分类专栏: [STM32] 版权声明:本文为博主原创文章,遵循 CC 4.0 B ...

  3. STM32 CAN总线通信学习笔记(一)

    STM32 CAN总线通信学习笔记(一) 一.CAN总线简介 CAN 是控制器局域网络(Controller Area Network, CAN)的简称.CAN采用数据块编码的方式,数据块根据帧的类型 ...

  4. stm32正常运行流程图_stm32学习笔记之问题总结

    1. SYSCLK时钟源有三个来源:HSI RC.HSE OSC.PLL; 2. MCO[2:0]可以提供4源不同的时钟同步信号; 3. GPIO口貌似有两个反向串联的二极管用作钳位二极管; 4. 总 ...

  5. pulsesensor传感器以及STM32相关学习笔记

    1.工作原理 PulseSensor 是一款用于脉搏心率测量的光电反射式模拟传感器.佩戴在手指.耳垂等处,利用人体组织在血管搏动时造成透光率不同来进行脉搏测量.传感器对光电信号进行滤波.放大,最终输出 ...

  6. STM32 CAN通信的学习笔记总结(从小白开始)

       知识来源于互联网,回馈于互联网!   目录 1. 总体概述 1.1 基本概念 1.2 通讯方式 1.3 为什么使用CAN? 1.4 CAN的协议及组成 2. 上帝视角看CAN的通讯过程 2.1 ...

  7. STM32的map文件学习笔记

    前言 前几个月针对公司自己的芯片写了个程序,这个程序有个硬性要求,就是能用的FLASH空间只有4KB,之前已经写得差不多了,最终占用空间3.6KB. 这不,最近又得加需求,还剩一点点FLASH空间可以 ...

  8. STM32 HAL库开发学习笔记: USART1串口通讯(中断方式) IDE-STM32CubeIDE

    STM32串口通讯有三种方式,分别为阻塞(轮询).中断.DMA.这里将用中断的方式开发. 笔者也是刚入门STM32 HAL库开发,该笔记致希望于能帮到初学者,文中配置步骤.代码.实验现象均是笔者实践可 ...

  9. stm32外部中断_STM32学习笔记 | 电源管理及低功耗设计要点

    一款好的电子产品,都需要认真考虑电源管理的问题,电池供电的产品更应该注意低功耗的实现. STM32电源介绍 嵌入式开发直播课 - STM32 USART串口的应用 - 创客学院直播室​www.make ...

最新文章

  1. Linux之tee命令
  2. 一段关于Unix与 Linux的暗黑史
  3. Java中的代码点和代码单元
  4. Modelsim仿真流程
  5. C++静态多态(模版模拟多态)的讨论
  6. 【Spring】SpringMVC 作用域传值的 4 种方式
  7. python中的线程之semaphore信号量
  8. [转载] python pandas.read_csv读取大文件
  9. 世界政府峰会发布了《在区块链上构建超互联未来》文件
  10. 简单的字段类型定义(新新手看)
  11. Python chapter 2amp;3 learning notes
  12. 百度视频播放器android,百度视频播放器
  13. 如何把avi转换为mp4?视频转换用嗨格式视频转换器
  14. 苹果蓝牙耳机平替哪个好用?商务通话蓝牙耳机推荐
  15. c++17好用的新特性总结
  16. Springboot配置suffix指定mvc视图的后缀
  17. 数学建模:整数规划—指派模型与匈牙利算法
  18. 关于Amazon AWS —— 免费的午餐不好吃
  19. 二、jQuery 选择器(超细)
  20. jsp学生体育成绩管理系统

热门文章

  1. Server.MapPath()
  2. linux gtk python,python-Linux上具有pygtk(gtk.gdk)的桌面/根窗口上的键盘/鼠标事件
  3. opencv 测试安装完成_opencv4.3 的安装(linux)
  4. devops .net_DevOps vs. Agile:它们有什么共同点吗?
  5. endless admin_一次中国之旅如何激发Endless OS并教孩子们黑客
  6. 适用于大型项目的TinyCircuits,硬件需求较小
  7. github 创始人_GitHub联合创始人Scott Chacon的视频采访,探讨代码之外的未来
  8. ffmpeg解码H.264视频数据,MFC播放视频
  9. 实战 | webmagic爬取实战之爬取保险经纪人信息
  10. java http 流_java 模拟http请求,通过流(stream)的方式,发送json数据和文件