历史上的今天
返回首页

历史上的今天

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

正在发生

2018年09月22日 | 【STM32电机矢量控制】记录13——EXTI外部中断

2018-09-22 来源:eefocus

STM32的EXTI控制器支持19 个外部中断/ 事件请求。每个中断设有状态位,每个中断/ 事件都有独立的触发和屏蔽设置。

STM32的19个外部中断对应着19路中断线,分别是EXTI_Line0-EXTI_Line18:


线0~15:对应外部 IO口的输入中断。

线16:连接到 PVD 输出。

线17:连接到 RTC 闹钟事件。

线18:连接到 USB 唤醒事件。

触发方式:STM32 的外部中断是通过边沿来触发的,不支持电平触发。 

外部中断分组:STM32 的每一个GPIO都能配置成一个外部中断触发源,STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。


STM32的每个IO口都可以作为中断输入,这点很好用。要把IO口作为外部中断输入,有以下几个步骤:

1)初始化IO口为输入。

这一步设置你要作为外部中断输入的IO口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。否则可能导致中断不停的触发。在干扰较大的地方,就算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一定程度防止外部干扰带来的影响。

2)开启IO口复用时钟,设置IO口与中断线的映射关系。

STM32的IO口与中断线的对应关系需要配置外部中断配置寄存器EXTICR,这样我们要先开启复用时钟,然后配置IO口与中断线的对应关系。才能把外部中断与中断线连接起来。

3)开启与该IO口相对的线上中断/事件,设置触发条件。

这一步,我们要配置中断产生的条件,STM32可以配置成上升沿触发,下降沿触发,或者任意电平变化触发,但是不能配置成高电平触发和低电平触发。这里根据自己的实际情况来配置。同时要开启中断线上的中断,这里需要注意的是:如果使用外部中断,并设置该中断的EMR位的话,会引起软件仿真不能跳到中断,而硬件上是可以的。而不设置EMR,软件仿真就可以进入中断服务函数,并且硬件上也是可以的。建议不要配置EMR位。

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

这一步,我们就是配置中断的分组,以及使能,对STM32的中断来说,只有配置了NVIC的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。关于NVIC的详细介绍,请参考前面章节。

5)编写中断服务函数。

这是中断设置的最后一步,中断服务函数,是必不可少的,如果在代码里面开启了中断,但是没编写中断服务函数,就可能引起硬件错误,从而导致程序崩溃!所以在开启了某个中断后,一定要记得为该中断编写服务函数。在中断服务函数里面编写你要执行的中断后的操作。

EXTI库函数:

【STM32电机FOC】记录13——EXTI外部中断

EXTI配置例程:

EXTI初始化设置:

void EXTI_PB9_Init(void)

 

{

  GPIO_InitTypeDef GPIO_InitStructure;

  NVIC_InitTypeDef NVIC_InitStructure;

  EXTI_InitTypeDef EXTI_InitStructure;

     //使能GPIO和AFIO时钟,值得注意的是,当使用外部中断的时候必须使能AFIO时钟。

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);

     

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //浮空输入

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //IO速度为50MHz

  GPIO_Init(GPIOB,&GPIO_InitStructure);  

  

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9);//将EXIT线9连接到PB9

  EXTI_InitStructure.EXTI_Line = EXTI_Line9;

  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;  //上升下降沿触发

  EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能中断线

  EXTI_Init(&EXTI_InitStructure);//初始化中断

  

  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

}

配置中断服务函数: 

void EXTI9_5_IRQHandler(void)

{

  if(EXTI_GetITStatus(EXTI_Line9) != RESET)  //EXTI9产生了中断

  {

   ……………………………………………………//中断处理程序

  }

  EXTI_ClearITPendingBit(EXTI_Line9);//清除中断

}


 

主要完成任务:

1、整理回顾STM32的系列配置,进行系统性地整理;

2、整理FOC电机程序,进行查缺补漏;

3、回顾方波驱动程序;


推荐阅读

史海拾趣

Herrmann Kg公司的发展小趣事

Herrmann Kg凭借其卓越的产品质量和专业的服务,赢得了全球众多领先客户的信赖。例如,CUSTOMCELLS®作为一家全球领先的客户专用锂电池开发商,在生产过程中采用了Herrmann Kg的超声波焊接系统,有效降低了废品率,提高了生产效率。这种深度合作不仅展示了Herrmann Kg在电池制造领域的专业能力,也进一步巩固了其在全球市场中的地位。通过不断满足客户的特定需求,Herrmann Kg在电子及其他相关行业中树立了良好的口碑。

聚辰(Giantec)公司的发展小趣事

在快速发展的同时,港源公司始终不忘履行社会责任。公司秉承绿色环保、节能减排的理念,在生产经营活动中以预防为主、全员参与为行动纲领,防治污染、节废减排。港源公司选用绿色环保RoHS材料,严格管控生产制造过程,确保生产出的产品符合国际环保标准。此外,公司还积极参与社会公益活动,为社会和谐发展贡献自己的力量。

上海晶丰明源(BPS)公司的发展小趣事

近年来,晶丰明源在电源管理芯片领域取得了多项技术突破。公司成功研发出多款高性能、低功耗的芯片产品,广泛应用于智能手机、平板电脑、智能家居等领域。同时,公司还积极拓展海外市场,与多家国际知名厂商建立了合作关系,产品出口至全球多个国家和地区。这些技术突破和市场拓展的成果,进一步巩固了晶丰明源在行业内的领先地位。

Helium_Systems__Inc.公司的发展小趣事

进入21世纪后,海曼电子意识到单一市场已无法满足其快速增长的需求。于是,公司开始实施全球化战略,首先在欧洲市场建立了多个分支机构,随后逐步向亚洲、北美等地拓展。为了提升品牌知名度,海曼电子积极参加国际电子展会,与全球客户建立联系,并通过高质量的产品和服务赢得了良好的口碑。同时,公司还加大了在市场营销和品牌建设上的投入,成功塑造了“精准、可靠、创新”的品牌形象。

APM Hexseal公司的发展小趣事

APM Hexseal的产品很快在军事领域获得了广泛应用。公司的密封靴子通过了严格的军事检查和独立的QPL等效项,证明了其卓越的性能和可靠性。此外,APM Hexseal还协助开发了MIL-B-5423规范(现为MIL-DTL-5423),为军方的新设备保护要求设定了初始标准。这一合作不仅提升了APM Hexseal在军事领域的影响力,也为其在电子行业中的发展打开了新的大门。

APX Technologies公司的发展小趣事

APX Technologies在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,致力于研发和生产低能耗、低污染的电子产品。此外,APX Technologies还积极参与社会公益活动,为社会的和谐发展贡献自己的力量。这些举措不仅提升了公司的品牌形象,也赢得了社会各界的广泛赞誉。

以上五个故事均基于虚构的APX Technologies公司的发展情况,旨在展示一个电子行业公司可能经历的不同发展阶段和面临的挑战。这些故事并不代表任何真实情况,仅供参考和启发。

问答坊 | AI 解惑

TPS7101 FB引脚电压

使能端置低电平时为什么FB引脚的电压总是在跳动?问题出在哪里?谢谢…

查看全部问答>

PT2272 无线遥控接收解码器芯片

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 PT2272 无线遥控接收解码器芯片 …

查看全部问答>

Vxworks实现ping命令

请教下,我们现在使用的VXWORKS系统跑在设备上 有些时候想看看能不能PING通接在该嵌入式系统的网络设备,请问该如何实现?…

查看全部问答>

S3C2410X的rtc问题

请问S3C2410X的rtc是不是一开机就会走 具体一点,是不是实时时钟寄存器里面的数据会自动变化 BCDSEC BCDMIN BCDHOUR 这些寄存器…

查看全部问答>

求GANG430编程器的中文版软件

谁有GANG430编程器的中文版软件?TI的网站上的链接坏了,谁有可以提供一下不?…

查看全部问答>

后仿真的结果不对,求解!

程序: module time_delay_reg(in,                      clk  ,reset ,out        & ...…

查看全部问答>

764工作室,请给我一张免费的票吧

殷老师,王学长,陈学长,漆学姐,廖部----------------------764的全体室员。。。我代表1109班的孩纸们向你们问好啦,你们辛苦啦。。。。小的来给你打杂来了,请收下偶吧!   我一定好好发奋的!…

查看全部问答>

理解模拟电路:无源器件

本帖最后由 dontium 于 2015-1-23 12:44 编辑 TI还真有些好文章呢! 下面分离给大一篇,关于无源器件的: …

查看全部问答>

CC1100低功耗问题讨论

本帖最后由 dontium 于 2015-1-23 12:42 编辑 单位在用CC1100做一个东西,手持设备,电池供电,低功耗设计是必须的了,CC1100用的是现成的模块,就是CC1100的系统集成到了一小块电路板上,接口和电源通过接插件连接。 领导的意思是这个模块单独用 ...…

查看全部问答>