单片机交流
直播中

王银喜

7年用户 2377经验值
私信 关注
[问答]

介绍关于stm32的外部中断配置过程

STM32的外部中断配置内容有哪些?stm32的外部中断配置有哪些步骤?

回帖(1)

曾艳

2021-7-6 11:36:46
概述
以简单使用为出发点,介绍关于stm32的外部中断配置过程。重点在于整个配置过程和内容,某些具体概念请查阅相关手册。以洋桃一号开发板为实验平台,程序功能:两个实体按键配置外部中断,在中断处理函数中分别对变量i进行0–9内的加减。即按下KEY1时i加一,按下KEY2i减一。同时将变量i在oled中显示出来。
过程
主程序每隔500ms将i在oled上输出刷新一次,比较简单,重点介绍中断配置过程。按照以下概念介绍先后顺序进行理解配置。
STM32中断优先级组配置
stm32单片机采用的是Cortex-M3内核,共有两个中断优先级:抢占式优先级和响应优先级,每个中断源都需要配置相应的优先级,从而进行中断处理。在这里进行的是优先级组的配置,即确认共有几个抢占式优先级和几个响应优先级。
这个配置在主程序中进行,只进行一次。
void NVIC_Configuration(void){ //嵌套中断向量控制器的设置 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 } 关于优先级可参考以下理解(https://www.cnblogs.com/amanlikethis/p/7374163.html)
外部中断输入引脚配置
输入引脚配置为上拉输入,调用GPIO_Init(GPIOX,&GPIO_InitStructure);
中断引脚到中断线的连接
实验中采用PA0和PA1,在这里是将两个引脚PA0和PA1连接到外部中断线0和外部中断线1。所采用的F103C8单片机共有EXTI 0–15,16个外部中断,也就是16条中短线,PORT A–G的pin0-15对应配置到EXTI 0–15。
在这里需要注意的是,外部中断配置寄存器使用的是复用功能时钟,因此要打开AFIO时钟。即RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);然后再调用GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);配置中断线。
外部中断的控制
包括中断屏蔽控制,中断挂起控制,中断触发控制等。使用的是与GPIO控制相同的配置方法,需要定义一个结构体变量EXTI_InitTypeDef EXTI_InitStruct;对EXTI_Line、EXTI_LineCmd、EXTI_Mode、EXTI_Trigger进行配置,调用函数EXTI_Init()。
在中断处理控制器NVIC中设置中断
需要定义一个结构体变量NVIC_InitTypeDef NVIC_InitStruct;设置NVIC_IRQChannel(中断处理向量)、NVIC_IRQChannelCmd(向量使能)、NVIC_IRQChannelPreemptionPriority(设置抢占优先级)、NVIC_IRQChannelSubPriority(设置响应优先级)。
中断处理函数
中断向量入口固定,16个外部中断分配入口如下。

void EXTI0_IRQHandler(void){ if(EXTI_GetITStatus(EXTI_Line0)!=RESET){//判断某个线上的中断是否发生 i++;//标志位置1,表示有按键中断 if(i==10) i=0; while(KEY1==0); EXTI_ClearITPendingBit(EXTI_Line0); //清除 LINE 上的中断标志位,是中断挂起寄存器的控制 } } 实现
个人认为这个过程是比较符合逻辑的,按照做事的先后顺序准备工作,最终的目的就是事情发生后能够按照既定的方向顺利执行。
过程1是一个系统级的设置,是对整个单片机中断系统的优先级设置。只要有中断,无论中断源是哪个,都要有过程1的配置。
有了过程1的优先级分组,这时我们可以假设有了一个外部中断小蝌蚪(正跳变或者负跳变)过来。外部中断占用一个GPIO口,作为输入,首先要配置成输入模式,也就是过程2,这时小蝌蚪顺利进入单片机内部。接下来是要将这个IO口与外部中断输入线连接起来,也就是过程3,有了过程3,小蝌蚪通过中断线进入到筛选处理过程。过程3也有一个小逻辑就是,对于外部中断线0,它可能的输入IO口就是PA0或PB0或PC0–PG0,同理至中断线1–15,分别对应P_ABCDEFG的PIN1–15口。
有了外部信号小蝌蚪的输入,这时就要配置对于这个信号的筛选和处理,符合标准的小蝌蚪才能往下走,这个标准包括什么样的小蝌蚪(触发选择)、是否接收小蝌蚪(是否屏蔽),这也就是过程4,继续往下走,由于中断控制器要接收和处理来自各地的通过筛选的小蝌蚪,所以系统中断控制器要对外部中断进行设置,包括是否允许中断、中断优先级等,也就是决定哪个小蝌蚪可以用、那么多小蝌蚪该先用谁。这就是过程5。
小蝌蚪经历重重险阻,让单片机知道了它的到来,然后就是中断处理程序,处理内容因蝌蚪而异,但是不要忘记最后清除一下这个小蝌蚪对应的中断挂起位,表示这个小蝌蚪已经被处理过了,这就是过程6。
这时小蝌蚪的使命也完成了,整个外部中断的过程就结束了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分