STM32外部中断

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、STM32的外部中断特性?
  • 二、使用步骤
    • 0. 开启时钟,用一个外设就要开启一个外设的时钟
    • 1.配置GPIO
    • .配置中断
    • .中断管理
    • .中断函数
    • 2.如何写代码


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、STM32的外部中断特性?

STM32外部中断_第1张图片
STM32外部中断_第2张图片

STM32外部中断_第3张图片
STM32外部中断_第4张图片
STM32外部中断_第5张图片

STM32外部中断_第6张图片

二、使用步骤

0. 开启时钟,用一个外设就要开启一个外设的时钟

在这里插入图片描述
在这里插入图片描述

1.配置GPIO

PC5
首先:
1.外部中断是输入,按照按键输入来配置就可以了

GPIO_InitStruct.GPIO_Pin=  GPIO_Pin_5;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;	  //KEY   因为按键按下是0,所以松开应该是1 以此使用上拉

GPIO_Init(GPIOC, &GPIO_InitStruct);   //&x     PC5

然后
2.如何将引脚跟外部中断线连起来,要跟外部中断5,EXTI5
STM32外部中断_第7张图片

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);    //pc5-EXTI5

.配置中断

3.外部中断配置,边沿检测,中断使能,事件、
STM32外部中断_第8张图片

STM32外部中断_第9张图片

//2.中断配置
EXTI_InitStruct.EXTI_Line= EXTI_Line5;  //  EXTI_Linex
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_InitStruct.EXTI_Mode= EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;

EXTI_Init( &EXTI_InitStruct);

.中断管理

4.中断管理

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitStruct.NVIC_IRQChannel =  EXTI9_5_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd  =  ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 0; //0-3
NVIC_InitStruct.NVIC_IRQChannelSubPriority  = 0;    // 0-3

NVIC_Init(&NVIC_InitStruct);

.中断函数

5.中断函数

STM32外部中断_第10张图片

void EXTI9_5_IRQHandler()
{
        if(EXTI_GetITStatus(EXTI_Line5)==SET)   //判断是否是外部中断5
		{
		
		     EXTI_ClearITPendingBit(EXTI_Line5) ; //清楚外部中断5的标准,
		
		}

}

2.如何写代码

代码如下(示例):


#include "stm32f10x.h"
//全局

 GPIO_InitTypeDef GPIO_InitStruct;
 NVIC_InitTypeDef NVIC_InitStruct;
 EXTI_InitTypeDef EXTI_InitStruct;
 
 int x;
 

int main()
{
 
// 3.中断管理	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitStruct.NVIC_IRQChannel =  EXTI9_5_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd  =  ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 0; //0-3
	NVIC_InitStruct.NVIC_IRQChannelSubPriority  = 0;    // 0-3
	
	NVIC_Init(&NVIC_InitStruct);
	
	
	
/*
key PC5
LED PA8 	
	
*/
//局部	
	// 库函数开启GPIO时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
	
	GPIO_InitStruct.GPIO_Pin=  GPIO_Pin_8;
	GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;    //LED
		
	GPIO_Init(GPIOA, &GPIO_InitStruct);   //&x  PA8
	
	
	
	GPIO_InitStruct.GPIO_Pin=  GPIO_Pin_2|GPIO_Pin_3;
	GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;	
	
	GPIO_Init(GPIOB, &GPIO_InitStruct);   //&x 
	

	

// 1.配置GPIO
	GPIO_InitStruct.GPIO_Pin=  GPIO_Pin_5;
	GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;	  //KEY   因为按键按下是0,所以松开应该是1 以此使用上拉
	
	GPIO_Init(GPIOC, &GPIO_InitStruct);   //&x     PC5
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);    //pc5-EXTI5

	
	//2.中断配置
	EXTI_InitStruct.EXTI_Line= EXTI_Line5;  //  EXTI_Linex
	EXTI_InitStruct.EXTI_LineCmd = ENABLE;
	EXTI_InitStruct.EXTI_Mode= EXTI_Mode_Interrupt;
	EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;

	EXTI_Init( &EXTI_InitStruct);
	
	

	while(1)
	{
					
		//if(GPIOC.5==0)
		if(GPIO_ReadInputDataBit( GPIOC, GPIO_Pin_5))	   // 上拉 按键按下 0 反之1  
		{
		
		     GPIO_SetBits(GPIOA, GPIO_Pin_0);         //灭
		
		}
		else{
		
			 	GPIO_ResetBits(GPIOA, GPIO_Pin_0);         //按下亮
		}	
	
	}
}


//4.中断函数
void EXTI9_5_IRQHandler()
{
        if(EXTI_GetITStatus(EXTI_Line5)==SET)   //判断是否是外部中断5
		{
		
		     EXTI_ClearITPendingBit(EXTI_Line5) ; //清楚外部中断5的标准,
		
		}

}




---

# 三、验证实验

![在这里插入图片描述](https://img-blog.csdnimg.cn/6fa20e3e0a774d13be62c37cbd2ef536.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c96a24dc77904cd1bedebdc6e231b23b.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d1435d7b3ca846b1887d29cb52bb56f4.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9701f26c92f04847a253f74188a35244.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/40f19a212fcc40878c706fbf0b9c1f0c.png)


# 总结
以上已经完成了,一个外部中断触发,思考如何完成三个按键的中断嵌套及验证。

你可能感兴趣的:(STM32,学习教程,stm32,嵌入式硬件,单片机)