嵌入式02 STM32 外部中断实验

一、中断

  由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序。该程序执行完成后,CPU接着执行被暂停的程序。这个过程称为中断。(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家吃饭,回家途中,发现泥鳅没带,回去把泥鳅带回家,然后吃完饭继续捉泥鳅!!!)

  中断是CPU处理外部突发事件的一个重要技术。引起中断的原因或者说发出中断请求的来源叫做中断源。根据中断源的不同,可以分为硬件中断和软件中断两大类,有了中断,系统可以更好更快的利用有限的系统资源解决系统响应速度和运行效率的一种控制技术。它的作用就是可以使你的电脑系统运行更快更平稳。

  一方面,有了中断功能,系统就可以使CPU和外设同时工作,使系统可以及时的响应外部事件。而且有了中断功能,CPU可以允许多个外设同时工作。这样就大大提高了CPU的利用率,也提高了数据输入、输出速度。另一方面,有了中断功能,就可以使CPU及时处理各种软硬件故障。计算机在运行过程中,往往会出现事先预料不到的情况或出现一些故障,如电源掉电,存储出错,运算溢出等等。计算机可以利用中断处理系统自行处理,而不必停机或报告工作人员。

  1、硬件中断根据来源的位置分为:

    内部中断(不可屏蔽中断):少数,中断源在CPU的内部,如突然掉电,奇偶校验错、除数为0、运算溢出、单步中断(软件调试时可以使用,每执行一条指令,就中断一次)等

    外部中断(可屏蔽中断):多数,中断源在CPU的外部,一般是指由计算机外设发出的中断请求,如键盘中断、打印机中断、定时器中断。可以使用中断控制器屏蔽外部设备的中断。

  2、是否可屏蔽分为:

    可屏蔽中断

    不可屏蔽中断

  3、中断来源:

    软件中断

    硬件中断

二、中断与事件

 概念:

  事件:是表示检测到某一动作(电平边缘)触发事件发生了,由硬件自动完成的触发到产生结果的通道解决(响应速度快)。

  中断:有某个事件发生并产生中断,并跳转到对应的中断处理程序中,需要CPU接入(响应速度慢)。

 区别:

  中断有可能被更优先的中断屏蔽,事件不会;事件本质上就是一个触发信号,是用来触发特定的外设模块或核心本身(唤醒);事件只是一个触发信号(脉冲),而中断则是一个固定的电平信号;事件是中断的触发源,事件可以触发中断,也可以不触发,开放了对应的中断屏蔽位,则事件可以触发相应的中断。事件还是其它一些操作的触发源,比如DMA(Direct Memory Access,直接存储器存取),还有TIM中影子寄存器的传递与更新。

  简言之,中断一定要有中断服务函数,中断必须要CPU介入,但是事件却没有对应的函数。事件可以在不需要CPU干预的情况下,执行某些操作,事件机制提供了一个完全由硬件自动完成的触发到产生结果的通道,不要软件的参与,降低了CPU的负荷,节省了中断资源,提高了响应速度(硬件总快于软件),是利用硬件来提升CPU芯片处理事件能力的一个有效方法;

三、实验内容

  实验中按下按键0触发中断线4,抢占优先级2,子优先级为2,中断反应函数EXTI4_IRQHandler(),控制LED0和LED1的状态取反

 1 #include "exti.h"
 2 #include "key.h"
 3 #include "led.h"
 4 #include "beep.h"
 5 #include "delay.h"
 6 #include "usart.h"
 7
 8
 9 void EXTIX_Init(void)
10 {
11     EXTI_InitTypeDef KST_EXTI_Structure;
12     NVIC_InitTypeDef KST_NVIC_Structure;
13
14     KEY_Init();           //按键初始化
15
16     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);             //使能IO口复用时钟
17
18     GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4);      //设置IO口与中断线的映射关系
19
20     KST_EXTI_Structure.EXTI_Line = EXTI_Line4;        //配置中断线4
21     KST_EXTI_Structure.EXTI_LineCmd = ENABLE;            //使能
22     KST_EXTI_Structure.EXTI_Mode = EXTI_Mode_Interrupt;         //外部中断
23     KST_EXTI_Structure.EXTI_Trigger = EXTI_Trigger_Falling;    //下降沿触发
24     EXTI_Init(&KST_EXTI_Structure);            //初始化线上中断,设置触发条件
25
26     KST_NVIC_Structure.NVIC_IRQChannel = EXTI4_IRQn;
27     KST_NVIC_Structure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能
28     KST_NVIC_Structure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级2
29     KST_NVIC_Structure.NVIC_IRQChannelSubPriority = 2;    //子优先级2
30     NVIC_Init(&KST_NVIC_Structure);            //中断优先级初始化
31
32 }
33
34 void EXTI4_IRQHandler(void)
35 {
36     delay_ms(10);
37     if(KEY0==0)
38     {
39         LED0 = !LED0;
40         LED1 = !LED1;
41     }
42     EXTI_ClearITPendingBit(EXTI_Line4);           //手动清除中断线4的标志位
43 }

主函数

 

 1 #include "sys.h"
 2 #include "exti.h"
 3 #include "beep.h"
 4 #include "key.h"
 5 #include "delay.h"
 6 #include "led.h"
 7 #include "usart.h"
 8
 9 int main()
10 {
11     delay_init();
12     LED_Init();                    //LED初始化
13     KEY_Init();                    //按键初始化
14     BEEP_Init();                //蜂鸣器初始化
15     EXTIX_Init();                //外部中断初始化
16     uart_init(115200);            //串口初始化
17     LED0 = 0;
18     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
19     while(1)
20     {
21         printf("OK\r\n");
22         delay_ms(1000);
23     }
24
25 }
26
27     

  

  

    

原文地址:https://www.cnblogs.com/ksht-wdyx/p/11625786.html

时间: 2024-10-14 02:21:18

嵌入式02 STM32 外部中断实验的相关文章

外部中断实验

实验4 外部中断实验 一.实验目的 理解中断的基本概念. 掌握STM32的中断源及中断优先级. 掌握STM32外部中断技术的基本使用方法. 掌握STM32中断处理程序的编程方法. 二.实验内容 硬件设计原理图如下图1所示:LED的连接在上一节已经介绍过了,在STM32开发板上的按键KEY0是接在PE4上,KEY1是接在PE3上的,KEY2是连在PE2上,WK_UP接在PA0上. 三.实验预备知识 中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部

cortex_m3_stm32嵌入式学习笔记(四):外部中断实验

本章学习将STM32的IO口作为外部中断输入(实现和按键扫描一样的功能) STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处. STM32F103 的中断控制器支持 19 个外部中断/事件请求.每个中断设有状位,每个中断/事件都有独立的触发和屏蔽设置. STM32F103 的19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断.(本章只学习这一种) 线 16:连接到 PVD 输出. 线 17:连接到 RTC 闹钟事件. 线 18:连接到 USB

STM32 外部中断

1)STM32一般有19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断.线 16:连接到 PVD 输出. 线 17:连接到 RTC 闹钟事件. 线 18:连接到 USB 唤醒事件. 2)配置 GPIO 与中断线的映射关系的函数 GPIO_EXTILineConfig()来实现的: void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) ; 中断线上中断的初始化是通过函数 EXTI_Init(

STM32 外部中断简介

文章来源:http://blog.chinaunix.net/uid-24219701-id-4088004.html STM32  IO 口中断的一些基础概念.STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处.STM32F103 的中断控制器支持 19 个外部中断/事件请求.每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置.STM32F103 的19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断. 线 16:连接到 PVD 输出

STM32外部中断

0.STM32F103上测试 #include <stm32f10x.h> void GPIO_Config(void); void NVIC_Config(void); void EXTI_Config(void); int main(void) { GPIO_Config(); NVIC_Config(); EXTI_Config(); while(1): } void GPIO_Config(void) { /*定义一个GPIO_InitTypeDef类型的结构体,本类型在stm32f1

STM32——外部中断EXIT实现

外部中断实现步骤: 一.初始化,包括:1.AFIO时钟中断和GPIO时钟使能:                          2.GPIO初始化                          3.设置EXTI线                          4.中断向量初始化 二.中断服务函数 采用PB9作为外部中断源,具体实现程序如下: 一.初始化 1 void EXTI_PB9_Init(void) 2 3 { 4 5 GPIO_InitTypeDef GPIO_InitStru

嵌入式单片机,外部中断,中断标志位介绍

body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-chil

嵌入式02 STM32 实验01 端口复用和重映射

内设与外设: 端口复用和端口重映射都需要了解内设和外设,那么什么是内设?什么是外设? 内设:单片机内部集成的功能一般包括:串口模块.SPI模块(Serial Peripheral Interface  串行外设接口).I2C模块(Philips公司开发的一种简单.双向二线制同步串行总线).A/D模块(模数转换器).PWM模块(Pulse Width Modulation  脉冲宽度调制).CAN模块(Controller Area Network  控制器局域网络).EEPROM(Electri

嵌入式系统外部中断实验(按下按键,LED灯依次熄灭)

#include "stm32f10x.h"#include <stdio.h>#include <String.h> void RCC_cfg(void);void GPIO_cfg(void);void Delay(uint32_t nCount);void NVIC_cfg(void);void EXTIX_Init(void); u8 cnt; int main(void){ cnt=0; RCC_cfg(); GPIO_cfg(); NVIC_cfg(