欢迎光临散文网 会员登陆 & 注册

江科大学习笔记 _3.外部中断配置

2023-06-09 12:30 作者:自闭选手的Z23  | 我要投稿

例:开启PB14的引脚的 接收外部信号 中断

1. 开启RCC时钟,挂载在APB2总线上

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

 

2. 开启AFIO时钟,挂载在APB2总线上

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

EXTI和NVIC在STM32中不需要手动开启

 

3. 选择EXTI外设中断线,并配置EXTI

AFIO的配置文件和GPIO在一个函数里

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);

 

 

配置EXTI

    EXTI_InitTypeDef EXTI_InitStruct;

    EXTI_InitStruct.EXTI_Line = EXTI_Line14;

    EXTI_InitStruct.EXTI_LineCmd = ENABLE;

    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;

    EXTI_InitStruct.EXTI_Trigger =  EXTI_Trigger_Falling;

    EXTI_Init(&EXTI_InitStruct);

 

4. 配置NVIC

在内核函数库里(misc.h)

 

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//这个函数在整个程序里只要配置一次

    

    NVIC_InitTypeDef NVIC_InitStruct;

    NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;

    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;

    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;

    NVIC_Init(&NVIC_InitStruct);

 

4步后,中断程序开启,接下来就需要编写中断函数

每一个中断通道都对应一个中断函数

 

void EXTI15_10_IRQHandler(void)

{

//因为EXTI10--15都能进这个中断函数,所以先判断是不是EXTI14进的中断

    if(EXTI_GetITStatus(EXTI_Line14) == SET)

     {

          

          EXTI_ClearITPendingBit(EXTI_Line14);//关闭这个中断,否则一直在中断中

     }

 

}

 


江科大学习笔记 _3.外部中断配置的评论 (共 条)

分享到微博请遵守国家法律