• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

外部中断初始化及服务函数有问题吗?中断线13不能用,帮忙看看

小白爱32 2018-09-30 浏览量:953
    帮忙看下代码,按C13按键不起作用呢?
void key_init(void)
{
	GPIO_InitTypeDef GPIO_Initstruct;
	EXTI_InitTypeDef EXTI_Initstruct;
	NVIC_InitTypeDef NVIC_Initstruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIOENABLE);//GPIOC时钟使能以及复用时钟使能
	
	GPIO_Initstruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_13;
	GPIO_Initstruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Initstruct.GPIO_Mode=GPIO_Mode_IPU;//按键输入上拉直接用BSRR寄存器置位
	GPIO_Init(GPIOC&GPIO_Initstruct);
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOCGPIO_PinSource1);//中断线1配置
	
	EXTI_Initstruct.EXTI_Line=EXTI_Line1;//
	EXTI_Initstruct.EXTI_LineCmd=ENABLE;//
	EXTI_Initstruct.EXTI_Mode=EXTI_Mode_Interrupt;//
	EXTI_Initstruct.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发
	EXTI_Init(&EXTI_Initstruct);
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOCGPIO_PinSource13);//中断线13配置
	
	EXTI_Initstruct.EXTI_Line=EXTI_Line13;//
	EXTI_Initstruct.EXTI_LineCmd=ENABLE;//
	EXTI_Initstruct.EXTI_Mode=EXTI_Mode_Interrupt;//
	EXTI_Initstruct.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发
	EXTI_Init(&EXTI_Initstruct);
	
	NVIC_Initstruct.NVIC_IRQChannel=EXTI1_IRQn;//设置中断通道
	NVIC_Initstruct.NVIC_IRQChannelPreemptionPriority=0x01;//设置抢占优先级
	NVIC_Initstruct.NVIC_IRQChannelSubPriority=0x01;//设置子优先级
	NVIC_Initstruct.NVIC_IRQChannelCmd=ENABLE;//IRQ通道使能
	NVIC_Init(&NVIC_Initstruct);//中断初始化
	
	NVIC_Initstruct.NVIC_IRQChannel=EXTI15_10_IRQn;//设置中断通道
	NVIC_Initstruct.NVIC_IRQChannelPreemptionPriority=0x01;//设置抢占优先级
	NVIC_Initstruct.NVIC_IRQChannelSubPriority=0x02;//设置子优先级
	NVIC_Initstruct.NVIC_IRQChannelCmd=ENABLE;//IRQ通道使能
	NVIC_Init(&NVIC_Initstruct);//中断初始化
	
}
void EXTI1_IRQHandler(void)//外部中断1服务函数
{
  delay_ms(10);
  if(EXTI_GetITStatus(EXTI_Line1))//未进入中断
	{
		led0=!led0;
	}
	EXTI_ClearITPendingBit(EXTI_Line1);//清除中断标志
}

void EXTI15_10_IRQHandler(void)
{
  	delay_ms(10);    //消抖			 
 
    if(EXTI_GetITStatus(EXTI_Line13))
	{
	 	led1=!led1;
	}
	 EXTI_ClearITPendingBit(EXTI_Line13);  //清除EXTI13线路挂起位
}

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这个芯片是不支持这个中断线的,并没有这个外设国,芯片不支持,要使用更多引脚的芯片
    • 发布于 2018-09-30
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:7
  • 为什么初始化这里是EXTI15_10_IRQn,中断服务函数也是EXTI15_10_IRQHandler​,跟你用的GPIO13能对应上吗?
    • 发布于2018-09-30
    • 举报
    • 评论 1
    • 0
    • 0
小白爱32 回复了 捷波 :没有找到EXTI13_IRQn,我用的是STM32103RCT6, HD大容量产品 回复

  • c13应该用的是中断13号不是15号 exti15-10不对
    • 发布于2018-10-01
    • 举报
    • 评论 0
    • 0
    • 0

  • 看你的程序C13所在的IO和你的中断线没有对应上
    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的IO和你的中断源没有对应,这样不会产生中断的
    • 发布于2018-10-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 别听楼上胡说,EXTI10~15都是在EXTI15_10_Handler()中断服务函数中响应的,你的服务函数没有问题,检查一下是不是GPIO复用不正确之类的原因。

    • 发布于2018-10-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的中断里面有延时,,,,,很可能是这个bug导致的
    • 发布于2018-10-29
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

外部中断初始化及服务函数有问题吗?中断线13不能用,帮忙看看