历史上的今天

今天是:2024年09月29日(星期日)

正在发生

2018年09月29日 | STM32f4外部中断实验代码(02)

发布者:delta14 来源: 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)

推荐阅读

   昨天联发科代子公司汇发国际公告处分汇顶股权计划,未来可能出售2%额度的汇顶股权,目的为资金规划。 依现行IFRS规定,汇发未来出售汇顶股权,不影响联发科的获利与每股纯益,但会列入联发科股东权益。汇发原持有汇顶约二成股权,已经是第二次出售汇顶股权,去年首次解除闭锁就卖过一次持股。 汇发公布,从去年10月30日起的六个月内,规划出售汇顶...
9月27日,通用集团在位于上海的通用汽车中国公司总部宣布正式推出全新一代电子架构,并表示将率先搭载于全新战略车型——凯迪拉克CT5上。发布会现场,通用汽车全球电气化产品、系统及软硬件副总裁丹·尼科森表示:“软件系统已成为汽车行业的最新战场,它是汽车企业保持竞争力的关键所在。这一全新电子架构充分融合了我们对车辆软硬件开发的巧思和探索。”...
前不久OPPO发布了定位中高端的全新5G手机OPPO Reno4 SE,这款手机主打外观设计和充电,其他方面的表现也有兼顾到。除此之外再加上非常合理的价格,所以从一开始就深受消费者的期待。现如今OPPO Reno4 SE已经正式开售,并且在开售当天分别拿下了天猫、京东、苏宁平台的2000-3000元价位段手机销量和销售额冠军。  而对于还在犹豫要不要入手的...
  电伴热带,是一种高新技术产品,因其具有热效率高、节约能源、安装方便、无污染、使用寿命长、维护工作量少等优点,正逐步替代蒸汽、热水伴热保温,不但被广泛应用于石油、化工、钢铁、电力等工业企业的管线、储罐的保温、抗凝、防冻方面。而且也越来越多地被应用在磁翻板液位计中,以防止仪表测量主管内的液体被冻结,致使液位测量工作无法正常进行。...

史海拾趣

问答坊 | AI 解惑

Verilog HDL 语法共享给大家

经典、常用的Verilog HDL语法共享给大家!…

查看全部问答∨

谁能给我传份HIPS主动防御系统源代码啊?

有没有这类系统的源代码 最好是vc 写的 lockdog_jia@yahoo.com.cn…

查看全部问答∨

DOWNLOAD NBOOT文件,测试LCD部分没有输出信号

各位大侠 请问一下,全新的板子,JTAG已经DOWNLOAD NBOOT文件进去,但是LCD上面连开机画面都没有出现得,测试LCD部分输出信号,也没有。 请问,这是什么原因造成的啊??…

查看全部问答∨

fat32 分区格式化,盘的容量大小在fat32的哪个扇区的哪个位置?

fat32 分区格式化,盘的容量大小在fat32的哪个扇区的哪个位置?…

查看全部问答∨

求教密码保护模块中的程序理解

求教密码保护模块中的程序理解 在TI例程中CSM模块有这么一段程序,如下:Uint16 CsmUnlock(){    volatile Uint16 temp;    EALLOW;    CsmRegs.KEY0 = 0xFFFF;    CsmRegs.KEY1 = 0xFFFF;  ...…

查看全部问答∨

为什么选择coldfire?

网上很多推广其他型号单片机的人都写过“为什么选择xxx“,我也写个针对freescale coldfire的,虽然不可避免带有感情色彩,但我相信我这个比他们写的都更客观,没有太多虚夸误导的东西…

查看全部问答∨

请教用AF_DataRequest()发送信息问题?

CC2530构成的网络里通信必须进行绑定操作后才能进行通信吗?终端节点和协调器不进行绑定,利用AF_DataRequest函数可以直接向协调器发送信息吗?   我设想是协调器建立网络后,终端节点成功加入网络,但还没有进行绑定操作,这时通过按键触发 ...…

查看全部问答∨

变频器,变频板。。。 免费送~~~

变频器,变频板。。。 免费送~~~                        变频器,变频板。。。 免费送~~~…

查看全部问答∨

关于单片机控制微波炉火力大小的程序

最近在做基于单片机控制微波炉的控制电路,电路基本上是设计出来了,可是编程不会,求大师指导,谢谢! …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved