MSP432笔记5——外部中断

news2024/11/24 16:01:26

所用单片机型号:MSP432P401r

今日继续我的MSP432电赛速通之路。

外部中断是个很有用的配置

STM32几乎每个I/O口都能配置复用为外部中断

但MSP432并不是这样。

我经过查阅数据手册发现支持中断的引脚为:

P1^0~ P1^7        P3^0~ P3^7     P5^0~ P5^7

P2^0~ P2^7        P4^0~ P4^7     P6^0~ P6^7

其余引脚都不包含中断功能(来源:msp432p401r.pdf  第17~20页


目录

外部中断相关库函数:

外部中断一般配置步骤:

完整工程下载:


外部中断相关库函数:

外部中断相关库函数1~5在gpio.h库中,6~5在interrupt.h库中

1.开启外部中断:

GPIO_enableInterrupt(GPIO_PORT_PX,GPIO_PINx);

2.配置触发方式:

GPIO_interruptEdgeSelect(GPIO_PORT_PX,GPIO_PINx,Edge);

 Edge表示触发方式

3.Edge有效值:

GPIO_HIGH_TO_LOW_TRANSITION  //下降沿触发
GPIO_LOW_TO_HIGH_TRANSITION  //上升沿触发

4.获取GPIO中断状态:

GPIO_getEnabledinterruptStatus(GPIO_PORT_Px);

5.清除GPIO中断标志位:

GPIO_clearInterruptFlag(GPIO_PORT_Px,GPIO_PINx);

配合使用:

//获取中断状态存在变量
status=GPIO_getEnabledInterruptStatus(GPIO_PORT_Px);
//然后在清除对应的中断标志位
GPIO_clearinterruptFlag(GPIO_PORT,status);

6.开启总中断:

Interrupt_enableMaster(void);

7.开启对应端口中断:

Interrupt_enableInterrupt(interruptNumber);
//interruptNumber可以填下面几个外部中断的参数之一

INT_PORT1
INT_PORT2
INT_PORT3
INT_PORT4
INT_PORT5
INT_PORT6

外部中断一般配置步骤:

1.配置GPIO输入
2.清除中断标志位
3.配置触发方式
4.开启外部中断
5.开启端口中断
6.开启总中断
7.编写GPIO ISR(中断服务函数)

让我们根据以上步骤进行如下俩个函数的编写:

首先是外部中断初始化函数:

/*
	中断初始化函数	
	一般在主函数while()循环之外调用一下	
*/

void interrupt_inint(void)
{
//1.配置GPIO输入 
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1 + GPIO_PIN4);	
//2.清除中断标志位
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN4);
	
//3.配置触发方式  //下降沿触发
GPIO_interruptEdgeSelect(GPIO_PORT_P1,GPIO_PIN1,GPIO_HIGH_TO_LOW_TRANSITION);
GPIO_interruptEdgeSelect(GPIO_PORT_P1,GPIO_PIN4,GPIO_HIGH_TO_LOW_TRANSITION);	
//4.开启外部中断
GPIO_enableInterrupt(GPIO_PORT_P1,GPIO_PIN1);
GPIO_enableInterrupt(GPIO_PORT_P1,GPIO_PIN4);	
//5.开启端口中断
Interrupt_enableInterrupt(INT_PORT1);	
//6.开启总中断
Interrupt_enableMaster();

}

然后就是对中断服务函数的编写:

首先我们找到启动文件看一下,这里有定义许多中断服务函数:

复制一下进行编写:

//7.编写GPIO ISR(中断服务函数)

void  PORT1_IRQHandler(void)
{
	uint16_t status;
	status=GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
	GPIO_clearInterruptFlag(GPIO_PORT_P1,status);
	GPIO_clearInterruptFlag(GPIO_PORT_P1,status);
	
	if(status & GPIO_PIN1)//对应KEY1中断
	{
		 delay_ms(15);    //消抖
			if(KEY1==0)	
			{
				LED_RED_On();
			}
		}

	if(status & GPIO_PIN4)
		//对应KEY2中断
	{
		 delay_ms(15);    //消抖
			if(KEY2==0)	
			{
				LED_RED_Off();
			}
		}		
		
}	

 该服务函数作用是打开和关闭LED

  如果有失败的情况,请检查自己:

1.对应LED端口有没有初始化,(1.LED初始化函数 2.开机调用初始化)

2.对应按键端口有没有初始化为输入模式

3.中断函数的编写是否是7步都做好了

4.开启对应端口中断函数填的是不是对应按键端口的初始化,

                (比如按键接在P1^1就是INT_PORT1)

完整工程下载:

https://download.csdn.net/download/qq_64257614/87802677

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/552811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Gateway服务网关入门

Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。…

【网络字节序】

网络字节序 我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络数据流同样有大端小端之分,那么如何定义网络数据流的地址呢?发送主机通常将发送…

【C++】21年精通C++之泛型编程和模板初阶知识

❤️前言 大家好!今天和大家一起学习关于C泛型编程和模板初阶的相关知识。 正文 我们之前已经学习了C中非常重要的一个特性——函数重载,函数重载很好地提高了我们代码的可读性。但是对于适配多种参数的某种函数来说,我们如果使用函数重载就…

感知程序从ros切换到cyber_rt框架下,pcl相关问题

1.在ubuntu20.04下,原感知程序需要的是pcl1.8.1,车上其他程序使用的是pcl.1.10.0或者pcl1.10.0,在编译pcl1.10.0时会编译通不过,而pcl1.10.1可以顺利编译通过,安装pcl1.8.1时遇到的问题可能如下,及对应的修…

CTF必看~ PHP反序列化漏洞6:绝妙_wakeup绕过技巧

作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。我的…

iptables防火墙2

iptables防火墙 一:SNAT原理与应用 SNAT 应用环境:局域网主机共享单个公网IP地址接入Internet(私有不能早Internet中正常路由)SNAT原理:修改数据包的源地址。 SNAT转换前提条件: 1.局域网各主机已正确设…

新星计划 Electron+vue2 桌面应用 2 搭建及运行

基础内容:新星计划 Electronvue2 桌面应用 1 基础_lsswear的博客-CSDN博客 根据使用过的经验和官网的描述,大概可以有四种方式: 自己创建项目(仅使用npm)用Electron脚手架HBuilder编译为web,再用Electron…

MSP432笔记4:时钟与滴答计时器

所用单片机型号:MSP432P401r 今日继续更新我的MSP432电赛速通笔记: 提示: 本节内容相当于讲述delay_ms() 和delay_us() 俩延时函数的由来, 所以不需要花费过多时间斟酌 MSP432单…

论文阅读_音频表示_wav2vec_2.0

论文信息 name_en: wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations name_ch: wav2vec 2.0:语音表示自监督学习框架 paper_addr: http://arxiv.org/abs/2006.11477 date_read: 2023-04-27 date_publish: 2020-10-22 tags: [‘深…

C++深度解析:虚函数的使用与避免

C深度解析:虚函数的使用与避免 1. 虚函数的基本概念与原理 (Basic Concepts and Principles of Virtual Functions)1.1 虚函数的定义与作用 (Definition and Role of Virtual Functions)1.2 虚函数的底层实现 (Underlying Implementation of Virtual Functions)1.3 …

【CANN训练营0基础赢满分秘籍】进阶班 Atlas 200I DK 智能小车

1 智能小车三维结构设计 1.1 基本模块 坚固酷炫结构模块运动控制模块超声波传感器模块摄像头视觉模块其他传感器模块 1.2 结构设计基本原则 从零开始设计并搭建智能小车,在满足外观要求的基础上,要满足小车运转过程中的运动干涉率为O,并且…

【CANN训练营0基础赢满分秘籍】进阶班 应用开发深入讲解

1 AIPP AIPP (Artificial Intelligence Pre-Processing)人工智能预处理,在AI Corfe上完成数据预处理。 1.1 静态AIPP 构造AIPP配置文件*.cfg使能静态AIPP,将其配置参数保存在模型文件中。 atc --framework3--soc_versionS[soc_version) --model SHOM…

基于51单片机的电子琴Protues仿真设计

一、设计背景 基于51单片机的电子琴是一款由51单片机控制器、音频模块和硬件阵列组成的数字化乐器。它可以模拟各种乐器的音效,同时也具有许多常规电子琴所没有的高级功能。 首先,这种电子琴是以数字信号处理技术为基础的。通过软件编程,将…

【JUC】Java对象内存布局和对象头

【JUC】Java对象内存布局和对象头 文章目录 【JUC】Java对象内存布局和对象头1. 对象的内存布局1.1 对象头1.1.1 对象标记1.1.2 类元信息/类型指针 1.2 实例数据1.3 对齐填充 2. 测试 1. 对象的内存布局 在 HotSpot 虚拟机里,对象在堆内存中的存储布局可以划分为三…

MSP432学习笔记6:中断优先级管理

所用型号:MSP432P401R 今日继续我的MSP432电赛速通之路。 主要学习的是:中断优先级管理、软件挂起中断、屏蔽中断优先级 目录 MSP432具有8级可编程的中断优先级。 中断优先级管理库函数: 软件挂起中断: 屏蔽中断优先级&#…

微信小程序富文本插件mp-html

使用场景: 偏偏后端传过来的数据又要用到富文本标签,然后找了很多组件,要不就是下载量低,要不就是里面功能太少,只有这款mp-html组件深得我心,里面功能丰富,简单实用,真的绝绝子&…

DMA直接存储器存取

目录 存储器映像 寄存器 DMA框图 DMA基本结构 DMA请求映射 数据宽度与对齐 ​编辑 存储器到存储器 ​编辑 外设与存储器 来源b站江科大stm3入门教程 存储器映像 寄存器 DMA框图 AHB从设备(DMA自身的寄存器)连接在总线矩阵右侧的AHB总线上 所以DMA既…

LeetCode:509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

509. 斐波那契数 题目 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),…

无底线内卷?谈谈如何在职场中实现人生巅峰

在竞争激烈的职场上,各种职场难题时常出现,如何进行有效沟通、如何应对工作压力、如何提升职业能力等,这都是需要去克服的问题。 1. 尝试人际沟通A:TO 企业B:TO 员工 2. 适应工作压力A:原因B:TO…

ROS2 入门应用 创建启动文件(C++)

ROS2 入门应用 创建启动文件(C) 1. 创建功能包2. 添加依赖关系3. 添加编译信息4. 创建启动文件4.1. Python4.2. XML4.3. YAML 5. 编译和运行 1. 创建功能包 用Python、XML或YAML编写的启动文件可以启动和停止不同的节点,以及触发和处理各种事…