历史上的今天
返回首页

历史上的今天

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

正在发生

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

2018-09-29 来源:eefocus

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函数来告诉我们系统正在运行,在中断发生后,就执行相应的处理,从而实现第八章类似的功能。


推荐阅读

史海拾趣

CIF公司的发展小趣事

D公司始终坚持品质至上的经营理念,以提供高品质的电子产品为己任。在CIF交易模式下,D公司严格控制产品质量,从原材料采购到生产流程中的每一个环节都进行严格把关。凭借出色的产品质量和良好的售后服务,D公司赢得了客户的信任和好评。

鑫雁公司的发展小趣事

聚洵半导体于2016年在上海张江科学城正式成立,这里被誉为中国的“硅谷”,是科技创新的沃土。公司自创立之初就专注于高性能、高品质模拟及混合信号产品的研发设计与销售管理。在初创阶段,聚洵凭借其核心团队来自国内外顶尖半导体设计公司的背景,迅速构建了强大的技术基础,并获得了业界认可。初期,聚洵聚焦于运算放大器、比较器等基础产品的研发,逐步在市场中站稳脚跟。

ETC2公司的发展小趣事

ETC2公司自创立之初,就专注于ETC技术的研发与创新。他们发现传统ETC系统存在信号识别率低、数据传输速度慢等问题,于是投入大量研发资源,成功开发出了新一代ETC设备。这款设备采用了先进的无线通信技术和高速数据处理芯片,大幅提升了信号识别率和数据传输速度,为高速公路收费系统带来了革命性的变革。ETC2公司的技术创新不仅赢得了市场的认可,也为其在电子行业中树立了良好的口碑。

Bkc Semiconductors Inc公司的发展小趣事

在快速发展的同时,Bkc始终坚持质量第一的原则。公司建立了严格的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格把控。通过不断提升产品质量和客户服务水平,Bkc逐渐赢得了客户的信任和市场的认可。同时,公司还积极参与行业标准的制定和推广,进一步提升了品牌的影响力和行业地位。

Condor公司的发展小趣事

在快速发展的同时,Bkc始终坚持质量第一的原则。公司建立了严格的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格把控。通过不断提升产品质量和客户服务水平,Bkc逐渐赢得了客户的信任和市场的认可。同时,公司还积极参与行业标准的制定和推广,进一步提升了品牌的影响力和行业地位。

艾华集团(AISHI)公司的发展小趣事

随着市场的不断变化和竞争的加剧,艾华集团意识到,要想在行业中立足并取得长远发展,必须走科技创新之路。于是,公司成立了多个研究院,专注于基础材料、产品、工业装备以及产品应用的研究。通过不断的科技创新和产品升级,艾华集团成功研发出了耐超高纹波和耐超强冲击电流的铝电容器技术,这一技术在市场上获得了广泛认可,赢得了飞利浦、欧司朗、GE等世界知名照明客户的青睐。

问答坊 | AI 解惑

寻求视频管理IC方案

本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 最近我们公司正在开发一个视频监控项目.该产品要有视频摄象功能(30-100万像素),且视频信号要能够保存在Micro SD(2GB)卡中(其实功能和DV差不多).产品是面向欧美市场的,有没有该方面的专家,提供 ...…

查看全部问答>

如何将3G移动商务应用于直销行业

直销作为一种新型的营销方式,主要具有目标市场层面的选择性、沟通对象的个别性、沟通过程的连续性、沟通效果的可测试性等优点。随着现代社会的发展和市场竞争的加剧,直销手段已经逐步显现出巨大的市场营销潜力。 如何将3G移动商务运用于直销行业 ...…

查看全部问答>

又遇到个奇怪的读注册表问题,郁闷。

我在虚拟串口驱动中加入了如下代码,在com_init中可以读出,但是在COM_Open中 lResult = RegQueryValueEx(hKey, REG_MAP_PORT_NAME, NULL, &dwType, (LPBYTE)vtBuf,&dwsize); 死活都失败,不知道咋回事,莫非我人品有问题?汗,咋回事,大伙帮忙 ...…

查看全部问答>

请问各位大侠关于wince5.0系统的中英转换问题

我想问问,我现在的WINCE5。0系统加载了中文字体后,好像设置不到英文界面了,在PB中,默认语言是中文,在wince的控制面板-》区域设置中,区域射中选项卡的选中英文美国(其中还有一个是中文中华人民共和国),用户界面语言选项卡中,是阴影,选择 ...…

查看全部问答>

OpenStore的用法

hFlash = OpenStore(L\"MSFlash\"); hFlash = OpenStore(L\"DSK0:\"); 这两句话有什么区别,为什么我在multi-bin的情况下,只能用第一句;而在非multi-bin的情况下只能用第二句?? 请教高手~~ …

查看全部问答>

求助用MMU映射方式启动bootrom或vxworks的BSP

有谁成功用MMU映射方式启动bootrom或vxworks的BSP,小弟那一份自己刚刚完成的at91rm9200bsp换. 也可以详细说明一下思路,高分相送,谢谢了.…

查看全部问答>

(高分请教)有了解“广东亿迅,普信科技有限公司”的朋友请进

想了解一下“广东亿迅,普信科技有限公司”      1、该公司的总体情况如何;      2、与“广东电信研究院”的关系      谢谢    …

查看全部问答>

关于嵌入式软件开发,驱动开发的思考?请前辈指教~

关于嵌入式软件开发,驱动开发,到底需要哪些知识才算的上是称职的工程师,请前辈们指教!…

查看全部问答>

我弄的CC2500,基本是拷贝TI的那款学习板

基本就是把CC2500部分挪过来,呵呵 射频部分没经验  …

查看全部问答>

LM3S系列固化Bootloader的问题~~急~~

我用的是DK-LM3S9B96.。。里面固化了Bootloader,研究了Bootloader的启动方式,想上电强制从固化的bootloader启动,不检测flash是否为空,大概知道要修改BOOTCFG这个寄存器的值,可是不知道怎么修改。。。修改后也不知道上电复位后还是否会变化。。 ...…

查看全部问答>