GPIO外部中断

有一个QQ好友,问了自我这么一个题目:“我每日都花了很多时日来读书QQ空间、微信公众平台的部分有价值的随笔,连续几年了,可是本人的生存都没有其他的更动,这是不是验证学习无用论呀?”

STM32的“中断”机制很复杂,看了PM(Cortex-m4)和RM,对它只领会了一个大体。首先,与“中断”相关的术语就有
exception, interrupt, event
六个。Cortex-m4核中蕴含一个NVIC控制器,用于拍卖 exception。而 interrupt
是属于 exception 之一种,别的 exception 类型包括 SysTick等。interrupt
又叫作IRQ。

自己回复说:“这是您的学习模式无用,而不是学习不行。“

STM32里面、Cortex-m4核之外的“中断”,即为
interrupt/IRQ。STM32因而 IRQ Channel 向 NVIC 请求处理 IRQ,而 NVIC
处理包括 IRQ 在内的各个 exception,例如:优先级…等等。对于 IRQ,NVIC
将调用其“中断处理程序” ISR。

老牌的军事管制大师德鲁克说过,没有人工你承担,除了你协调,而你唯一的本金就是文化。

些微
STM32 外围接口直接通过 IRQ Channel 与 NVIC 接口,而 GPIO
外部中断则要通过另一个控制器–EXTI–与NVIC接口。GPIO与 EXTI
之间的接口称为 EXTI line;而 EXTI 与 NVIC之间则为 IRQ Channel。GPIO
pin与EXTI line之间是n:1的涉嫌,而EXTI line与 IRQ
Channel之间也是n:1的涉及。基本上,PXn 对应 EXTI line n,这里X=A,
B, … H,n=0, 1, 2 … 15。例如,PX2(PA2, PB2 …)都对应于 EXTI
line 2。

在此间我还需要补给一句就是,你唯一的能力就是利用知识创立价值的力量。

EXTI
line与 IRQ Channel之间的相应关系则有些复杂,16个 EXTI line 占用7个
IRQ:

对于自身的这些QQ好友来说。我把他看QQ空间和微信公众平台的光阴,称为娱乐时间,而非学习时光。

  • EXTI
    line 0 – 4 分别对应一个IRQ,因而,共有5个 IRQ
  • EXTI
    line 5 – 9 共用一个IRQ
  • EXTI
    line 10 – 15 共用一个IRQ

趣味就是,他在QQ空间上打闹了几年的光阴,那么人生毫无变化是例行的。可是,他在这段时光里面娱乐了团结,让祥和减轻了压力、心旷神怡了、快乐了,这是娱乐时间的真面目。

另外,EXTI
line 上除了襄助 interrupt 之外,还匡助 event。event
被触发之后,并不传递给 NVIC 去处理(像 IRQ
这样),而是发送一个脉冲给电源管理模块,似乎是用来实现唤醒功效的。

他或许因为在本人空间里面来看一些文化,感觉没错,然后给同事仍旧朋友说:“哇塞,我晓得有一个叫体系学习法的东西。哇塞,你们看书为何这么慢,用思想导图+高效阅读的点子就足以了。”

GPIO、EXTI
与 NVIC 之间的关联,用下图简单表示:

共事们,尤其是异性同事投来羡慕的视力,颂扬的说:“哇,你真厉害呀,给自身签个名吧。”

图片 1

接下来他自己沉浸在被人家膜拜的氛围中,自己YY了一下,自我娱乐罢了。那什么样的上学,才终于学习时间吗?

 

看了很多书,参加了诸多培训,看了N年的QQ空间,你学到或精晓了过多新的学问,这么些知识对于你的话,只是消息,而不是文化。

故而,对于编程而言,需要对GPIO、EXTI、NVIC
3个模块分别举行配置和操作。所幸,Cube HAL 以及 CubeMX
工具大大地下降了开支的复杂度。

而只有当你从头商量,将这个文化形成了团结的看法,并插足执行之后,对于你的沉思深度和生存发生了明确的成形,这才终于真正的就学,而只有这么的时光利用,才总算学习时间。

Nucleo
开发板上有一个用户按钮B1和一个用户LED LD2,可以用它们来实现一个概括的
GPIO 外部中断 Demo。Nucleo 原理图体现,B1 举办了 RC
de-bouncing,由此可以作为外部中断源。未经 de-bouncing
的按钮,是不应有接触中断的。B1接在 PC13
口,已经计划了上拉电阻:

当然,如果你的目的,就只是是在工作之余娱乐一下,希望感到舒畅和欣喜,那么时间的采纳是值得的。

 

倘诺您是意在因此学习那个文化,改变自己,让投机人生更甜蜜和快乐,这您将要好好想想,怎么样有效的利用时间,真正的学习是消耗时间之后,不仅仅是大脑里面输入了文化,还非得要有出口的收获。

图片 2

上次,有一个情侣持续关注了自我的QQ空间一年多,有几回,她来找我问:“汤先生,你写的求学方法是不是实在?”

 

本身问她:“我在那些QQ空间,理论讲得充分多了,实践的法子也讲得充足多了,你不需要问我,你找一篇讲模式的日志试试效果,你就掌握呀。”

 

过了一周,她回心转意找我说:“我后悔了,从前只是看您的日记,一贯没思考过要执行。上次和你交流完之后,我将您QQ空间日志提到的办法都实施了两次,仅仅是这段日子的取得,就极度大。”

应用CubeMX,将B1口形式设置为
GPIO_EXIT13。可见,PC13 使用了 EXTI line
13。其它,由于使用了上拉电阻,选取暂停为降低沿触发:

事实上,像她那样的,占了90%左右。只是看了,懂了,知道了。

图片 3

自我一个QQ好友,暂称为:A。他关怀了几十个QQ空间,关注了无数个微信公众平台。我问她:“你爱惜这样多,你一天都能看完?”

图片 4 

她说:“嗯。是的。我上下班坐公交车,傍晚进食,蹲马桶的时候就看。”我说:“看了这样多,有咋样收获没有?”

 

他说:“嗯。从前什么都不懂,现在本身懂了好多地点的学问。”

这般,GPIO和
EXTI 就安排好了。别忘了还需要配置 NVIC。这里只需要简单地启用它对应的
IRQ即可,此外保持默认:

再有其余一个QQ好友,暂称为:B。他的章程不一样,他关切了20个左右的微信公众平台和20个左右的QQ空间,但是里面全体都是同一个雨后春笋的,同一个主旨内容的。

图片 5

本身问他:“你是何等学习的?”

 

她说:“我的求学效能太差了,以前平日看书和加入培训,不过很快就记不清了,没什么意义。所以我明天只关注高效学习的情节,我的目的是理解高效学习的法子后,我再去学学其他的,效果就快了,好了。”

总而言之分析一下
CubeMX 生成的代码。首先,中断向量表定义在起步代码 startup_stm32f303xe.s
中,在那多少个文件中可以看出有着 exception 处理程序(函数名),包括 EXTI
ISR:

这二种情势覆盖了当今多数人在碎片化时间的读书方法。

g_pfnVectors:
    .word   _estack
    .word   Reset_Handler
    .word   NMI_Handler
    ...
    .word   SysTick_Handler
    ...
    .word   EXTI0_IRQHandler
    .word   EXTI1_IRQHandler
    .word   EXTI2_TSC_IRQHandler
    .word   EXTI3_IRQHandler
    .word   EXTI4_IRQHandler
    ...
    .word   EXTI9_5_IRQHandler
    ....
    .word   EXTI15_10_IRQHandler
    ....

A的就学格局,我叫作:随意阅读式

  

感觉到那个很正确,这些也很有用,所以都关注了。在新闻化时代,你都能学习完呢?这跟事业不聚焦一样的,学习也是需要聚焦的。

其中,EXTI15_10_IRQHandler
就是按钮B1的刹车处理程序。那一个函数的贯彻在 stm32f3xx_it.c
中,它其实不过调用了 Cube 库的 HAL_GPIO_EXTI_IRQHandler()函数,将端口号作为参数传递进去:

这就跟你在信息网站上,左看看,右看看,左刷刷,右刷刷,时间就浪费完了。

/**
* @brief This function handles EXTI line[15:10] interrupts.
*/
void EXTI15_10_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI15_10_IRQn 0 */

  /* USER CODE END EXTI15_10_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
  /* USER CODE BEGIN EXTI15_10_IRQn 1 */

  /* USER CODE END EXTI15_10_IRQn 1 */
}

B的上学情势,我称之为:对象学习式

  

她对自己的读书,有观看者清的靶子和系统的统筹。他领会为啥而学,知道学习想赢得什么的结晶。往往这种学习效果,是最好的。

检查 HAL_GPIO_EXTI_IRQHandler()函数的实现,发现它身处 GPIO HAL
模块内,它又调用了一个回调函数 HAL_GPIO_EXTI_Callback(),而该回调函数的默认实现表明为
__weak 属性,我们得以覆盖:

现在这么些社会,已经是运动互联网时代了,大家不可避免的,起始利用零散时间来进展碎片化学习。朋友圈,微信公众平台,QQ空间,新浪已经占据了大部分人的碎片化学习渠道。

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
  /* EXTI line interrupt detected */
  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
  {
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    HAL_GPIO_EXTI_Callback(GPIO_Pin);
  }
}

__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
   ...

只是,这多少个渠道的知识,都是属于碎片化的知识点,紧缺系统性和连续性,任何一篇著作都只是作者的村办经历和不同角度的构思格局。

  

万一您看的学问如故领域方面是雾里看花,这你的频率和效果并不是专程出彩的。

因此,我们在 stm32f3xx_it.c
增加 HAL_GPIO_EXTI_Callback() 的实现,每当B1按下,开/关LD2:

这就像上两回,我一张合计导图剖析了秦刚100多篇日记,一张合计导图剖析了东方老师20多篇日记的出色一样。我能连成一气,大部分做不到的缘由是何许?

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
    HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
}

因为自己有稳固的系统学习法作为基础,这只是其一。

  

其二,我在自媒体领域也有深的功夫和经验。假设自身只是一个正好学思维导图的人,或者对自媒体一窍不通的人,我能有那么些成果吧?肯定无法。

另外,在gpio.c
中的 MX_GPIO_Init() 函数中,看到了 NVIC 的配备,但并不曾看出与 EXTI
有关的安排。其实,EXTI 配置已由 HAL_GPIO_Init()函数处理,不劳大家艰苦。也就是说,对 GPIO 的表面中断的处理,要运用 GPIO
和 NVIC 2个Cube 模块:

那么,问题来了,假如您很想学学某个世界的知识,你应有什么充份利用碎片化的渠道(QQ空间,微信公众平台,虎扑等)来举行完美的学习?

  ...
  HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
  ...
  /* EXTI interrupt init*/
  HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

有钱的形式:直接去插手培训,有大家给你一对一指导。这是学习最快的办法。

  

在这种意况下,你再去读书这么些天地的文化,看这多少个QQ空间、微信公众平台或新浪的时候,你就能在更高的角度和知识上,对碎片化知识的上学,整理和吸收。

 

而且,你可以针对这一个知识,通过创作、讲演的点子分享出去,将别人的文化内化为团结的知识。同时,不断的思辨和执行,最后将文化爆发为价值和财物。

没钱的措施:找这上头大量的图书,资料全套都会聚回复,然后一个人渐渐啃,逐步消化。遭受不懂的题目时,就去百度知道上开展问答,或者找这上头的大方尝试提问(可能没人理你),然后逐步积攒经验。

要学会书本、碎片知识展开搭配式的就学,那样您就从系统化,碎片化的求学方法中,收获更多了。对呀,实践才是王道。

您无时无刻看碎片法的文化,每一趟观望外人提供的办法时,就去执行一下。

多少个月后,你就会发觉你的生活会爆发根本性的转移。不信?你尝试啊。  

自己是汤帅,欢迎互换便捷学习。

QQ号:1137168268 个人微信号:1137168268

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注