hal库开启中断关中断_关于HAL库外部中断,求教!

说的是这个例程?

#include "exti.h"

#include "delay.h"

#include "led.h"

#include "key.h"

//

//本程序只供学习使用,未经作者许可,不得用于其它任何用途

//ALIENTEK STM32F429开发板

//外部中断驱动代码

//正点原子@ALIENTEK

//技术论坛:www.openedv.com

//创建日期:2016/1/5

//版本:V1.0

//版权所有,盗版必究。

//Copyright(C) 广州市星翼电子科技有限公司 2014-2024

//All rights reserved

//

//外部中断初始化

void EXTI_Init(void)

{

GPIO_InitTypeDef GPIO_Initure;

__HAL_RCC_GPIOA_CLK_ENABLE();               //开启GPIOA时钟

__HAL_RCC_GPIOC_CLK_ENABLE();               //开启GPIOC时钟

__HAL_RCC_GPIOH_CLK_ENABLE();               //开启GPIOH时钟

GPIO_Initure.Pin=GPIO_PIN_0;                //PA0

GPIO_Initure.Mode=GPIO_MODE_IT_RISING;      //上升沿触发

GPIO_Initure.Pull=GPIO_PULLDOWN;

HAL_GPIO_Init(GPIOA,&GPIO_Initure);

GPIO_Initure.Pin=GPIO_PIN_13;               //PC13

GPIO_Initure.Mode=GPIO_MODE_IT_FALLING;     //下降沿触发

GPIO_Initure.Pull=GPIO_PULLUP;

HAL_GPIO_Init(GPIOC,&GPIO_Initure);

GPIO_Initure.Pin=GPIO_PIN_2|GPIO_PIN_3;     //PH2,3

HAL_GPIO_Init(GPIOH,&GPIO_Initure);

//中断线0-PA0

HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);       //抢占优先级为2,子优先级为0

HAL_NVIC_EnableIRQ(EXTI0_IRQn);             //使能中断线0

//中断线2-PH2

HAL_NVIC_SetPriority(EXTI2_IRQn,2,1);       //抢占优先级为2,子优先级为1

HAL_NVIC_EnableIRQ(EXTI2_IRQn);             //使能中断线2

//中断线3-PH3

HAL_NVIC_SetPriority(EXTI3_IRQn,2,2);       //抢占优先级为2,子优先级为2

HAL_NVIC_EnableIRQ(EXTI3_IRQn);             //使能中断线2

//中断线13-PC13

HAL_NVIC_SetPriority(EXTI15_10_IRQn,2,3);   //抢占优先级为2,子优先级为3

HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);         //使能中断线13

}

//中断服务函数

void EXTI0_IRQHandler(void)

{

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);//调用中断处理公用函数

}

void EXTI2_IRQHandler(void)

{

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);//调用中断处理公用函数

}

void EXTI3_IRQHandler(void)

{

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);//调用中断处理公用函数

}

void EXTI15_10_IRQHandler(void)

{

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);//调用中断处理公用函数

}

//中断服务程序中需要做的事情

//在HAL库中所有的外部中断服务函数都会调用此函数

//GPIO_Pin:中断引脚号

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

delay_ms(100);      //消抖

switch(GPIO_Pin)

{

case GPIO_PIN_0:

if(WK_UP==1)

{

LED1=!LED1;//控制LED0,LED1互斥点亮

LED0=!LED1;

}

break;

case GPIO_PIN_2:

if(KEY1==0)  //LED1翻转

{

LED1=!LED1;

}

break;

case GPIO_PIN_3:

if(KEY0==0)  //同时控制LED0,LED1翻转

{

LED0=!LED0;

LED1=!LED1;

}

break;

case GPIO_PIN_13:

if(KEY2==0)

{

LED0=!LED0;//控制LED0翻转

}

break;

}

}

这个例程是PA0、PC13、PH2、PH3,各有相应的中断回调函数。可是我用的是PA7、PA8,只有一个回调函数啊,void EXTI9_5_IRQHandler(void)

在这个函数中调用void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin),指定相应的中断线。不明白的是这儿,怎么去指定?

查看更多

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值