历史上的今天
返回首页

历史上的今天

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

正在发生

2019年09月03日 | STM32应用简章之外部中断

2019-09-03 来源:eefocus

①初始化IO口为输入。


       GPIO_Init();


②   开启IO口复用时钟。


       RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);


③设置IO口与中断线的映射关系。


        void GPIO_EXTILineConfig();


④初始化线上中断,设置触发条件等。


       EXTI_Init();


⑤配置中断分组(NVIC),并使能中断。


       NVIC_Init();


⑥   编写中断服务函数。


      EXTIx_IRQHandler();


⑦清除中断标志位


      EXTI_ClearITPendingBit();


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_PortSourceGPIOE,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_PortSourceGPIOE,GPIO_PinSource3);

  EXTI_InitStructure.EXTI_Line=EXTI_Line3;

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

 

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

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);

  EXTI_InitStructure.EXTI_Line=EXTI_Line4;

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

 

 

   //GPIOA.0   中断线以及中断初始化配置 上升沿触发 PA0  WK_UP

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); 

 

  EXTI_InitStructure.EXTI_Line=EXTI_Line0;

  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

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

 

 

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

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

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03; //子优先级3

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

  NVIC_Init(&NVIC_InitStructure); 

 

    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 = EXTI4_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寄存器

 

}


推荐阅读

史海拾趣

Adafruit公司的发展小趣事

Adafruit Industries是一家总部位于美国纽约的开源硬件公司,致力于设计和制造创意电子产品。以下是该公司发展的五个相关故事:

  1. 公司创立与初期阶段: Adafruit Industries由Limor Fried于2005年创立,起初是一个个人项目。Limor Fried(也被称为Ladyada)是一位热衷于开源硬件和电子制作的工程师,她在创办Adafruit之前就已经是开源硬件社区的活跃成员。最初,Adafruit专注于销售自制的电子配件和模块,并提供相关的教育资源和项目指南。

  2. 开源文化的推动者: Adafruit是开源硬件运动的积极推动者之一,致力于促进开源硬件的发展和普及。公司提倡知识共享和技术开放,通过在GitHub上发布开源硬件项目和提供详细的教程,鼓励更多人参与到电子制作和创客活动中来。

  3. 产品线的不断扩展: 随着市场需求的增长和公司规模的扩大,Adafruit逐渐扩展了产品线,涵盖了各种电子配件、传感器、开发板等。公司还推出了一系列DIY电子套件,旨在帮助用户学习电子制作和编程技能。Adafruit的产品以其高品质和易用性而著称,受到了全球创客和电子爱好者的青睐。

  4. 教育和社区建设: Adafruit积极参与教育和社区建设工作,通过在线教程、视频教程、工作坊等方式,向学生和爱好者传授电子知识和技能。公司还定期举办各种活动和比赛,鼓励创客社区的互动和交流,推动创新和创意的产生。

  5. 持续创新和发展: 作为一家持续创新的公司,Adafruit不断推出新产品和解决方案,不断满足客户不断增长的需求。公司还与各种组织和机构合作,推动开源硬件的发展和应用,努力成为开源硬件领域的领先者和推动者。随着时间的推移,Adafruit将继续秉承其开源和创新的精神,为全球创客社区带来更多的惊喜和机会。

FLEX LTD公司的发展小趣事

Flex Ltd.(伟创力国际有限公司),作为全球知名的电子制造服务(EMS)供应商,自1969年在美国硅谷成立以来,经历了多个关键的发展阶段和故事。以下是五个与其发展紧密相关的事实性故事:

1. 全球布局的开端:新加坡建厂

1981年,Flex Ltd.在新加坡建立了其第一个海外工厂,这一举措标志着公司正式走出美国,开启了全球化布局的序幕。新加坡工厂的建立不仅为Flex带来了更低的制造成本,还使其能够更贴近亚洲市场,为客户提供更快捷的服务。这一战略性的地理选择为Flex后续在全球范围内的扩张奠定了坚实基础。

2. 纳入纳斯达克上市

随着业务的不断扩展和实力的增强,Flex Ltd.于某年成功在纳斯达克(NASDAQ)上市。这一里程碑事件不仅为公司筹集了更多的发展资金,还极大地提升了其在国际市场上的知名度和影响力。上市后的Flex更加注重财务透明度和公司治理,为股东创造了长期价值。

3. 与华为的合作与风波

Flex与华为的合作曾是业内的佳话。特别是在2018年,Flex承接了华为价值高达25亿美元的代工订单,这一合作极大地推动了Flex的业务增长。然而,随着2019年美国商务部将华为列入“实体清单”,Flex被迫在全球范围内停止与华为的合作,并扣押了华为的物资和设备。这一事件引发了广泛争议,对Flex的声誉和客户关系造成了一定影响。尽管后续双方进行了多轮谈判,但这一风波仍成为了Flex发展历程中一个不可忽视的章节。

4. 供应链的数字化转型

Flex一直致力于通过数字化转型来提高供应链的效率和透明度。公司发起了一项全球计划,旨在通过EDI(电子数据交换)等先进技术实现采购及付款交易的完全自动化。这一举措不仅降低了成本、减少了错误,还提高了供应链的响应能力和可见性。例如,Flex与D公司的EDI项目合作就是其数字化转型的一个成功案例,展示了Flex在推动供应链自动化方面的决心和实力。

5. 环保与社会责任

Flex在快速发展的同时,也积极履行其环保和社会责任。公司遵循欧盟的RoHS和WEEE等环保指令,致力于在电子产品设计和制造过程中减少有害物质的使用,并推动电子废弃物的回收和处理。此外,Flex还通过专项拨款、财务捐助、自愿者行动等多种形式加大对全球社会的支援和投入力度,关注灾难赈济、医疗援助、教育、环保等领域。这些举措不仅提升了Flex的企业形象,也为其可持续发展奠定了坚实的基础。

浙江东亚电子(DongYa)公司的发展小趣事

浙江东亚电子注重企业文化的建设,致力于为员工提供一个良好的工作环境和发展平台。公司关注员工的学习和成长,为员工提供持续长效的发展机会和有竞争力的薪酬。同时,公司还积极开展各类文化活动和社会公益活动,增强员工的归属感和凝聚力。

这些故事框架展示了浙江东亚电子在电子行业中发展起来的几个重要方面。通过技术创新、产业布局拓展、国际市场开拓、品质管理提升和企业文化建设等方面的努力,公司不断壮大自身实力,成为行业内的佼佼者。

Anaheim Automation公司的发展小趣事

1994年,在韩国这片科技热土上,AMOTECH公司应运而生。创立之初,公司便立志于在电子行业中占据一席之地。创始团队凭借对技术的深刻理解和敏锐的市场洞察,决定专注于金属氧化物压敏电阻(MOV)的研发与生产。初期的发展并非一帆风顺,但团队凭借坚定的信念和不懈的努力,逐步在市场中建立了良好的口碑。

Component Research Co公司的发展小趣事

面对不断变化的电子市场和技术环境,Component Research Co始终保持创新精神。公司不断投入研发资金,加强技术研发团队建设,推动新技术、新产品的不断涌现。同时,公司还积极关注市场动态和客户需求变化,及时调整产品策略和市场策略。通过持续创新和市场拓展,Component Research Co在电子行业中保持了领先地位,并迎来了更加美好的未来。

这五个故事均基于电子行业的普遍现象和发展趋势,但具体情节和细节纯属虚构。如果需要更具体或更贴近实际的故事,建议参考真实公司的发展历程和案例。

Efficient Power Conversion公司的发展小趣事

EPC公司成立于2007年,由三位拥有六十年先进功率管理技术经验的资深工程师共同创立。公司的创始人们认识到,随着技术的不断发展,传统的硅功率技术已接近其性能极限。他们决定专注于氮化镓技术的研究与开发,这是一种新型的半导体材料,具有比硅更高的电子迁移率和更低的电阻。经过数年的研究和试验,EPC公司成功开发出了基于氮化镓的高效功率半导体器件,这一突破性的技术为公司的未来发展奠定了坚实的基础。

问答坊 | AI 解惑

ARM入门最好的文章

1.抓住51开发ARM 这几个月来我一直都爬在51的问题,自己都有一点笑自己了,用了4个月的时间,来巩固51的原理和程序,还好我自己算是走过来了,自己笨,身边的高才生又看不上51的原理,他们都比较“牛”,说51过时了,你问那个做什么???我比较 ...…

查看全部问答>

今年的大学生电子竞赛题目,大学生做的出来???

本帖最后由 paulhyde 于 2014-9-15 09:38 编辑 我看了半天,要我在3天3夜做出来,不可想象。 我都3年研发经验了,而且参加过05年的电子竞赛,是天津市2等奖。 可是,看到现在的题目,我怀疑是大学生能做出来的吗??? 如果真能大学生自己做出 ...…

查看全部问答>

TL431电路的应用专题

蒙soso厚爱,在此向电路新手介绍一个tl431芯片的应用。这颗芯片本身是一个并联基准芯片,由于检测端的存在,可以衍生出很多应用。   tl431应用 [ 本帖最后由 张杰克 于 2010-6-25 18:17 编辑 ]…

查看全部问答>

讨论 WINCE5 2440 中堆和栈的分配问题

在一个线程中定义一个数组, 大小为320*240*8 定义1:U8 cData[320*240*8];   这个应该存在系统的stack里面,结果data abort失败了,提示就是stack的问题,于是重新 定义2:U8 *cData = new U8[320*240*8]  ,这个没有问题 ...…

查看全部问答>

WINCE下自带的数据库问题?

怎么在CE下数据库的.DB文件中加入数据? …

查看全部问答>

F2812断货原因

请问F2812为什么出现断货,什么时候恢复正常…

查看全部问答>

C中嵌入asm(\"SETC INTM\")编译通不过?

C中嵌入asm(\\"SETC INTM\\"编译通不过,嵌入其它语句也一样,但是asm(\\"NOP\\"没问题,请问这是怎么回事? …

查看全部问答>

置换 K60 塔式开发板

如题,手头上多了一套板子,139美金的那种,未拆封过,或许可以换TI的LM4F板子,可以加钱换。不过得提下,TI的M4板子似乎有点贵的,呃,相对塔式板似乎不值那么多。换等值的东西也行,暂时没想到可以换什么…

查看全部问答>