STM32MP157按键中断实验

news2025/6/25 0:55:31

按键配置

#include "key_it.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_rcc.h"

void key_it_config()
{
	/* RCC使能GPIOF时钟 */
	RCC->MP_AHB4ENSETR |= (1<<5);
	/* 设置PF9 PF7 PF8输入 */
	GPIOF->MODER &= (~(0x3 << 14));
	GPIOF->MODER &= (~(0x3 << 16));
	GPIOF->MODER &= (~(0x3 << 18));
	
	/* 设置PF9 PF7 PF8产生EXTI事件 EXTI_EXTICRx */
	EXTI->EXTICR2 &= ~(0xff<<24);
	EXTI->EXTICR2 |= (0x05<<24);
	
	EXTI->EXTICR3 &= ~(0xff);
	EXTI->EXTICR3 |= (0x05);

	EXTI->EXTICR3 &= ~(0xff<<8);
	EXTI->EXTICR3 |= (0x05<<8);
	
	/* 设置事件触发方式为下降沿触发EXTI_FISR1 */
	EXTI->FTSR1 |= (1<<7);
	EXTI->FTSR1 |= (1<<8);
	EXTI->FTSR1 |= (1<<9);
	
	/* 设置EXTI事件触发不屏蔽XITI_IMR1 */
	EXTI->C1IMR1 |= (1<<7);
	EXTI->C1IMR1 |= (1<<8);
	EXTI->C1IMR1 |= (1<<9);


	/* 使能中断能转发到特定的CPU接口层GICD_ISENABLERx */
	GICD->ISENABLER[3] |= (1<<3);
	GICD->ISENABLER[3] |= (1<<2);
	GICD->ISENABLER[3] |= (1<<1);
	
	/* GICD_IPPIORITYRx设置中断优先级 */
	GICD->IPRIORITYR[24] &= ~(0x1f<<27);
	GICD->IPRIORITYR[24] &= ~(0x1f<<19);
	GICD->IPRIORITYR[24] &= ~(0x1f<<11);
	
	/* 设置当前终端被转发到哪一个CPU处理GIC_ITARGETSRx */
	GICD->ITARGETSR[24] &= ~(0x03<<24);
	GICD->ITARGETSR[24] |= (0x01<<24);
	GICD->ITARGETSR[24] &= ~(0x03<<16);
	GICD->ITARGETSR[24] |= (0x01<<16);
	GICD->ITARGETSR[24] &= ~(0x03<<8);
	GICD->ITARGETSR[24] |= (0x01<<8);

	/* 使能组0转发终端GICD_CTLR */
	GICD->CTRL |= 0x1;
	
	/* 设置中断优先级掩码GICC_PMR */
	GICC->PMR |= (0x1f<<3);
	
	/* 使能CPU可以处理组0转发的终端GICC_CTLR */
	GICC->CTRL |= 0x1;
	
}

中断实现

#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
#include "beep.h"

#define EXTI9_IRQ 99
#define EXTI8_IRQ 98
#define EXTI7_IRQ 97

extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{
	/* 保存终端号 */
	int irqno;
	irqno = GICC->IAR & 0x3ff;

	if(irqno == EXTI9_IRQ)
	{
		delay(1000);
		if(irqno == EXTI9_IRQ)
		{
			/* KEY1中断处理 */
			printf("KEY1 pressed!\n\r");
			/* 蜂鸣器 */
			hal_gpio_write(GPIOB, 6, !hal_gpio_read(GPIOB, 6));
			/* 清除挂起中断标志位GICD_ICPENDRx */
			GICD->ICPENDR[3] |= (1<<3);	
			/* 清除终端触发标志EXTI_FRR1 */
			EXTI->FPR1 |= (1<<9);
		}
	}
	else if(irqno == EXTI8_IRQ)
	{
		delay(1000);
		if(irqno == EXTI8_IRQ)
		{
			/* KEY3中断处理 */
			printf("KEY3 pressed!\n\r");
			/* 风扇 */
			hal_gpio_write(GPIOE, 8, !hal_gpio_read(GPIOE, 8));
			/* 清除挂起中断标志位GICD_ICPENDRx */
			GICD->ICPENDR[3] |= (1<<2);
			/* 清除终端触发标志EXTI_FRR1 */
			EXTI->FPR1 |= (1<<8);
		}
	}
	else if(irqno == EXTI7_IRQ)
	{
		delay(1000);
		if(irqno == EXTI7_IRQ)
		{
			/* KEY2中断处理 */
			printf("KEY2 pressed!\n\r");
			/* LED灯 */
			hal_gpio_write(GPIOE, 9, !hal_gpio_read(GPIOE, 9));
			/* 清除挂起中断标志位GICD_ICPENDRx */
			GICD->ICPENDR[3] |= (1<<1);
			/* 清除终端触发标志EXTI_FRR1 */
			EXTI->FPR1 |= (1<<7);
		}
	}
	
	
	/* 清除处理完的中断号GICC_EOIR */
	GICC->EOIR = irqno;
	
}

在这里插入图片描述

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

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

相关文章

九章云极DataCanvas公司入选《AIGC产业链北京专精特新企业图谱》

近日&#xff0c;北京市经济和信息化局成功举办AIGC&#xff08;生成式人工智能&#xff09;产业链专精特新企业融通路演活动&#xff0c;并正式发布《AIGC产业链北京市专精特新企业图谱》&#xff08;下称《图谱》&#xff09;。九章云极DataCanvas公司凭借DataCanvas Alaya九…

Python- socket编程

Python中的socket模块为网络通信提供了基础API&#xff0c;使我们能够在应用程序中实现低级的网络交互。使用socket编程&#xff0c;可以创建TCP、UDP和RAW sockets来进行数据通信。 以下是Python socket 编程的简要概述&#xff1a; 1. 核心概念 Socket: 通信的端点&#x…

PTrade获取当日n个季度前的日期所处季度的最后一天——时间相关函数4

本文介绍的函数用于获取当日n个季度前的日期所处季度的最后一天&#xff08;有点绕&#xff0c;看后面例子就好理解了&#xff09;。 源码 def last_day_of_quarter_before_n_quarters(n):"""获取当日n个季度前的日期所处季度的最后一天:return: 当日n个季度前…

leetcode 打家劫舍篇

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

【嵌入式】STM32F031K4U6、STM32F031K6U6、STM32F031K6T6主流ARM Cortex-M0基本型系列MCU规格参数

一、电路原理图 【嵌入式】STM32F031K4U6、STM32F031K6U6、STM32F031K6T6主流ARM Cortex-M0基本型系列MCU —— 明佳达 二、规格参数 1、STM32F031K4U6&#xff08;16KB&#xff09;闪存 32UFQFPN 核心处理器&#xff1a;ARM Cortex-M0 内核规格&#xff1a;32 位单核 速度&a…

喜报!冲量在线中标中国电信北京公司2023年基于通用GPU的可信执行环境技术的研究项目

近日&#xff0c;冲量在线中标中国电信北京公司2023年基于通用GPU的可信执行环境的研究项目&#xff01;基于通用GPU的可信执行环境技术&#xff0c;完成业界领先的基于国产可信芯片的AI算力平台建设。 通过平台TEEGPU的隐私计算能力&#xff0c;给现有的AI智算平台在可信计算方…

必知必会的22种设计模式(GO语言)

日常工作中免不了使用设计模式&#xff0c;那么你使用了哪些设计模式呢&#xff1f; 设计模式是什么&#xff1f; 设计模式是一种在软件设计中对常见问题的通用解决方案。 它们是经过验证的、可重用的设计思想&#xff0c;可以帮助解决开发过程中遇到的各种问题。 设计模式…

碰撞检测算法——分离轴算法在Unity中实现(二)

一、介绍 分离轴算法&#xff08;简称SAT&#xff09;通常用于检查两个简单多边形&#xff08;凸边形&#xff09;之间或多边形与圆之间的碰撞。本质上&#xff0c;如果您能够绘制一条线来分隔两个多边形&#xff0c;则它们不会发生碰撞&#xff0c;如果找不到一条线来分割两个…

卷积神经网络CNN基础知识

目录 1 前言2 卷积神经网络CNN2.1 LeNet-5相关介绍2.2 CNN基本结构2.2.1 卷积层2.2.2 池化层&#xff08;下采样层&#xff09;2.2.3 全连接层2.2.3.1激励层&#xff08;非线性激活&#xff09;2.2.3.2 线性层2.2.3.3 Dropout层2.2.3.4 总结 2.3 图像的上采样和下采样2.3.1 上采…

vue2 .sync 修饰符

vue2 .sync 修饰符 **创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\13-sync修饰符 vue --version vue create v-sy…

高效团队协作软件推荐:提升工作效率的优选方案!

使用团队协作软件有什么好处&#xff1f;可以摆脱过时的电子表格&#xff0c;有了单一的真实来源&#xff0c;您可以随时检查任何任务并获得可用的最新信息。 一目了然地查看所有正在进行的工作&#xff0c;看板式面板、甘特图和燃尽图等可视化工具可让您随时轻松获得项目的高级…

基本微信小程序的购物商城系统

项目介绍 随着互联网的趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己的信息推广出去&#xff0c;最好方式就是建立自己的平台信息&#xff0c;并对其进行管理&#xff0c;随着现在智能手机的普及&#xff0c;人们对于智能手机里面的应用购物平台小程序也在不断的使…

javaweb:mybatis:mapper(sql映射+代理开发+配置文件之设置别名、多环境配置、顺序+注解开发)

1.0版本 sql映射文件实现 流程 首先程序进入启动类MyBatisDemo.java中&#xff0c;读取配置文件mybatis-config.xml 再由mybatis-config的mappers属性 <mappers><mapper resource"UserMapper.xml"></mapper></mappers>找到sql映射文件Use…

大数据精准营销一站式解决你的获客难题

自从千禧年之后&#xff0c;互联网逐渐走进每家每户&#xff0c;改变了人们的生活习惯&#xff0c;也改变了运营人的营销模式&#xff0c;使我们从传统营销转向互联网营销&#xff01; 新时代的到来&#xff0c;智能手机的问世又使互联网营销达到了一个新的高潮&#xff01;一些…

WEB 跨域

![Alt](https://img-home.csdnimg.cn/images/20220524100510.png 60x60 问题描述&#xff1a; web端的跨域&#xff1a; 响应头中出现重复&#xff0c;等其他关于跨域的奇奇怪怪的问题以下排查方式够了。 注&#xff1a; 以下最终解决问题的方式是将处理跨域的地方集中在一个…

JS之同步异步promise、async、await

promise异步操作 Promise是异步编程的一种解决方案 JavaScript异步与同步解析 学习promise前我们先来了解下什么是异步&#xff1f; 基本概念&#xff1a; 消息队列中的任务分为宏任务与微任务;调用栈也可以称为主线程 首先我们要知道js是单线程语言&#xff0c;也就是说…

基于NLopt的C语言非线性优化案例

以官方给的例程&#xff0c;重新梳理&#xff0c;以供理解NLopt的使用。 问题被定义为&#xff1a; min ⁡ x ∈ R 2 x 2 s u b j e c t t o x 2 ≥ 0 , x 2 ≥ ( a 1 x 1 b 1 ) 3 , a n d x 2 ≥ ( a 2 x 1 b 2 ) 3 f o r p a r a m e t e r s a 1 2 , b 1 0 , a 2 − 1…

Edge使用猴油脚本实战(实验室安全考试系统刷在线时长——网站永久自动刷新)

介绍 篡改猴 (Tampermonkey) 是拥有 超过 1000 万用户 的最流行的浏览器扩展之一。它允许用户自定义并增强您最喜爱的网页的功能。用户脚本是小型 JavaScript 程序&#xff0c;可用于向网页添加新功能或修改现有功能。使用 篡改猴&#xff0c;您可以轻松在任何网站上创建、管理…

标题:协同云办公:打破传统模式,提升工作效率!

随着科技的迅速发展&#xff0c;传统办公模式已经难以满足现代企业的需求。为了提高工作效率和协作能力&#xff0c;越来越多的企业开始采用协同云办公。协同云办公通过云计算、大数据等技术&#xff0c;打破了传统办公模式的束缚&#xff0c;为企业带来了前所未有的便捷与高效…

geecg-uniapp 源码下载运行 修改端口号 修改tabBar 修改展示数据(1)

APP体验&#xff1a; http://jeecg.com/appIndex技术官网&#xff1a; http://www.jeecg.com安装文档&#xff1a; 快速开始 JeecgBoot 开发文档 看云视频教程&#xff1a; 零基础入门视频官方支持&#xff1a; http://jeecg.com/doc/help 一&#xff0c;下载安装 源码下载…