前言

本节将会对 STM32(五)进行一个归纳

STM32 的每个 IO 都可以作为外部 中断的中断输入口,这点也是 STM32 的强大之处, STM32F103 的中断控制器支持 19 个外部中 断/ 事件请求。每个中断设有状态

位,每个中断 / 事件都有独立的触发和屏蔽设置

————————————————————————————————————————

目录

1. 对外部中断的描述

2. EXTI中断介绍

3. 以旋转编码器为历程进行代码介绍

——————————————————————————————————————-

一、 外部中断介绍

(1)中断系统

中断 :          在主程序运行过程中,出现特定的中断触发条件,使得CPU暂停当前正在运行的程                          序,而去处理中断程序,完成后,又返回原来被暂停的位置继续工作.

中断优先 :  当有多个中断开始时,CPU会根据事情的轻重响应更加紧急的中断

中断嵌套 :   一个中断正常进行,又来一个更高级的中断,会先去做刚来的高级的中断,然后依                         次返回
————————————————

(2)STM32的中断

1. 68个可屏蔽中断通道,包含 EXTI,TIM,ADC,USART,SPI,IIC,RTC 等多个外设

2. 使用  NVIC  统一管理中断,每个中断有16个可编程的优先等级,可对优先级分组

(如果我们想要使用中断的话,我们就必须配置NVIC,这个在之后我们会进行说明)

————————————————

二、EXTI 外部中断介绍

1.   EXTI可监测指定GPIO口的电平信号,当GPIO口的电平变化时,EXTI就立刻向NVIC发出中断        申请,经过NVIC裁决后,让CPU执行中断程序

2.   触发方式 : 上升沿(低变高),下降沿(高变低),双边沿(前两个都可以),软件出发                              (写代码出发,和GPIO没关系)

4.   GPIO :       支持所有GPIO口,但是相同的Pin不能触发中断

5.   通道数 :     16个Pin(外加PVD输出,RTC闹钟,USB唤醒,以太网唤醒)

6.   触发响应方式: 中断响应,事件响应

我们来用下面这个照片帮助我们了解一下他的基本结构

需要注意的是,同一种引脚只能被使用一次,即 PA0 与 PB0 只有一个口被中断
————————————————

(2)AFIO 的简单介绍

AFIO口主要完成两个任务:复用功能引脚重映射,中断引脚选择

(我们同样参照上面的图)

————————————————

三、以旋转编码器为历程进行代码介绍

1. 什么是旋转编码器?

旋转编码器 : 一种可以用来测量 速度 方向 位置的工具,当它旋转时,他的输出端就可以输出与                         之对应速度方向的波形

而我们也正是通过这些波来进行编程

2. 旋转编码器的波形

知道旋转编码器的波形,是我们进行编程思路的关键

3.旋转编码器的配置

旋转编码器模块有5个引脚,分别是GND(-), VCC(+), SW, DT, CLK。其中VCC和GND用来接电源和地,按缩写SW应该是Switch(开关)、CLK是Clock(时钟)、DT是Data(数据)

4.编程的思路

这里我们将要使用单线程的方法——即用中断读取一个波的高低电平的同时,来读取另一个波电平的状态,以此来计算旋转的方向和次数

当然和正常的机械按键一样,我们都要进行去抖

————————————————————————————————————

编程部分

老样子,我们还是先给出我们的总体的编程思路

1 ——  初始化 IO 口为输入。
2 ——  开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。
3 ——  初始化线上中断,设置触发条件等。
4 ——  配置中断分组( NVIC ),并使能中断。
5 ——  编写中断服务函数
————————————————

先设定我们的旋转编码器函数 ——   void Encoder_Init(void)

————————————-————

1.时钟使能,EXTI和NVIC的时钟是一直打开的,所以我们就不需要再打开了

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

——————————————

2.GPIO初始化

 GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//配置为上拉模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);

这里注意,我们前面说过我们的 旋转编码器 有 5个引脚,但是中间的按键引脚我们在这里不使用

————————————

3.配置 AFIO

 // GPIO_PinRemaConfig() 可以用来引脚重映射GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); //配置AFIO的数据选择器,来选择我们要的引脚,指定外部中断线

即在这,我们选择 PB0 作为 中断口,选择 PB0作为中断源,并且设置我们的中断线

—————————————————

4.配置 EXIT

 EXTI_InitTypeDef EXTI_InitStructure;//结构体定义EXTI_InitStructure.EXTI_Line = EXTI_Line0 ;//需要我们配置中断线,我们用PB0所在的line0EXTI_InitStructure.EXTI_LineCmd = ENABLE;//开启中断EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising_Falling ;//设置触发方式EXTI_Init(&EXTI_InitStructure);//调用这个参数,就可以根据这个结构体

我们的中断触发方式根据我们的使用来选择,这里我们选择上升/下降沿触发(其实选上升 或者下降都是可以的)

——————————————————

5.配置 NVIC

(写在前面)

1.   NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能

2.   NVIC跟内核紧密联系,是内核里的外设

我们把他分为 抢占 和 响应 两种选择, 抢占大于响应,我们优先看抢占的大小(从0开始,越小越先开始),当抢占相同时,我们再看响应,比较方法也是一样的,高优先的抢占是可以打断低优先的抢占的,但是抢占相同时,高优先的响应是不能打断低优先响应的

(1)中断分组

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

(2)配置初始

 NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //选择触发的通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级NVIC_Init(&NVIC_InitStructure);

——————————————————————

6. 中断函数的配置

我们要读取编码器的值,就需要把他返回回去,所以我们这边设了两个值,一个来记录,另一个用来返回

int16_t Encoder_Get(void)
{int16_t Temp;Temp = Encoder_Count;Encoder_Count = 0;return Temp;
}

接下来进入我们的中断函数

void EXTI0_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line0) == SET)//进行一个中断标志位的判断,如果中断置1,中断触发(触发方式在上面选择),进入下面的if语句{  if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) == 1)//先判断其中一个波的电平{Delay_ms(3);//去除抖动if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0)//再判断第二波的电平状态{Encoder_Count --;}else{Encoder_Count ++;}}

——————————————————————————————————

写完中断函数后,就变得很简单了,我们接下来只要在OLED上面显示我们旋转出来的数字就好了

int16_t Num;int main(void)
{OLED_Init();Encoder_Init();OLED_ShowString(1, 1, "Num:");while (1){Num += Encoder_Get();OLED_ShowSignedNum(1, 5, Num, 3);}
}

——————————————————————————————————————-

STM32F103(五)——关于EXIT外部中断介绍相关推荐

  1. EXIT外部中断实验——EXTI

    外部中断概述: STM32的每个IO都可以作为外部中断输入. STM32的中断控制器支持19个外部中断/事件请求: 线0~15:对应外部IO口的输入中断. 线16:连接到PVD输出. 线17:连接到R ...

  2. 中断系统的相关知识(五)(外部中断)

    外部中断0(INT0)和外部中断1(INT1)均有两种触发方式:上升沿或下降沿均可触发方式和仅下降沿触发方式. 因为引脚的状态有0和1,0代表低电平,1代表高电平.从高电平变为低电平,这种电平突然下降 ...

  3. STM32(五)——EXTI外部中断

    文章笔记源于--江科大自化协的视频 一. 中断系统 中断 : 在主程序运行过程中,出现特定的中断触发条件,使得CPU暂停当前正在运行的程序,而去处理中断程序,完成后,又返回原来被暂停的位置继续工作 中 ...

  4. STM32F103标准库开发:外部中断(EXTI)实验

    STM32F103标准库开发----目录 STM32F103标准库开发----外部中断(EXTI)实验----程序源码 本文章技术信息均出自:STM32F103系列超详细参考手册-中文版 一.外部中断 ...

  5. STM32F1笔记(五)外部中断EXTI

    STM32的每个IO都可以作为外部中断的中断输入口. STM32F103的中断控制器支持19个外部中断/事件请求.每个中断设有状态为,每个中断/事件都有独立的触发和屏蔽设置. STM32F103的19 ...

  6. STM32F103外部中断

    一.中断的分类 STM32F103 的中断控制器支持 19 个外部中 断/事件请求.每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置. STM32F103 的 19 个外部中断为: 线 0~ ...

  7. 【STM32】外部中断实验代码详解

    文章目录 main.c exit.c exit.h STM32 的每个 IO 都可以作为外部 中断的中断输入口,这点也是 STM32 的强大之处. STM32F103 的 19 个外部中断为: 线 0 ...

  8. STM32震动感应控制继电器(使用循环VS使用外部中断EXTI和中断控制器NVIC)

    参考:stm32的外部中断 震动感应 控制 继电器 作者:点灯小哥 发布时间: 2021-03-05 22:37:01 网址:https://blog.csdn.net/weixin_46016743 ...

  9. 51单片机 | 外部中断实验

    文章目录 一.外部中断介绍 二.外部中断配置 三.硬件设计 四.软件设计 五.实验现象    51 单片机外部中断有 2 个,外部中断 0 和外部中断 1,它们的使用方法是一样的,所以只要学会一个即可 ...

最新文章

  1. seaborn使用violinplot函数可视化小提琴图、使用swarmplot函数添加抖动数据点(jittered points)显示数据的稠密程度
  2. 天才少女 12 岁被大学录取,希望 16 岁能成为 NASA 工程师
  3. eeglab教程系列(14)-Working with ICA Components
  4. 用户超5亿,三年投10亿,开发者如何抢滩支付宝小程序蓝海?
  5. 让猎头雨天送伞--大话猎头
  6. 的translate插件_知否 ?知否 ?React插件了解一下!
  7. javascript教程_JavaScript教程
  8. JAVA学习-数组元素排序
  9. 某大型银行深化系统技术方案之七:核心层之流程控制引擎
  10. php mysql delete_php教程之PHP MySQL Delete
  11. linux上设置tomcat下web项目只需要ip地址访问省略端口和项目名称
  12. 378.有序矩阵中第K小的元素
  13. Spine 3.8.75 导入Unity报错
  14. 全局热键给截图自动加水印并win10系统通知
  15. 微信公众平台开发(53)砸金蛋
  16. MySQL基础-索引原理
  17. xftp和xshell有什么区别
  18. 古风文字素材_古风文字素材
  19. 【FPGA - 基础知识(一)】复位操作
  20. 计算机设计大赛动漫游戏,关于举办第三届大学生计算机设计大赛 暨2018年(第11届)中国大学生计算机设计大赛选拔赛的通知...

热门文章

  1. 小波分析——2. 小波函数及其逆函数
  2. 免费的主机,用来建站不香么?
  3. 星志远电商:lazada退货增值服务怎么更改?
  4. 数据结构 删除单链表相同值结点(只留一个,,删除其余相同结点)
  5. macbook terminal转换进制
  6. 2.1实现一个顺序存储的线性表(educoder数据结构线性表实训题)
  7. 汽车乘客人身意外保险单,不激活等于废纸!
  8. 【转载】 塔防设计创新点
  9. 系统学习前端之FormData详解
  10. 从头开始学习->JVM(二):为什么java需要JVM(Java虚拟机)?