STM32 EXTI中断学习笔记--初始化程序编写及简单分析

一、程序编写步骤

  1. 打开时钟RCC;
  2. 配置GPIO;
  3. 配置AFIO;
  4. 配置EXTI  ,选择触发方式、响应方式;
  5. 配置NVIC,选择优先级;

 二、程序内容如下

#include "stm32f10x.h"                  // Device header


void CountSensor_Init(void)
{
	//时钟使能,AFIO和NVIC时钟常开,不需配置
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //GPIOB使能,参考原理图
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //AFIO使能
	//配置GPIO
	GPIO_InitTypeDef GPIO_InitStructure;  //定义结构体变量 GPIO_InitStructure 
	GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU; //上拉输入
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;//原理图为PB14脚
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	//配置AFIO
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);
	//配置EXTI
	EXTI_InitTypeDef EXTI_InitStructure;
	EXTI_InitStructure.EXTI_Line=EXTI_Line14;
	EXTI_InitStructure.EXTI_LineCmd=ENABLE;
	EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //响应方式为中断
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; //触发方式为下降沿
	EXTI_Init(&EXTI_InitStructure);
	//配置NVIC
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级为1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//响应优先级为1
	NVIC_Init(&NVIC_InitStructure);
}

三、分步解析

如图所示,光标放在程序名称中,右击鼠标可以查看程序的功能和形参的可输入数值

1、时钟使能函数分析。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //GPIOB使能,参考原理图
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //AFIO使能

图中圈起来为填写的第一个形参的可取数值。GPIO和AFIO的时钟都使用此函数使能。

2、GPIO口配置函数分析

    GPIO_InitTypeDef GPIO_InitStructure;  //定义结构体变量 GPIO_InitStructure 
	GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU; //上拉输入
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;//原理图为PB14脚
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);

2.1首先声明并重定义结构体名称。

2.2定义结构体变量 GPIO_InitStructure  。

2.3对结构体对象的每一个取值进行分析。 

2.3.1、输入模式我们选择 上拉输入。

2.3.2、GPIO口的宏定义,我们选择GPIO_Pin_14.

2.3.3、GPIO速率我们选择50MHZ(根据需求).

 

3、AFIO的函数及分析

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);

如图所示为AFIO的配置函数,位置在stm32f10x_gpio.h里。

参数取值如下。

4、EXTI的配置函数及分析

	EXTI_InitTypeDef EXTI_InitStructure;
	EXTI_InitStructure.EXTI_Line=EXTI_Line14;
	EXTI_InitStructure.EXTI_LineCmd=ENABLE;
	EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //响应方式为中断
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; //触发方式为下降沿
	EXTI_Init(&EXTI_InitStructure);

4.1EXTI的相关函数在stm32f10x_exti.h里

4.2、EXTI初始化函数的参数分析

4.2.1中断源的宏定义,我们选择EXTI_Line14

4.2.2、中断响应模式的选择,我们选择触发中断。

4.2.3、中断触发模式的选择,我们选择下降沿触发。

5、NVIC相关函数及分析。

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级为1
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//响应优先级为1
	NVIC_Init(&NVIC_InitStructure);

 5.1、NVIC相关函数在misc.h里

5.2NVIC组优先级配置函数的参数如下图所示,我们选择NVIC_PriorityGroup_2.

5.3NVIC初始化函数的参数分析。

5.3.1NVIC的中断通道我们选择EXTI15_10_IRQn。

5.3.2因为上面选择为NVIC_PriorityGroup_2,所以NVIC的抢占优先级和响应优先级只能选择0--3

涉及C语言的宏定义,结构体,枚举等知识点,可以自己学习

注:以上资料整理自江科大自化协视频。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值