STM32f4外部中断实验代码(02)

发布者:delta14最新更新时间:2018-09-29 来源: eefocus关键字:STM32f4  外部中断  实验代码 手机看文章 扫描二维码
随时随地手机看文章

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//外部中断2

   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//抢占优先级3

   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//响应优先级2

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

   NVIC_Init(&NVIC_InitStructure);//配置 NVIC

  

NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//外部中断3

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

   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//响应优先级2

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

   NVIC_Init(&NVIC_InitStructure);//配置 NVIC

  

NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;//外部中断4

   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//抢占优先级1

   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//响应优先级2

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

   NVIC_Init(&NVIC_InitStructure);//配置  NVIC   

}

exti.c文件总共包含5 个函数。一个是外部中断初始化函数void EXTIX_Init(void),另外 4个都是中断服务函数。void EXTI0_IRQHandler(void)是外部中断0的服务函数,负责KEY_UP按键的中断检测;void EXTI2_IRQHandler(void)是外部中断2 的服务函数,负责KEY2按键的中断检测;  void EXTI3_IRQHandler(void)是外部中断3 的服务函数,负责KEY1按键的中断检测;  void EXTI4_IRQHandler(void)是外部中断4 的服务函数,负责KEY0按键的中断检测;  下面我们分别介绍这几个函数。

首先是外部中断初始化函数 void EXTIX_Init(void),该函数严格按照我们之前的步骤来初始化外部中断,首先调用KEY_Init,利用第八章按键初始化函数,来初始化外部中断输入的IO口,接着调用RCC_APB2PeriphClockCmd  函数来使能 SYSCFG 时钟。接着调用函数SYSCFG_EXTILineConfig配置中断线和GPIO的映射关系,然后初始化中断线和配置中断优先级。需要说明的是因为我们的KEY_UP 按键是高电平有效的,而KEY0、KEY1和 KEY2是低电平有效的,所以我们设置KEY_UP 为上升沿触发中断,而KEY0、KEY1和KEY2则设置为下降沿触发。这里我们,把按键的抢占优先级设置成一样,而响应优先级不同,这四个按键,KEY0的优先级最高。

接下来我们介绍各个按键的中断服务函数,一共 4个。先看 KEY_UP 的中断服务函数void EXTI0_IRQHandler(void),该函数代码比较简单,先延时 10ms 以消抖,再检测KEY_UP 是否还是为高电平,如果是,则执行此次操作(翻转蜂鸣器控制信号),如果不是,则直接跳过,在最后有一句EXTI_ClearITPendingBit(EXTI_Line0);通过该句清除已经发生的中断请求。同样,我们可以发现 KEY0、KEY1和 KEY2的中断服务函数和 KEY_UP 按键的十分相似,我们就不逐个介绍了。

这里向大家重申一下, STM32F4的外部中断0~4都有单独的中断服务函数,但是从5开始,他们就没有单独的服务函数了,而是多个中断共用一个服务函数,比如外部中断 5~9的中断服务函数为:void EXTI9_5_IRQHandler(void),类似的,void   EXTI15_10_IRQHandler(void)就是外部中断 10~15 的中断服务函数。另外,STM32F4 所有中断服务函数的名字,都已经在startup_stm32f40_41xx.s里面定义好了,如果有不知道的,去这个文件里面找就可以了。

exti.h头文件里面主要是一个函数申明,比较简单,这里不做过多讲解。

接下来我们看看主函数,main函数代码如下:

int main(void)

{  

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

  delay_init(168);    //初始化延时函数

  uart_init(115200);   //串口初始化  

  LED_Init();       //初始化 LED 端口   

  BEEP_Init();         //初始化蜂鸣器端口

  EXTIX_Init();       //初始化外部中断输入  

  LED0=0;        //先点亮红灯

  while(1)

  {    printf("OK\r\n");  //打印 OK提示程序运行

    delay_ms(1000);  //每隔 1s打印一次

  }

}

该部分代码很简单,先设置系统优先级分组,延时函数以及串口等外设。然后在初始化完中断后,点亮LED0,就进入死循环等待了,这里死循环里面通过一个printf函数来告诉我们系统正在运行,在中断发生后,就执行相应的处理,从而实现第八章类似的功能。


关键字:STM32f4  外部中断  实验代码 引用地址:STM32f4外部中断实验代码(02)

上一篇:STM32f4独立看门狗实验代码
下一篇:STM32f4按键输入实验代码(02)

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

STM32F407ZGT6芯片时钟系统模块介绍
STM32F4时钟系统的知识在《STM32F4中文参考手册》第六章复位和时钟控制章节有非常详细的讲解,网上关于时钟系统的讲解也有很多,讲不出啥特色,时钟模块是芯片非常重要的组成部分,我们必然要提到时钟系统的知识。这些知识也不是什么原创,纯粹根据官方提供的中文参考手册和自己的应用心得来总结的,如有不合理之处望大家谅解。 STM32F4时钟树概述 众所周知,时钟系统是CPU的脉搏,就像人的心跳一样。所以时钟系统的重要性就不言而喻了。STM32F4的时钟系统比较复杂,不像简单的51单片机一个系统时钟就可以解决一切。于是有人要问,采用一个系统时钟不是很简单吗?为什么STM32要有多个时钟源呢?因为首先STM32本身非常复杂,外设非常的
[单片机]
<font color='red'>STM32F4</font>07ZGT6芯片时钟系统模块介绍
S3C2440中断体系结构:外部中断实验
1 SUBSRCPND和SRCPND表明有哪些中断被触发了 INTSUMMSK和INTMSK寄存器用于屏蔽某些中断 2 中断触发→SUBSRCPND相应位置1→INTSUBMSK未屏蔽→SRCPND相应位置1→ ↑ 中断触发 →若是FIQ中断:INTMOD相应位置1(同一时间,只能有一位置1) →INTMSK未屏蔽→INTPND相应位置1(同一时间,只能有一位置1) 3 读取INTPND或INTOFFSET可以确定中断源 4 清除中断的顺序:SUBSRCPND(相应位写1)→SRCPND(相应位写1)→INTPND
[单片机]
51单片机的外部中断触发方式简介
51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。 这个原理很好理解。但应用时需要特别注意的几点: 1) 电平触发方式时,中断标志寄存器不锁存中断请求信号。也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行,必须保证
[单片机]
51单片机外部中断的问题
前几天在网上看到的一个程序问题。 #include reg51.h unsigned char code a ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char i=0; void delay() { unsigned int i,j; for(i=200;i 0;i--) for(j=200; j 0;j--); } void main() { EA=1; EX0=1; IT0=1; while(1) { if(i==10) i=0; P2=~a ; delay(); i++; } } vo
[单片机]
STM32F4制作一个计算器(一) 大数运算
一、大数的运算算法 使用原子的STM32F4开发板制作一个计算器,类似电脑上的标准型计算器。 在制作界面之前,首先要解决大数运算问题。因为STM32为32位MCU,直接计算最大不过32位,按十进制也就是10位数,显然不够用。 为了方便计算,使用数组储存各位数据,并且低位在前。下面数据结构中,使用指针代替数组,这是为了方便以后与界面函数部分对接。 #define THIS_MAXLEN 50 //数组长度 #define SHOW_MAXLEN 30 //自我调整中使用的最大长度 #define DIV_PREC 20 //除法精度相关 #define RESULT_TYPE signed char #define RE
[单片机]
51单片机之外部中断应用实例(电平触发、边沿触发)
硬件:STC89C52RC 开发工具:Keil uVision4 前言:8051是一款很经典的、历史悠久的单片机,作为一款入门级的单片机8051受到很多初学者的欢迎。89c52是8051系列的成员之一,拥有8K字节程序存储空间,512字节随机数据存储空间;I/O口控制端口、中断功能、定时器及串行接口。下面详细讲述外部中断功能的使用。 外部中断:单片机提供的系统紧急事件的输入控制。事件触发的方式包括输入信号的下降沿触发、低电平触发。当触发中断后,单片机会跳到某一个固定的地址去执行中断服务程序。 外部中断信号由INT0、INT1引脚传送进来,如图所示: 有关中断处理的相关控制寄存器如下: 计时计数器控制寄存器 TCO
[单片机]
51单片机之<font color='red'>外部中断</font>应用实例(电平触发、边沿触发)
NVIC寄存器组中的中断挂起SETPEND与消除CLRPEND,与外部中断挂起寄存器EXTI_PR
STM32的中断控制是分级管理的,CM3内核中的NVIC是顶层,对每个通道都设有1BIT的中断挂起位, 但每个通道可能不止一个中断源,比如EXTI5_9_IRQn,对NVIC而言,只算一个通道,但实际包含有5个中断源, 因此,下层就必须实现对这多个中断源的独立监控,这就是EXTI- PR中的挂起位了。 STM32的中断系统可以理解为分两级管理, 顶层当然是CM3内核强大的NVIC,下层就是形形色色的片上外设了, 对于NVIC来说,它最大可以管理256个不同的中断通道, 这256个中断,内核自留了16个,剩下的通称为外部中断(注意与EXTI不要混淆,EXTI是外部中断中的一小部分,全称为外部线中断),外部中断可以多达240个(具
[单片机]
第47章 STM32F429的SPI 总线应用之SPI Flash的MDK下载算法制作
47.1 初学者重要提示 SPI Flash的相关知识点可以看第31章和32章。 SPI Flash下载算法文件直接采用HAL库制作,方便大家自己修改。 47.2 MDK下载算法基础知识 Flash编程算法是一种用于擦除应用程序或将应用程序下载到Flash的程序代码。MDK本身支持的各种器件都自带下载算法,存放在MDK各种器件的软件包里面,以STM32F4为例,算法存放在KeilSTM32F4xx_DFP2.15.0CMSISFlash(软件包版本不同,数值2.15.0不同),但不支持的需要我们自己制作,本章教程为此而生。 47.2.1 程序能够通过下载算法下载到芯片的核心思想 认识到这点很重要:通过MDK创建一批与地址信
[单片机]
第47章 <font color='red'>STM32F4</font>29的SPI 总线应用之SPI Flash的MDK下载算法制作
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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