CKS32F4xx系列产品EXTI应用

cathy的头像
cathy 发布于:周五, 05/12/2023 - 17:03 ,关键词:

EXTI 简介

EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 23个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。

EXTI 功能框图

EXTI的功能框图包含了 EXTI最核心内容,EXTI可分为两大部分功能,一个是产生中断,另一个是产生事件。EXTI功能框图如下:

1.png

中断/事件线

EXTI有23个中断/事件线,每个GPIO都可以被设置为输入线,占用EXTI0至EXTI15,还有另外七根用于特定的外设事件。

2.png

EXTI0至EXTI15用于GPIO,通过编程控制可以实现任意一个GPIO作为 EXTI的输入源。由上图可知,EXTI0可以通过AFIO的外部中断配置寄存器 1(AFIO_EXTICR1)的EXTI0[3:0]位选择配置为PA0、PB0、PC0、PD0、PE0、PF0、PG0、PH0 或者PI0,其他EXTI线(EXTI中断/事件线)使用配置都是类似的。

外设事件连接模式:

EXTI line 16 连接PVD输出

EXTI line 17 连接RTC闹钟事件

EXTI line 18 连接USB OTG FS唤醒事件

EXTI line 19 连接以太网唤醒事件

EXTI line 20 连接USB OTG HS唤醒事件

EXTI line 21 连接RTC 篡改和时标事件

EXTI line 22 RTC唤醒事件

EXTI 初始化结构体

标准库函数对每个外设都建立了一个初始化结构体,比如 EXTI_InitTypeDef,结构体成员用于设置外设工作参数,并由外设初始化配置函数,比如 EXTI_Init()调用,这些设定参数将会设置外设相应的寄存器,达到配置外设工作环境的目的。

初始化结构体和初始化库函数配合使用是标准库精髓所在,理解了初始化结构体每个成员意义基本上就可以对该外设运用自如了。初始化结构体定义在 cks32f4xx_exti.h 文件中,初始化库函数定义在 cks32f4xx_exti.c 文件中,编程时我们可以结合这两个文件内注释使用。

EXTI操作流程

a)首先配置GPIO引脚模式:

RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 
/* 配置GPIOA.0 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
/* 配置为输入模式 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
/* 配置速率为高速模式 */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
/* 使能下拉模式 */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
/* 调用初始化函数 */
GPIO_Init(GPIOA, &GPIO_InitStructure);typedefstruct

b)配置EXTI line0中断线连接GPIOA.0:

typedefstrucSYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, GPIO_PinSource0);

c)配置中断线为中断模式,上升沿触发模式并使能:

EXTI_InitTypeDef  EXTI_Structure;
EXTI_StructInit(&EXTI_Structure); 
/*  配置中断线0 */
EXTI_Structure.EXTI_Line = EXTI_Line0;      
/* 使用中断模式 */
EXTI_Structure.EXTI_Mode = EXTI_Mode_Interrupt;
/* 电压低于阀值时产生中断 */     
EXTI_Structure.EXTI_Trigger = EXTI_Trigger_Raising;  
/* 使能中断线  */
EXTI_Structure.EXTI_LineCmd = ENABLE;   
/* 初始化中断  */
EXTI_Init(&EXTI_Structure);

d)配置中断管理器NVIC,设置EXTI0_IRQn中断源优先级并初始化:

Svoid NVIC_Configuration(void)
{  
    NVIC_InitTypeDef NVIC_InitStructure;  
    /* 嵌套向量中断控制器组选择 */  
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
    /* 配置EXTI0_IRQn中断源 */  
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;  
    /* 抢断优先级为1 */  
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  
    /* 子优先级为1 */  
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  
    /* 使能中断 */  
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
    /* 初始化配置NVIC */ 
    NVIC_Init(&NVIC_InitStructure); 
 }  
    NVIC_PriorityGroupConfig(NVYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, GPIO_PinSource0);

e)当产生 EXTI0中断,在中断程序中进行相应的处理:

typvoid EXTI0_IRQHandler(void)
{  
    if(EXTI_GetITStatus(EXTI_Line0) != RESET)  
    {            
        EXTI_ClearITPendingBit(EXTI_Line0);
        /* 添加用户处理代码 */  
     }
}  edefstruct

来源:中科芯MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 15