新手上路
- 积分
- 40
- 金钱
- 40
- 注册时间
- 2020-7-20
- 在线时间
- 14 小时
|
5金钱
本帖最后由 丹丹 于 2023-6-6 19:34 编辑
各位大神帮忙看一下这个程序哪里有问题,为什么无法触发外部中断。
void my_exti_init(void)
{
//使能外部中断,外部中断 EXTI 在APB2总线上
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
//配置EXTI,告诉外部中断,哪些端口要开启中断
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource9);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource8);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource7);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource6);
//配置 F9 F8 F7 E6,这四个按键所在的GPIO口的中断,这样按下按键就会触发中断
//配置NVIC 中断相关的参数
//1)配置NVIC的分组方式
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//2)调用NVIC的初始化函数
NVIC_InitTypeDef Nvic_Value;
Nvic_Value.NVIC_IRQChannel = EXTI9_5_IRQn;//选择中断号
Nvic_Value.NVIC_IRQChannelCmd = ENABLE;//使能该中断
Nvic_Value.NVIC_IRQChannelPreemptionPriority = 2;//配置组优先级的级别
Nvic_Value.NVIC_IRQChannelSubPriority = 2;//配置子优先级的级别
NVIC_Init(&Nvic_Value);//按照上述配置初始化NVIC控制器
//配置EXTI相关的初始化参数
EXTI_InitTypeDef Exti_Value;
Exti_Value.EXTI_Line = EXTI_Line9 | EXTI_Line8 | EXTI_Line7 | EXTI_Line6;//选择外部中断号
Exti_Value.EXTI_LineCmd = ENABLE;//使能外部中断
Exti_Value.EXTI_Mode = EXTI_Mode_Interrupt;//选择中断模式
Exti_Value.EXTI_Trigger = EXTI_Trigger_Falling;//选择下降沿触发
EXTI_Init(&Exti_Value);
}
uint8_t flag = 0;
void EXTI9_5_IRQHandler(void)
{
//判断具体是哪个端口触发了中断,读取每个中断标志位;处理完之后要手动清除中断标志位
if(EXTI_GetITStatus(EXTI_Line9) == SET)//判断是否是由EXTI9触发的中断
{
//handler0();//调用处理函数
EXTI_ClearITPendingBit(EXTI_Line9);//清除EXTI9的中断标志位
//printf("-----------------------------\r\n");
flag = 9;
}
if(EXTI_GetITStatus(EXTI_Line8) == SET)
{
//handler1();
EXTI_ClearITPendingBit(EXTI_Line8);
//printf("-----------------------------\r\n");
flag = 8;
}
if(EXTI_GetITStatus(EXTI_Line7) == SET)
{
//handler2();
EXTI_ClearITPendingBit(EXTI_Line7);
flag = 7;
}
if(EXTI_GetITStatus(EXTI_Line6) == SET)
{
//handler3();
EXTI_ClearITPendingBit(EXTI_Line6);
flag = 6;
}
}
|
|