STM32片上资源:EXTI

中断系统

(1)中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在进行的程序,转而去处理中断程序,处理完成后又返回到原来被暂停的位置继续进行。

(2)中断优先级:当有多个中断源申请中断时,CPU回根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源(中断优先级的配置由NVIC来控制)。

(3)中断嵌套:当一个中断正在进行时,又有新的更高优先级的中断申请中断,CPU再次申请当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。

中断执行流程

STM32中断相关知识

(1)68个可屏蔽中断通道,包含EXTI,TIM,ADC,USART,SPI,I2C,RTC等多个外设)。

(2)使用NVIC同意管理中断(通过设置抢占优先级和响应优先级)

        抢占优先级:当CPU在执行一中断时,又来一中断,且该中断的抢占优先级高,则CPU停止当前中断,转向抢占优先级更高的中断。

        响应优先级:当CPU在执行一中断时,且存在等待的中断,这时来了个中断,该中断的响应优先级高于在等待中的,则该中断将“插队”,在前一个中断结束后,率先被CPU处理。

NVIC相关函数

void NVIC_PriorityGroupConfig(uint32_t NVIC_PrioriityGroup)

作用:选择优先级分组。

void NVIC_Init(NVIC_InitTypeDef *NVIC_InitStructure)

作用:初始化NVIC

NVIC基本结构(外设——NVIC——CPU)

注:NVIC在内核,不用RCC_APB开启时钟。

NVIC分组优先级(由NVIC_PriorityGroupConfig()函数配置)

(1)NVIC当时中断由优先级寄存器的4位(0~15)决定,着4位可进行切分,分成高n位的抢占优先级和低4~n位的响应优先级

(2)抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级系统的按中断号排队。

补充:优先级的值越小,优先级越高。

EXTI简介

(1)EXTI(Extern Interupt)外部中断

(2)EXTI可监测指定GPIO口的电平信号,当其指定GPIO口产生电平变化时,EXTI立即想NVIC发出中断申请,经过NVIC裁决后即可中断CPU的主程序,使CPU执行EXTI对应的中断程序。

(3)支持的触发方式:

        1.上升沿        0----->1

        2.下降沿        1------>0

        3.双边沿        0---->1 或 1----->0

        4软件触发

(4)支持的GPIO:所有的GPIO口,但是相同的Pin口不能同时触发。(因为AFIO只能选择一个Pin口)。

(5)EXTI的通道

        1.16个GPIO_Pin(主要功能)

        2.PVD输出        ------------|

        3.RTC闹钟        ------------|

                                                --------------------> 因为外部中断有个功能,以低功耗模式下的停止

                                                |                               模式下唤醒STM

        4.USB唤醒        ------------|

        5.以太网唤醒        ---------|

(5)触发响应方式:

        1.中断响应()申请中断,让CPU执行中断函数。

        2.事件响应(如果选择该响应,那么,外部中断的信号不会通向CPU,而是通向其他外设,触发其他外设)。

EXTI基本结构

(1)AFIO:中断引脚选择(数据选择器),可在前16个GPIOx外设16Pin引脚里选择其中一个连接到后面EXTI通道里。

(2)EXTI外部中断的EXTI9~5H合到同一个通道中;EXTI15~10合到同一个通道中(说明外部中断的9~15会触发同一个中断函数,15~10会触发同一个中断函数),所以在这两个中断函数中,需要根据标志位来区分到底是哪个中断进来的(EXTI_GetITStatus()==SET?)

(3)EXTI有20条线路接到了其他外设,用于触发其他外设操作(事件响应)

EXTI相关函数

初始化相关函数

void EXTI_DeInit(void);

作用:将EXTI的配置都清除,恢复成上电默认状态。


void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);

作用:根据结构体的参数配置EXTI外设


void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);

作用:吧参数传递的结构体变量赋到一个默认值(即:将结构体初始化)


void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);

作用:用软件触发外部中断。

关于状态标志位相关函数


FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);

作用:获取指定的标志位是否被置1.


void EXTI_ClearFlag(uint32_t EXTI_Line);

作用:对置1的标志位清除


ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);

作用:获取指定的标志位是否被置1.


void EXTI_ClearITPendingBit(uint32_t EXTI_Line);

作用:对置1的标志位清除

补充:关于标志位

(1).当某个模块(比如串口,定时器),若有状态寄存器,则涉及标志位和中断之间的区别,进而有FlagStatus和ITStatus使用区别。

(2)标志位:是指当某事件发生时,无论对应的中断是否使能都会使相应的标志位。且当对应的中断也使能使,可以产生中断,此时要进行中断优先级配置,初始化配置,编写中断服务函数。(实际上,在中断函数中判断是否发生,是借助了标志位判断,称中断标志位)

(3)所以FlagStatus单纯判断标志位是否置位,即当事件发生时但是没有使能对应事件的中断时,标志位仍置位,但没有发生中断。而库函数ITStatus,不仅判断了标志位还判断了使能位,只有当中断发生(事件发生+中断使能)才返回SET。

综上知:

(1)

FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);


void EXTI_ClearFlag(uint32_t EXTI_Line);

用于普通函数。

(2)
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);


void EXTI_ClearITPendingBit(uint32_t EXTI_Line);

用于中断函数中

哪些会产生标志位?(放在状态标志位中)

(1)外部中断来了,挂起寄存器置标志位。

(2)串口收到数据置标志位。

(3)定时器事件到也会置标志位。

配置外部中断EXTI的关于GPIOX选的AFIO函数

AFIO函数(注:ST公式设给AFIO分配专门的库函数,AFIO的库函数于GPIO在同一个文件中)

(1)void GPIO_AFIODeInit(void)

作用:用于复位AFIO外设,AFIO外设的配置会区别清除。

(2)void GPIO_PinLockConfig(GPIO_TypeDypeDef *GPIOx,uint16_t GPIO_Pin)

作用:锁定GPIO配置,被指定的引脚配置会被锁定,防止意外更改。

(3)void GPIO_EventOutputConfig(uint8_T GPIO_PortSource,uint8_t GPIO_PinSource)

(4)void GPIO_EventOutputCmd(FunctionlState NewState)

作用:用于配置AFIO事件输出功能的。;

(5)void GPIO_PinPemapConfig(uint32_t GPIO_Remap,FunctionalState Newstate)

作用:用于引脚重定义。

(6)void GPIO_EXTILineConfig(uint32_t GPIO_PortSource,uint8_t GPIO_PinSource)

作用:配置AFIO的数据选择器,来选择我们想要的中断引脚

(7)void GPIO_MediaInterface(uint32_t GPIO_ETH_MediaInterface)

作用:关于以太网有关。

AFIO复用IO口

(1)AFIO主要用于引脚复用功能的选择和重定义。

(2)在STM32中,AFIO主要完成:复用功能引脚重定义和中断引脚选择。

EXTI框图

理解:

(1)硬件触发(即上升沿,下降沿,双边沿)和软件中断寄存器的值接在”1“或门上(即任意一个为1,或门可输出1).

(2)或门有”兵分两路“,触发中断或事件。

(3)中断屏蔽寄存器:作用:开关控制,因为它与X一起通入一个与门,与门只有当两者都为1时,才为1,通,所以只有中断屏蔽寄存器置1,才有可能通过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值