stm32f103c8t6_外部按键中断

这里以自己画的板子为例,实现按键1的中断,按键1接的是PB3

stm32f103c8t6_外部按键中断_第1张图片

  PB3的第一引脚功能是JTDO,这里我们要使JTDO功能失能,代码如下:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
外部中断一般配置步骤如下:

1.初始化IO口为输入(GPIO_Init())

GPIO_InitTypeDef GPIO_InitStructure; 	
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
GPIO_Init(GPIOB, &GPIO_InitStructure);

2.开启IO口时钟和IO端口复用时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);

3.设置IO口与中断线的映射关系

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource3);//选择 GPIO 管脚用作外部中断线路
/*参数格式:参数1:GPIO_PortSourceGPIOX,X可以是A、B、C、D、E
 参数2:GPIO_PinSourceN,N可以是0~15   */

4.初始化外部中断EXTI,设置触发条件等

	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断请求模式
	EXTI_InitStructure.EXTI_Line = EXTI_Line3; //外部中断线
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //设置输入线路下降沿为中断请求
	EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能
	EXTI_Init(&EXTI_InitStructure);//初始化

5.配置中断分组(NVIC),并使能中断。

	NVIC_InitStructure.NVIC_IRQChannel =EXTI3_IRQn; //外部中断线3的中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;//抢占优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //响应优先级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
	NVIC_Init(&NVIC_InitStructure);

6.编写中断服务函数

void EXTI3_IRQHandler(void)//中断线3的中断函数
{
	if(EXTI_GetITStatus(EXTI_Line3)!=RESET)
	{
	Delay_ms(100);
	if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_3)==0)
	{
        printf("key1\r\n");
	}
	EXTI_ClearITPendingBit(EXTI_Line3);//清除EXTI线路挂起位
	}
}

该函数功能:每按下按键1,就通过串口发送一个字符串“key1”,记得清除中断标志位

EXTI_ClearITPendingBit();

注:每个中断线的中断函数都有固定的名称

你可能感兴趣的:(stm32,stm32,单片机,arm)