首页 > 其他分享 >EXTI外部中断配置

EXTI外部中断配置

时间:2023-09-07 20:32:54浏览次数:43  
标签:中断 void NVIC 外部 InitStruct GPIO EXTI

1.初始化用来产生中断的 GPIO

       本次实验采用按键产生中断,通过按键按下使得对应的GPIO产生外部中断,初始化代码如下:

//按键引脚初始化
void KEY_Config(void)
{
	GPIO_InitTypeDef  GPIO_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//开漏输入
	
	GPIO_Init(GPIOA,&GPIO_InitStruct);
}

2.初始化 EXTI

首先是打开时钟,exti也是挂载到APB2总线的外设,注意此时的IO是复用IO,使能时应该选AFIO。

然后选择EXTI的输入线,按键是IO口是PA0,相关函数在固件库gpio.h文件中。

再利用结构体初始化exti,结构体在固件库exti.h中,中断线选择0,模式选择中断,触发选上升沿。相关代码配置如下:

void exti_config(void)
{	
	//初始化exti
	EXTI_InitTypeDef EXTI_InitStruct;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);

	EXTI_InitStruct.EXTI_Line = EXTI_Line0;
	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
	EXTI_InitStruct.EXTI_LineCmd = ENABLE;

	EXTI_Init(&EXTI_InitStruct);
}

3.配置 NVIC

配置中断优先级,相关函数存放在misc.h文件中,相关代码如下:

static void NVIC_Config(void) //只能被此函数所在的文件里被调用
{
	NVIC_InitTypeDef NVIC_InitStruct;
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//优先级分组
	
	NVIC_InitStruct.NVIC_IRQChannel =  EXTI0_IRQn ;//选择中断源
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级选择为1
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;//子优先级为1
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

	NVIC_Init(&NVIC_InitStruct);
}

注意:

1.优先级分组,组0代表抢占优先级位数为0,子优先级为4,依次类推

2.对于GPIO中断源的选择,0-4都是独立的,5-9是EXTI9-5_IRQn,10-15是

EXTI15_10_IRQn 。


4.编写中断服务函数

       为了方便管理,中断服务函数写在stm32f10x_it.c文件中,注意此时函数名要去启动文件里的中断向量表里面找,如下

EXTI外部中断配置_LED

此时可以看到0-4有单独的函数名,5-9、10-15均共用一个函数名,中断服务函数代码如下:

void EXTI0_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line0) != RESET)//检测按键是否按下
  {
		LED_B_TOGGLE;//灯状态翻转一次
	}
	EXTI_ClearITPendingBit(EXTI_Line0);//清除中断标志位
}

最后主函数代码如下:

int main(void)
{
	GPIO_LED_Config();
	KEY_Config();
	exti_config();
}

按键按下,产生外部中断,灯状态改变一次。







标签:中断,void,NVIC,外部,InitStruct,GPIO,EXTI
From: https://blog.51cto.com/u_15932905/7401197

相关文章

  • 中断
       ......
  • 流程全局引入外部JS、CSS
    全局引入,所有流程   E9如果在代码块里面这样:<script type="text/javascript" src="/js/layui-v2.8.13/layui/layui.js"></script>是引入不了的。  如果想单独在某个流程引入,如下: ......
  • 用友8V12.0导入凭证时提示外部表不是预期的格式
    用友8V12导入凭证时提示外部表不是预期的格式1.之前可以导入.xlsx,现在只能导入.xls格式2..xls格式下拉公式非同表提取数据,关闭表再打开就不能提取,必需重新再设置。知道解决办法的请留言指导,谢谢!......
  • EasyPlayer开放外部录像接口:自由扩展H.265网页播放功能
    EasyPlayer通过实现视频实时录像功能,不仅提供轻量化、便捷化的视频资源下载能力,同时有效减少了带宽和计算资源的消耗。这种创新的功能使得用户可以灵活地获取所需的视频数据,为其节省使用成本并提升整体效率。今天我们来分享一下EasyPlayer播放器对外开放录像的方法。1)在播放器内部......
  • 软件测试|解决‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
    前言很多Python初学者在使用Python时,会遇到环境的问题,比如无法使用pip命令安装第三方库的问题,如下图:当出现错误信息"'pip'不是内部或外部命令,也不是可运行的程序或批处理文件"时,这通常意味着在命令行中输入pip命令时,系统无法找到pip可执行文件的位置。本文将介绍解决这个问题的......
  • 中断处理的现场保存——PSW
    来源:《操作系统精髓与设计原理(第九版)》附录cPSW一般包含conditioncods+其他状态信息(如中断使能、内核/用户状态)。conditioncods,计算结果:正、负、0、溢出,条件分支测试的一部分。 ......
  • 16、Flink 的table api与sql之连接外部系统_ 读写外部系统的连接器和格式以及Apache H
    (文章目录)本文介绍了ApacheHive连接器的使用,以具体的示例演示了通过java和flinksqlcli创建catalog。本文依赖环境是hadoop、zookeeper、hive、flink环境好用,本文内容以flink1.17版本进行介绍的,具体示例是在1.13版本中运行的(因为hadoop集群环境是基于jdk8的,flink1.17版本需......
  • code-runner 在外部终端中执行代码并暂停它
    修改配置文件settings.json"code-runner.executorMap":{"c":"cd$dir&&gcc$fileName-o$fileNameWithoutExt-finput-charset=UTF-8-fexec-charset=GBK&&startcmd\"/k;$fileNameWithoutExt\"",......
  • kettle引入外部js
    //自带的函数参数即为js的路径LoadScriptFile("F:/bigdata-etl/user_center_auto/USER/aes.js");varAESPHONE=PHONE;vardecTel=aesDecrypt(AESPHONE,"ksu7gk4H7Gs9362F")functionaesDecrypt(str,key){varresult_value;try{......
  • 【STM32】3_0 中断
    中断和事件在STM32微控制器中,中断和事件是用于处理外部事件和内部状态改变的重要机制。它们允许微控制器在特定条件下停止当前执行的任务,转而处理更为紧急或重要的任务。以下是关于STM32中断和事件的一些基本信息:中断(Interrupts):中断是在微控制器执行某个任务时,突然发生的外部......