STM32F103C8T6_2:GPIO外部中断

一、外部中断/事件控制器(EXTI)

       STM32F103C8T6 有19个能产生事件/中断请求的边沿检测器。每个输入先可以独立地配置输入类型(事件——脉冲或中断——挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态先的中断请求。

二、开启外设时钟,配置好结构体成员参数,初始化

        GPIOA端口第10引脚,下降沿触发(外部唤醒线是边沿触发,这些线上不能出现毛刺信号

//外部中断需要开启AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
//所需引脚时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitTypeDef GPIO_InitStructure; 
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

//定义外部中断线结构体
EXTI_InitTypeDef EXTI_InitStructure;
//中断线
EXTI_InitStructure.EXTI_Line=EXTI_Line10;
//触发模式:事件或者中断
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
//触发边沿
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
//开启外部中断
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
//初始化结构体参数
EXTI_Init(&EXTI_InitStructure);

三、设置中断优先级

//配置优先级分组:抢占优先级(x)和子优先级(4-x)共分配4个位
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

//定义、配置中断优先级结构体
NVIC_InitTypeDef NVIC_InitStructure;
//中断通道
NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;
//抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
//子优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
//开启EXTI15_10_IRQn中断
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
//初始化结构体
NVIC_Init(&NVIC_InitStructure);

四、中断服务函数 

void EXTI15_10_IRQHandler(void)
{
    //触发中断
    if(EXTI_GetITStatus(EXTI_Linex)==SET)
      {
          中断处理
      }
    //清除标志位
    EXTI_ClearITPendingBit(EXTI_Line10);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值