外部中断/事件控制器(EXTI)
寄存器 | 描述 |
---|---|
IMR | 中断屏蔽寄存器 |
EMR | 事件屏蔽寄存器 |
RTSR | 上升沿触发选择寄存器 |
FTSR | 下降沿触发选择寄存器 |
SWIR | 软件中断事件寄存器 |
PR | 挂起寄存器 |
void EXTI8_IPRT()
{
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
EXTI->IMR = EXTI_IMR_MR8;
EXTI->RTSR = EXTI_RTSR_TR8;
AFIO->EXTICR[2] = AFIO_EXTICR3_EXTI8_PA;
NVIC_EnableIRQ(EXTI9_5_IRQn);
}
EXTI初始化
void EXTI4_Init(){
/* 初始化结构体定义 */
GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化结构体
EXTI_InitTypeDef EXTI_InitStruct; //EXTI初始化结构体
NVIC_InitTypeDef NVIC_InitStructure; //NVIC初始化结构体
/* 初始化结构体定义 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//启动GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//配置端口中断需要启用复用时钟
/* 端口(GPIO)设置 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //PA4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4);//定义PA4外部中断
/* 中断向量控制器(NVIC)设置 */
NVIC_InitStruct.NVIC_IRQChannel=EXTI4_IRQn; //中断线
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; //使能中断
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级2
NVIC_InitStruct.NVIC_IRQChannelSubPriority=2; //子优先级2
NVIC_Init(& NVIC_InitStruct); //初始化NVIC
EXTI_InitStruct.EXTI_Line=EXTI_Line4; //定义中断线
EXTI_InitStruct.EXTI_LineCmd=ENABLE; //中断使能
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt; //中断模式为 中断
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发
EXTI_Init(& EXTI_InitStruct); //初始化EXTI
}
u8 g_u8Flag=0;//定义全局变量
/* EXTI4中断函数 */
void EXTI4_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line4)!=RESET){//判断某个线上的中断是否发生
g_u8Flag=1;//标志位置1
EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE上的中断标志位
}
}
EXTI_DeInit
EXTI_Init
EXTI_Line
EXTI_Mode
EXTI_Trigger
EXTI_LineCmd
EXTI_LineCmd | 描述 |
---|---|
ENABLE | 使能 |
DISABLE | 失能 |
EXTI_StructInit
中断函数
对应中断函数名