请问,如果同时使用P7、P8口作为外部中断引脚,中断函数该怎么写?void PB7_Exit(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_Initure.Pin=GPIO_PIN_7;
GPIO_Initure.Mode=GPIO_MODE_IT_FALLING;
GPIO_Initure.Pull=GPIO_PULLUP;
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
//
HAL_NVIC_SetPriority(EXTI9_5_IRQn,2,2);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
}
void PH8_Exit(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOH_CLK_ENABLE();
GPIO_Initure.Pin=GPIO_PIN_8;
GPIO_Initure.Mode=GPIO_MODE_IT_FALLING;
GPIO_Initure.Pull=GPIO_PULLUP;
HAL_GPIO_Init(GPIOH,&GPIO_Initure);
//
HAL_NVIC_SetPriority(EXTI9_5_IRQn,2,3);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
}
void EXTI9_5_IRQHandler(void)
{
OS_ERR err;
CPU_SR_ALLOC();
OS_CRITICAL_ENTER();
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7); //这句应该怎么写?是写成这样吗?HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7|GPIO_PIN_8)
OS_CRITICAL_EXIT();
}
求教!!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
#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),指定相应的中断线。不明白的是这儿,怎么去指定?
EXTI9_5_IRQHandler 里面依次调用所有的:
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_6);
……
我记得 ST 给的程序是这么写的。
一周热门 更多>