STM32 EXTI的学习

使用GPIO作为中断源,即EXTI,在程序中通过以下步骤实现:

1)使能EXTIx线的时钟和第二功能AFIO时钟:(以下用PB0作为EXTI的输入)

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |  RCC_APB2Periph_AFIO,ENABLE);

GPIO被配置成EXTI的输入,是复用功能,所以要将AFIO时钟打开。


2)配置EXTIx的中断优先级:

NVIC_Configuration();

这是通过配置NVIC(Nested Vector Interrupt Controller)来实现,其实就是通过对NVIC的初始化(NVIC_Init())


static void NVIC_Configuration(void)

{

NVIC_InitTypeDef  NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  //选择哪个中断向量组


/*配置P[A | B | C | D |E]0为中断源*/

NVIC_InitStructure.NVIC_IRQChanne l= EXTI0_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}


对NVIC初始化实际上就是定义并填充一个NVIC_InitTypeDef类型的结构体。

NVIC_IRQChannel成员来选择要配置的中断向量,

NVIC_IRQChannelPreemptionPriority 来配置中断的抢占式优先级,

NVIC_IRQChannelSubPriority 来配置中断的响应优先级,

由NVIC_IRQChannelCmd 来打开(使能)或者关闭(失能)该中断。


3)配置EXTI中断0.首先这是一个GPIO,要先进行如下配置:

GPIO_Initstructure.GPIO_Pin = GPIO_Pin_0;

GPIO_Initstructure.GPIO_Mode = GPIO_Mode_IPD; //上拉输入

GPIO_Init(GPIOB,&GPIO_Initstructure);

再进行中断配置,如下所示:

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); 

EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); 

4)编写中断服务程序,在这里是通过接在PB0上的按键来控制接在PB5上的LED亮灭。








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值