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)
推荐阅读
史海拾趣
Active-Semi是一家专注于功率管理芯片和解决方案的领先企业。以下是该公司发展的五个相关故事:
公司成立与初期发展: Active-Semi成立于2004年,总部位于美国德克萨斯州达拉斯。公司的创始人致力于研发创新的功率管理解决方案,以满足日益增长的电子设备对于高效能耗、高性能和低成本的需求。初期,公司聚焦于LED照明、消费电子和工业应用等领域。
技术创新与产品推出: Active-Semi在功率管理领域取得了多项技术创新,不断推出具有高性能和高集成度的芯片产品。公司的产品涵盖了DC-DC转换器、AC-DC转换器、LED驱动器、电池管理器等多个子领域,并通过不断创新提高了产品性能和稳定性。
市场拓展与国际化发展: 随着产品线的扩展和市场认可度的提高,Active-Semi逐步拓展了国内外市场。公司在美国、中国、日本等地设立了销售和技术支持中心,与全球各地的客户建立了合作关系。通过与国际渠道商合作,Active-Semi的产品远销至全球各地,赢得了广泛的市场认可。
并购与战略合作: 为了加强自身的技术实力和市场地位,Active-Semi进行了一系列的并购和战略合作。其中最重要的是2018年,Active-Semi被斯图尔特半导体(Stewart Semiconductor)收购。这一并购进一步扩大了Active-Semi在功率管理领域的影响力和市场份额。
持续创新与未来展望: Active-Semi致力于持续创新,不断推出符合市场需求的新产品和解决方案。公司将继续加强技术研发投入,提升产品性能和稳定性,以满足客户在不断变化的市场需求。未来,Active-Semi将继续致力于成为功率管理领域的领先企业,并在全球范围内提供优质的产品和服务。
聚辰(Giantec)公司电子行业发展的五个故事
故事一:技术传承与独立运营
聚辰半导体股份有限公司(Giantec Semiconductor Corporation)的故事始于2009年,由美国ISSI公司与其高管共同出资成立。这家公司继承了ISSI在EEPROM和智能卡芯片技术上的专利和研发团队,为后续的快速发展奠定了坚实基础。随着ISSI公司股权的变动,聚辰半导体逐渐由国资企业接手并开始独立运营。这一转变不仅让聚辰获得了更大的自主权,也为其在存储芯片领域的深耕细作提供了有力支持。
故事二:全球布局与市场拓展
自成立以来,聚辰半导体便致力于全球化布局,不仅在上海设立总部,还在美国硅谷、韩国、中国香港、中国台湾、深圳、南京、苏州等地设立了子公司、办事处或销售机构。这一战略布局使得聚辰能够更好地服务全球客户,迅速响应市场需求。同时,聚辰的产品线不断扩展,从最初的EEPROM存储芯片,逐步延伸到NOR Flash、音圈马达驱动芯片和智能卡芯片等多个领域,广泛应用于智能手机、汽车电子、工业控制等多个行业。
故事三:技术突破与产品创新
在技术创新方面,聚辰半导体始终走在行业前列。2012年,聚辰推出的EEPROM存储芯片成功进入三星、OPPO等手机品牌的摄像头模组供应链,标志着公司在全球EEPROM存储芯片市场的地位逐渐稳固。此后,聚辰不断推出新产品,如音圈马达驱动芯片与EEPROM二合一产品,进一步提升了其在手机摄像头模组中的竞争力。同时,聚辰还积极布局汽车电子市场,多款车规级存储芯片获得市场认可,为公司带来了新的增长点。
故事四:资本市场助力与品牌提升
2019年,聚辰半导体在上海证券交易所科创板成功上市,为公司的发展注入了强劲动力。资本市场的助力不仅让聚辰获得了更多的资金支持,还显著提升了公司的品牌影响力和市场认知度。上市以来,聚辰持续加大研发投入,优化产品结构,提升产品性能,进一步巩固了其在存储芯片领域的市场地位。
故事五:荣誉加身与行业认可
近年来,聚辰半导体凭借其出色的业绩和技术实力赢得了多项荣誉和行业认可。公司多次入选中国物联网企业百强榜单、上海硬核科技企业TOP100榜单等权威榜单,彰显了其在行业内的领先地位。同时,聚辰还积极履行社会责任,参与公益事业,如向中国科学技术大学捐赠资金用于支持人工智能创新中心建设等,进一步提升了公司的社会形象和品牌价值。这些荣誉和认可不仅是对聚辰过去努力的肯定,也是对其未来发展的期待和鼓舞。
除了封装产品外,Central Semiconductor还致力于裸片产品的开发和供应。公司提供的裸片产品具有多种包装形式,如华夫包、未切晶圆、金属框架已切晶圆和塑料环装已切晶圆等,满足了不同客户的需求。
裸片产品的开发和供应不仅拓宽了Central的产品线,也展示了公司在半导体制造领域的全面实力和技术优势。通过提供高质量的裸片产品,Central进一步巩固了其在电子行业中的地位和影响力。
在20世纪70年代末,当许多半导体制造商纷纷转向硅器件的生产时,Central Semiconductor却洞察到了后缘半导体市场的空白。公司决定坚守锗器件的生产,并凭借这一决策填补了市场空白。这种对旧技术的坚持不仅让Central在一段时间内保持了竞争优势,也为公司在后续发展中积累了宝贵的经验。
随着技术的进步,Central并没有固步自封,而是逐渐将产品系列扩展到包括表面安装设备等更先进的产品。这种转型不仅满足了市场对小型化产品的需求,也展示了Central对市场变化的敏锐洞察和适应能力。
Crane Co.的创立可以追溯到1855年,当时R. T. 克瑞黄铜与铸钟厂在芝加哥正式成立。公司起初主要生产阀门、配件和特种铸件,这些产品为当时的工业发展提供了关键支持。随着美国工业的蓬勃发展,Crane Co.凭借其精湛的铸造技术和优质的产品质量,逐渐在阀门制造领域崭露头角。
20世纪60年代,英国人谢泼德·巴伦产生了发明一款“随时可以取钞票的机器”的想法,并付诸实践。1967年6月27日,世界上第一台ATM在英国伦敦北部的巴克莱银行亮相。这台机器的成功推出,标志着ATM开始进入公众的视野,并逐渐在全球范围内得到广泛应用。
DOWNLOAD NBOOT文件,测试LCD部分没有输出信号 各位大侠 请问一下,全新的板子,JTAG已经DOWNLOAD NBOOT文件进去,但是LCD上面连开机画面都没有出现得,测试LCD部分输出信号,也没有。 请问,这是什么原因造成的啊??… 查看全部问答∨ |
|
求教密码保护模块中的程序理解 在TI例程中CSM模块有这么一段程序,如下:Uint16 CsmUnlock(){ volatile Uint16 temp; EALLOW; CsmRegs.KEY0 = 0xFFFF; CsmRegs.KEY1 = 0xFFFF; ...… 查看全部问答∨ |
网上很多推广其他型号单片机的人都写过“为什么选择xxx“,我也写个针对freescale coldfire的,虽然不可避免带有感情色彩,但我相信我这个比他们写的都更客观,没有太多虚夸误导的东西… 查看全部问答∨ |
CC2530构成的网络里通信必须进行绑定操作后才能进行通信吗?终端节点和协调器不进行绑定,利用AF_DataRequest函数可以直接向协调器发送信息吗? 我设想是协调器建立网络后,终端节点成功加入网络,但还没有进行绑定操作,这时通过按键触发 ...… 查看全部问答∨ |
|
设计资源 培训 开发板 精华推荐
- 【STM32H7教程】第8章 STM32H7的终极调试组件Event Recorder
- 华为徐直军:未来Arm若断供,将会考虑RISC-V
- 【STM32H7教程】第10章 STM32H7的FLASH,RAM和栈使用情况
- 【STM32H7教程】第11章 STM32H7移植SEGGER的硬件异常分析
- 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习
- 【STM32H7教程】第13章 STM32H7启动过程详解
- 【STM32H7教程】第14章 STM32H7的电源,复位和时钟系统
- 【STM32H7教程】第15章 STM32H7的GPIO基础知识(重要)
- 【STM32H7教程】第16章 STM32H7必备的HAL库API(重要)
- 【STM32H7教程】第17章 STM32H7之GPIO的HAL库API