历史上的今天
返回首页

历史上的今天

今天是:2025年04月16日(星期三)

正在发生

2021年04月16日 | STM32外部中断程序

2021-04-16 来源:eefocus

原理图:

程序分析:


#include "led.h"


#include "delay.h"


#include "key.h"


#include "sys.h"


#include "usart.h"


#include "exti.h"


#include "beep.h"


//STM32开发板实验5


//外部中断实验






int main(void)


{




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


NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级


uart_init(9600);//串口初始化为9600


LED_Init();//初始化与LED连接的硬件接口


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


KEY_Init(); //初始化与按键连接的硬件接口


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


//LED0=0;//点亮LED0


while(1)


{


printf("OKrn");


delay_ms(1000);


}


}




//按键初始化函数设置PC2,3,5为上拉输入


void KEY_Init(void) //IO初始化


{


GPIO_InitTypeDef GPIO_InitStructure;


//初始化KEY0-->GPIOA.13,KEY1-->GPIOA.15 上拉输入


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTE时钟




GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5;//PE2~4


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入


GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOE2,3,4


}


初始化中断时钟初始化中断GPIO口,设定优先级



void EXTIX_Init(void)


{




EXTI_InitTypeDef EXTI_InitStructure;


NVIC_InitTypeDef NVIC_InitStructure;




// KEY_Init();//按键端口初始化




RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能复用功能时钟




//GPIOE.2 中断线以及中断初始化配置 下降沿触发


GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource2);




EXTI_InitStructure.EXTI_Line=EXTI_Line2;//KEY2


EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;


EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;


EXTI_InitStructure.EXTI_LineCmd = ENABLE;


EXTI_Init(&EXTI_InitStructure);//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器




//GPIOE.3中断线以及中断初始化配置 下降沿触发 //KEY1


GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);


EXTI_InitStructure.EXTI_Line=EXTI_Line3;


EXTI_Init(&EXTI_InitStructure);//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器




//GPIOE.4中断线以及中断初始化配置 下降沿触发//KEY0


GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);


EXTI_InitStructure.EXTI_Line=EXTI_Line5;


EXTI_Init(&EXTI_InitStructure);//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器




NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//使能按键KEY2所在的外部中断通道


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


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


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


NVIC_Init(&NVIC_InitStructure);






NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//使能按键KEY1所在的外部中断通道


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


NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//子优先级1


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


NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器




NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;//使能按键KEY0所在的外部中断通道


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


NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//子优先级0


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


NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器


}


PC2中断LED1翻转



void EXTI2_IRQHandler(void)


{


delay_ms(10);//消抖


if(KEY2==0)//按键KEY2


{


LED1=!LED1;


}


EXTI_ClearITPendingBit(EXTI_Line2); //清除LINE2上的中断标志位


}




//外部中断3服务程序,LED2翻转


void EXTI3_IRQHandler(void)


{


delay_ms(10);//消抖


if(KEY1==0)//按键KEY1


{


LED2=!LED2;


}


EXTI_ClearITPendingBit(EXTI_Line3); //清除LINE3上的中断标志位


}

//外部中断5服务程序,LED0翻转



void EXTI9_5_IRQHandler(void)


{


delay_ms(10);//消抖


if(KEY0==0)//按键KEY0


{


LED0=!LED0;


//LED1=!LED1;


}


EXTI_ClearITPendingBit(EXTI_Line5); //清除LINE4上的中断标志位


}


推荐阅读

史海拾趣

Ethertronics公司的发展小趣事

Ethertronics公司的发展故事一:技术突破与初创期

Ethertronics公司成立于XXXX年,由一群热衷于无线通信技术创新的工程师共同创立。在创立初期,公司就瞄准了天线技术的未来发展方向,致力于研发高性能、多频段、小型化的天线产品。通过不断的技术创新和实验,Ethertronics成功开发出了一系列具有革命性的天线产品,这些产品不仅性能卓越,而且体积小巧,可以广泛应用于各种电子设备中。这些技术突破为公司赢得了业界的广泛认可,也为公司的后续发展奠定了坚实的基础。

Ethertronics公司的发展故事二:市场拓展与合作伙伴关系

随着技术的不断成熟和产品的不断完善,Ethertronics开始积极拓展市场。公司与多家知名电子设备制造商建立了长期稳定的合作伙伴关系,为其提供定制化的天线解决方案。通过与这些合作伙伴的紧密合作,Ethertronics的产品逐渐打入了主流市场,并被广泛应用于智能手机、平板电脑、笔记本电脑等各种电子设备中。这些合作伙伴的信任和支持,为公司的发展提供了强大的动力。

Ethertronics公司的发展故事三:持续创新与研发投入

作为一家以技术为核心的公司,Ethertronics始终将创新作为公司发展的核心动力。公司不断加大对研发的投入,积极引进和培养高素质的研发人才,不断推出具有竞争力的新产品。同时,公司还与多家高校和科研机构建立了紧密的合作关系,共同开展技术研究和创新。这些持续的创新和研发投入,使Ethertronics在天线技术领域始终保持领先地位。

Ethertronics公司的发展故事四:国际化战略与全球布局

随着全球市场的不断开放和竞争的加剧,Ethertronics开始实施国际化战略,积极拓展海外市场。公司在全球范围内建立了多个研发中心和销售机构,与当地的合作伙伴建立了紧密的合作关系。通过这些机构,Ethertronics能够更好地了解当地市场需求和竞争态势,为客户提供更加优质和高效的服务。同时,公司的国际化战略也为其带来了更多的商业机会和发展空间。

Ethertronics公司的发展故事五:社会责任与可持续发展

作为一家有着高度社会责任感的企业,Ethertronics始终将可持续发展作为公司发展的重要目标。公司积极倡导环保和节能的理念,致力于开发更加环保和节能的产品。同时,公司还积极参与各种公益活动和社会责任项目,为社会做出积极贡献。这些举措不仅提升了公司的品牌形象和社会声誉,也为公司的长期发展奠定了更加坚实的基础。

富之光(Fujicon)公司的发展小趣事

富致科技的研发团队最早可以追溯到1997年,当时一群在电子、材料、化工领域拥有深厚背景的专家聚集在一起,共同探索高分子正温度系数PPTC技术的可能性。随着技术的不断成熟,他们于1999年12月正式成立了富致科技股份有限公司,将研发成果转化为实际产品,并迅速在台湾新北市五股工业园区建立了生产基地。这一初期的技术积累和团队组建,为富致科技后续的发展奠定了坚实的基础。

Acopian Power Supplies公司的发展小趣事

随着全球化进程的加速,富致科技也积极实施国际化战略。公司不仅在欧洲、北美等地设立了销售和服务网络,还通过参加国际展会、建立海外研发中心等方式,不断提升品牌影响力和市场竞争力。同时,富致科技还注重与全球顶尖企业和研究机构的合作,共同推动PPTC技术的创新与发展。

FOX [Fox Electronics]公司的发展小趣事

随着全球对环保和可持续发展的重视,Fox Electronics积极响应行业趋势,将绿色生产理念融入企业运营中。公司投资引进先进的环保设备和生产工艺,减少生产过程中的废弃物排放和能源消耗。同时,Fox Electronics还推出了一系列符合RoHS(限制有害物质)指令的产品,满足市场对环保产品的需求。这些举措不仅提升了公司的社会责任感,也为其在绿色电子市场赢得了良好的声誉。

Conxall公司的发展小趣事

Conxall公司的创始人李华,是一位在电子行业摸爬滚打多年的工程师。他深感市场上电子产品同质化严重,缺乏真正的创新。于是,他毅然决定创立Conxall公司,致力于研发具有独特功能和高性能的电子产品。李华带领团队日夜奋战,终于研发出了第一款具有自主知识产权的智能手机芯片,凭借其出色的性能和稳定性,迅速在市场上获得了认可。

东科半导体(DK)公司的发展小趣事

东科半导体(DK)公司一直将技术创新作为发展的核心驱动力。公司投入大量资金和资源用于研发,先后开发出AC/DC、同步整流、第三代半导体氮化镓芯片等先进技术。其中,东科半导体的同步整流芯片研发成功,其独特的两引脚封装技术为全球首创,为公司赢得了行业内的独家竞争优势。这一技术的成功应用,不仅提升了公司产品的性能,也进一步巩固了东科在电源管理芯片市场的领先地位。

问答坊 | AI 解惑

如今选电源到底是小功率?还是大功率?

前不久,国内著名电源厂商航嘉电源在北京、重庆、上海、广州先后召开了《05年秋季新品发布会暨技术研讨会》。会议主要围绕:1、电源节能将成为新的热点; 2、产品进一步细分,更加重视应用;3、2.2版电源技术与双核心处理器的密切关系;在会议上,航嘉 ...…

查看全部问答>

ARM培训视频-dsp-CPLD-FPGA开发视频-嵌入式系统开发-单片机开发视频

ARM培训视频-dsp-CPLD-FPGA开发视频-嵌入式系统开发-单片机开发视频 ------------------------------------------------------------------ 【ARM培训视频】课程主要内容 1.概念和基本工具: 嵌入式系统基本概念、嵌入式操作系统介绍 嵌入式系 ...…

查看全部问答>

proteus7.5sp3最新PJ

proteus7.5sp3最新PJ测试完全可用!…

查看全部问答>

推荐一个超好的FPGA设计文档

当小说一样来读FPGA设计文档,你试过吗?不错值得推荐的资料,大家共同进步!…

查看全部问答>

wince6.0 MDOC 驱动出现堆栈溢出

有没有哪位大哥用 PXA270 + WINCE6.0 + MDOC 啊? 现在我把 WINCE6。0 打补丁到 081231(08年底的升级包) 后, 出现堆栈溢出,跟踪代码后发先是在读 FLASH 的时候,处理内存上出现的 请高手指教。 #define MAP_PTR(ptr, len) ptr #define MAP ...…

查看全部问答>

串口操作GSM模块的问题

使用基于SIMCOM300的开发板,用超级终端对目标板进行操作。使用COM3,不管有没有用串口线连上开发板,发送AT都能返回OK。但除了AT+IPR等几条指令外,在开发板正常连接的情况下,输入其余AT指令均返回ERROR。请达人指点是什么原因。…

查看全部问答>

买了块ILI9320控制器的触摸屏

      买了块 ILI9320控制器的触摸屏,触摸芯片是ADS7843   以前都是用的12864的液晶,发现这触摸屏还是有点难度啊,关是ILI9320控制器的pdf 而且都是英文的115页呀,哈哈哈哈,看的过程是痛苦的,但是收获确实明 ...…

查看全部问答>

锂离子电池过欠压用滞回比较器,窗口大小该如何确定

应急灯的充电芯片采用MAX1640. MAX1640中有两个逻辑控制输入口,用以设定四种电流模式:关断、涓充、快充以及一个恒压小电流的(TOP-OFF)。 由于不打算采取MCU来控制,所以拟用一个LM324做成的 过压、欠压的比较器。   基本思路是其中两 ...…

查看全部问答>

GE PLC问题

在线使用的GE PAC7I产品,近期出线两次同样问题:远程I/O不输出,从故障表中看CPU无故障,也显示在RUN状态,但在I/O故障表中有LOSS  OF IOC,不解其意,如果重新启动PLC后故障消除。两次出现的间隔有12天。…

查看全部问答>