13. 外部中断实验

发布者:科技探险者最新更新时间:2017-11-09 来源: eefocus关键字:外部中断  单片机 手机看文章 扫描二维码
随时随地手机看文章

一。外部中断的概述

13. <wbr>外部中断实验
1. 对于51系列单片机只有2个外部中断输入引脚,外部中断0和外部中断1

   而STM32的每一个IO口都可以作为外部中断输入。

2. STM32F103系列单片机中断控制器支持19个外部中断请求。

线0-15对应外部IO口的输入中断。

线 16:连接到 PVD 输出。

线 17:连接到 RTC 闹钟事件。

线 18:连接到 USB 唤醒事件。

3. 对于每一个中断线都可以独立的配置触发方式:上升沿,下降沿或双边沿触发。

二。 GPIO与中断线的映射

GPIO与中断线的映射关系图

13. <wbr>外部中断实验

GPIOx.0映射到外部中断线EXTI0

GPIOx.1映射到外部中断线EXTI1

......

GPIOx.15映射到外部中断线EXTI15

注意:同一时间只能有一个引脚可以映射到中断线。

比如:GPIOA.0映射到EXTI0,同一时间不能有GPIOB.0也映射到EXTI0。


二。对于每一根中断线可以选择相应的触发方式

13. <wbr>外部中断实验

13. <wbr>外部中断实验

16根中断线在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数。

外部中断线0--外部中断线4,共5个中断线各分配了一个中断向量

外部中断线5--9分配了一个中断向量

外部中断线10--15分配了一个中断向量

13. <wbr>外部中断实验

比如:如果开启了中断线5的中断,也开启了线6的中断,就要在中断函数中判断是那个中断线引起的中断。

步骤:1. 映射

          2. 设置中断线的触发方式并使能

          3. 编写中断函数

三。外部中断相关的库函数配置

13. <wbr>外部中断实验

第一步: 设置IO口与中断线进行映射

第二步:初始化中断线,包括触发方式等

第三步:编写中断服务函数

在中断函数中可以获取相应的中断线的状态

进入到中断函数后,相应的中断标志位会置1,在中断函数结束的时候要手动清除中断线上的中断标志位。

配置 GPIO 与中断线的映射关系的函数 GPIO_EXTILineConfig()来实现的:

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)

例如:

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

将中断线 2 与 GPIOE 映射起来,那么很显然是 GPIOE.2 与 EXTI2 中断线连接了。

四。EXTI_Init函数

13. <wbr>外部中断实验

五。外部中断配置的一般步骤

13. <wbr>外部中断实验
(1)初始化IO,把IO设置为输入。

(2)一定要使能复用时钟。否则外部中断不能正常工作。

(3)设置IO口与中断线的映射关系。

(4)设置线上中断,以及触发方式能。

(5)由于使用了中断,所以要设置中断优先级。

        在main函数中要设置中断优先级分组。

(6)编写中断服务函数。

       在中断服务函数中要判断是哪根中断线上发生的中断。比如使用了5-9中断线,它们共用了一个中断服务函数,就需要调用相关的函数判断是哪根中断线发生的中断。

(7)中断函数结束的时候要清除中断标志位。

六。中断触发方式的设置

中断线上中断的初始化

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);

typedef struct

{

uint32_t EXTI_Line;  中断线的标号,取值范围为EXTI_Line0~EXTI_Line15

EXTIMode_TypeDef EXTI_Mode;   中断模式,可选值为中断 EXTI_Mode_Interrupt 和事件                    

                                                           EXTI_Mode_Event

EXTITrigger_TypeDef EXTI_Trigger;  是触发方式,可以是下降沿触发 EXTI_Trigger_Falling,上升沿触发                                                                    EXTI_Trigger_Rising,或者任意电平(上升沿和下降沿)触发

                                                               EXTI_Trigger_Rising_Falling

FunctionalState EXTI_LineCmd;   使能中断线

}EXTI_InitTypeDef;

例:

EXTI_InitTypeDef    EXTI_InitStructure;

EXTI_InitStructure.EXTI_Line=EXTI_Line4;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);      //根据 EXTI_InitStruct 中指定的

//参数初始化外设 EXTI 寄存器

上面的例子设置中断线 4 上的中断为下降沿触发

七。设置 NVIC 中断优先级

八。STM32的中断函数

STM32 的 IO 口外部中断函数只有 6 个

EXPORT   EXTI0_IRQHandler          

EXPORT   EXTI1_IRQHandler       

EXPOR T   EXTI2_IRQHandler         

EXPORT   EXTI3_IRQHandler        

EXPORT   EXTI4_IRQHandler          

EXPORT   EXTI9_5_IRQHandler        

EXPORT   EXTI15_10_IRQHandler  

中断线 0-4 每个中断线对应一个中断函数,中断线 5-9 共用中断函数 EXTI9_5_IRQHandler,中

断线 10-15 共用中断函数 EXTI15_10_IRQHandler

例:

//外部中断 2 服务程序

void EXTI2_IRQHandler(void)

{

delay_ms(10);                        //消抖

if(KEY2==0)                         //按键 KEY2

LED0=!LED0;

}   

EXTI_ClearITPendingBit(EXTI_Line2);   //清除 LINE2 上的中断标志位 

}

中断服务程序完成后要清除相应中断线上的中断标志位

九。其他

中断线 5-9 共用中断函数 EXTI9_5_IRQHandler,外部中断通道选择EXTI9_5_IRQn

例:

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键所在的外部通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03; //响应优先级3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道

NVIC_Init(&NVIC_InitStructure); 

中断服务函数格式为:

void EXTI9_5_IRQHandler(void)

{

       if(EXTI_GetITStatus(EXTI_Line5)!=RESET)//判断某个线上的中断是否发生 

      {

             中断逻辑…

             EXTI_ClearITPendingBit(EXTI_Line5);   //清除 LINE 上的中断标志位

      } 

     if(EXTI_GetITStatus(EXTI_Line6)!=RESET)//判断某个线上的中断是否发生 

      {

             中断逻辑…

             EXTI_ClearITPendingBit(EXTI_Line5);   //清除 LINE 上的中断标志位

      } 

}

十。实例

1. 电路图

13. <wbr>外部中断实验

KEY0,KEY1,KEY2设置成上拉输入,在没有按键按下的时候是高电平,按下按键后变成低电平,松开后又变成高电平。所以可以设置成下降沿触发,对于KEY_UP可以设置成上升沿触发。

2.程序

中断线映射函数GPIO_EXTILineConfig函数在gpio.h头文件中。

而对于外部中断大部分库函数都在exti.h头文件中。

设置中断优先级函数NVIC_Init在misc.h头文件中。


通道的设置在顶层文件stm32f10x.h头文件中,以IRQn结尾。

中断服务函数在启动文件 startup_stm32f10x_hd.h 文件中。

void EXTIX_Init(void)

{

EXTI_InitTypeDef EXTI_InitStru;

NVIC_InitTypeDef NVIC_InitStru;

KEY_Init();  //初始化IO口,KEY0,KEY1,KEY2设置成上拉输入,KEY_UP设置成下拉输入。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //开启复用时钟

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);//KEY0,PE.4映射到中断线4

EXTI_InitStru.EXTI_Line=EXTI_Line4; //确定是哪一根中断线

EXTI_InitStru.EXTI_LineCmd=ENABLE;  //使能

EXTI_InitStru.EXTI_Mode=EXTI_Mode_Interrupt; //中断模式选中断

EXTI_InitStru.EXTI_Trigger=EXTI_Trigger_Falling;  //下降沿触发

 

EXTI_Init(&EXTI_InitStru);

NVIC_InitStru.NVIC_IRQChannel= EXTI4_IRQn;

NVIC_InitStru.NVIC_IRQChannelCmd= ENABLE;

NVIC_InitStru.NVIC_IRQChannelPreemptionPriority= 2;

NVIC_InitStru.NVIC_IRQChannelSubPriority= 2;

NVIC_Init(&NVIC_InitStru);

 

}

void EXTI4_IRQHandler(void)

{

delay_ms(10);   //去抖

if( KEY0 == 0)

{

LED0 = !LED0;  //取反,通过位操作实现

LED1 = !LED1;

}

EXTI_ClearITPendingBit(EXTI_Line4);  // 清除中断标志位,否则下次可能不会再进入中断函数。

}


关键字:外部中断  单片机 引用地址:13. 外部中断实验

上一篇:12. 串口实验
下一篇:14. 独立看门狗实验

推荐阅读最新更新时间:2024-03-16 15:43

51单片机 小车 L298N pwm调速 串口控制 按键控制
难点:1、串口定时器T1,和T0定时器优先级 2、pwm频率与占空比的设置 按键控制 按键1——前进 按键2——后退 按键3——加速 按键4——减速 (板子上只有四个按键) 串口控制 ‘1’——前进 ‘2’——后退 ‘3’——加速 ‘4’——减速 ‘5’——左转 ‘6’——右转 源码: #include reg52.h typedef unsigned char u8; typedef unsigned int u16; //L298N引脚定义 sbit ena = P0^0; sbit in1 = P0^1; sbit in2 = P0^2; sbit in3 = P0^3; sbit in4 = P0^4; sb
[单片机]
基于单片机的视力保护器设计
为了保护青少年的视力,现如今越来越多的公司都在研发生产各种视力保护产品,国内主要有眼保姆,坐姿矫正器和各种护眼灯;国外有法国艾斯 布鲁斯研发的光明天使博士镜,以及美国眼科专家威廉贝茨研发的阿瞳二代产品。但这些产品功能单一,不能满足消费者的个性化需求。针对这一问题,本文将单片机与视力保护相结合,利用单片机芯片的智能处理功能,结合超声波测距原理,光敏电阻随光强变化的特点,单片机定时器T0,T1的工作原理,以及LCD1602液晶显示器的使用方法,设计了一个多功能视力保护器。该设计的技术要求是当学生的面部与书本或电脑的距离小于30 cm时,蜂鸣器产生声光报警,提醒学生注意坐姿;当学生学习时间超过45分钟时,蜂鸣器产生声光报警,提醒学生休息片
[单片机]
基于<font color='red'>单片机</font>的视力保护器设计
AVR单片机之Bootloader技术详解
ATmega128具备引导加载支持的用户程序自编程功能(In-System Programming by On-chipBoot Program),它提供了一个真正的由MCU本身自动下载和更新(采用读/写同时 Read-While-Write 进行的方式)程序代码的系统程序 自编程更新的机制。利用AVR的这个功能,可以实现在应用编程(IAP)以及实现系统程序的远程自动更新的应用。 IAP的本质就是,MCU可以灵活地运行一个常驻Flash的引导加载程序(Boot Loader Program),实现对用户应用程序的在线自编程更新。引导加载程序的设计可以使用任何的可用的数据接口和相关的协议读取代码,或者从程序存储器中读取 代码,然后将
[单片机]
单片机入门学习八 STM32单片机学习五 时钟系统
单片机学习除了了解该篇 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础 中的基础外,我们还需要有时钟的概念,本篇将记录 stm32的时钟系统。 1、STM32时钟介绍 下面这幅图时stm32的时钟系统框图 1)蓝底框表示 时钟源,即: ①HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③LSI是低速内部时钟,RC振荡器,频率为40kHz。(WDG看门狗 使用该时钟源) ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。(RTC实时时钟 使用该时钟源) ⑤PLL为锁相环
[单片机]
<font color='red'>单片机</font>入门学习八 STM32<font color='red'>单片机</font>学习五 时钟系统
MCS-51的存储器结构——单片机原理学习笔记(三)
MCS-51的存储器不仅有ROM和RAM之分,还有片内和片外之分。MCS-51的内存储器集成在芯片内部,是MCS-51的一个组成部分;而片外存储器是外接的专用存储器芯片,MCS-51只提供地址和控制命令,需要通过印刷电路板上三总线才能联机。 1.存储器地址分配 不论是单片机的片内存储器还是片外存储器,MCS-51对某存储器的读写地址都是由MCS-51提供的。存储器的地址分配有3个地址空间,分别是:ROM存储器地址空间(包括片内ROM和片外ROM),地址范围是0000H~FFFFH;片内RAM地址空间,地址范围是00H~FFH;片外RAM地址空间,0000H~FFFFH。地址分配如图所示。 2.片内ROM 8031内
[单片机]
MCS-51的存储器结构——<font color='red'>单片机</font>原理学习笔记(三)
SoC芯片及MCU营收增长 芯海科技2020年净利润同比增75.22%
1月6日,芯海科技发布业绩预告称,公司预计2020年年度实现归属于母公司所有者的净利润为7,500万元左右,与上年同期相比,将增加3,219.77万元,同比增加75.22%左右。归属于母公司所有者的扣除非经常性损益的净利润为6,200万元左右,与上年同期相比,将增加2,467.66万元, 同比增加66.12%左右。 2020年,芯海科技持续加强研发投入和产品开发力度,提升新应用领域开拓能力;公司在智慧健康测量领域实现增长的原因为公司依靠高精度ADC优势,除在体重体脂秤等应用领域持续保持增长外,积极拓展了红外测温、人体成分分析仪等应用。 在模拟信号链芯片领域,芯海科技依靠高精度ADC及集成高精度ADC的SoC芯片,成功进入某头部客户
[手机便携]
89C51单片机定时/计数器0
89C51单片机的定时计数功能由特殊功能寄存器TMOD和TCON共同控制。 TMOD没有位地址,不能进行位操作,其每位的名称和功能如下: TMOD:GATE C/T1 M1 M0 GATE C/T1 M1 M0 D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T1 M1 M0 控制定时计时器1; GATE C/T0 M1 M0 控制定时计时器0; GATE=0时,定时计数信号是T0脚状态(P3.4)或机器周期(C/T=0计机器周期,即定时,C/T=1,计T0脚的状态,即计数),计数开始开关是TR0(0关闭计数
[单片机]
89C51<font color='red'>单片机</font>定时/计数器0
51单片机控制步进电机-让电机转起来
摘要: 本节介绍用简单的方式,让步进电机转起来。其目的之一是对电机转动有直观的感受,二是熟悉整个开发流程 本系列教程必要的51单片机基础包括IO口操作、中断、定时器三个部分,相关基础教程网上很多,可以自行学习 一、软件清单 需要用到的软件有keil5编译软件、STC程序烧录软件 二、控制原理 根据TB6600驱动器原理,向PUL口发送脉冲,每发送一个脉冲,电机就转一步。通过单片机延时的方式,切换PUL口电平产生脉冲,从而控制电机转动。 三、程序代码 //毫秒延时函数 void delay(unsigned int z) { unsigned int x,y; for(x=z;x 0;x--) for(y
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved