STM32mp157aaa按键中断实验

效果图:

源码:

#include "key.h"
void hal_key1_rcc_gpio_init()
{// 使能GPIOF组RCC->MP_AHB4ENSETR |= (0x1 << 5);// 设置引脚位输入模式GPIOF->MODER &= (~(0X3 << 18));GPIOF->MODER &= (~(0X3 << 16));GPIOF->MODER &= (~(0X3 << 14));
}void hal_key1_exti_init()
{// 使能EXTIEXTI->EXTICR3 &= (~(0XFF << 8));EXTI->EXTICR3 |= (0X5 << 8);// 使能EXTIEXTI->EXTICR2 &= (~(0XFF << 24));EXTI->EXTICR2 |= (0X5 << 24);// 使能EXTIEXTI->EXTICR3 &= (~(0XFF));EXTI->EXTICR3 |= (0X5);// 设置为下降沿触发EXTI->FTSR1 |= (0X7 << 7);// 设置不屏蔽EXTI->C1IMR1 |= (0X7 << 7);// 清除中断挂起标志位EXTI->FPR1 |= (0X1 << 9);
}void hal_key1_gic_init()
{/*--------GCID---------*/// gicd组使能GICD->CTRL |= (0X1);// 对应中断组使能GICD->ISENABLER[3] |= (0X1 << 3);GICD->ISENABLER[3] |= (0X1 << 2);GICD->ISENABLER[3] |= (0X1 << 1);// 中断优先级GICD->IPRIORITYR[24] &= (~(0X1F << 27));GICD->IPRIORITYR[24] |= (0X0A << 27);// 中断优先级GICD->IPRIORITYR[24] &= (~(0X1F << 11));GICD->IPRIORITYR[24] |= (0X0A << 11);// 中断优先级GICD->IPRIORITYR[24] &= (~(0X1F << 19));GICD->IPRIORITYR[24] |= (0X0A << 19);// 中断分配给哪个cpuGICD->ITARGETSR[24] &= (~(0X3 << 24));GICD->ITARGETSR[24] |= (0X1 << 24);// 中断分配给哪个cpuGICD->ITARGETSR[24] &= (~(0X3 << 8));GICD->ITARGETSR[24] |= (0X1 << 8);// 中断分配给哪个cpuGICD->ITARGETSR[24] &= (~(0X3 << 16));GICD->ITARGETSR[24] |= (0X1 << 16);// 清除挂起位标志// GICD->ICPENDR[2] |= (0X1 << 3);// GICD->ICPENDR[1] |= (0X1 << 1);// GICD->ICPENDR[2] |= (0X1 << 2);/*--------GICC---------*/GICC->CTRL |= (0X1);GICC->PMR &= (~(0X1F << 3));GICC->PMR |= (0X0F << 3);
}

#include "key.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) // 中断处理函数
{// printf("have someone asshole interrupt!\n");unsigned int irq_number = GICC->IAR & 0x3FF;// 根据中断号调用对应的中断处理函数switch (irq_number){case 99:printf("key1 down!!!key1 ID = %d\n", irq_number);EXTI->FPR1 |= (0X1 << 9);GICD->ICPENDR[3] |= (0X1 << 3);GICC->EOIR = irq_number;break;case 98:printf("key3 down!!!key3 ID = %d\n", irq_number);EXTI->FPR1 |= (0X1 << 8);GICD->ICPENDR[3] |= (0X1 << 2);GICC->EOIR = irq_number;break;case 97:printf("key2 down!!!key2 ID = %d\n", irq_number);EXTI->FPR1 |= (0X1 << 7);GICD->ICPENDR[3] |= (0X1 << 1);GICC->EOIR = irq_number;break;default:// 处理其他中断或错误情况break;}// 清除中断号// EXTI->FPR1 |= (0X1 << 9);//GICD->ICPENDR[3] |= (0X1 << 3);//GICC->EOIR = irq_number;
}

#include "key.h"int main()
{hal_key1_exti_init();hal_key1_gic_init();hal_key1_rcc_gpio_init();while (1){}return 0;
}
#ifndef __KEY_H__
#define __KEY_H__
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"void hal_key1_rcc_gpio_init();void hal_key1_exti_init();void hal_key1_gic_init();#endif

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

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

相关文章

[C++11] 退出清理函数(quick_exit at_quick_exit)

说明&#xff1a;在C11中&#xff0c;quick_exit和at_quick_exit是新增的快速退出功能&#xff0c;用于在程序终止时提供一种快速清理资源的方式。 quick_exit std::quick_exit函数允许程序快速退出&#xff0c;并且可以传递一个退出状态码给操作系统。与std::exit相比&#…

[今日一水]论坛该如何选择

想要搭建一个论坛其实选择是很多的&#xff0c;就比如国内的dz&#xff0c;国外的xenforo和flarum&#xff0c;具体还是根据的面向的用户和需求来&#xff0c;就比如flarum它的界面肯定是三个论坛里最现代化的&#xff0c;但是xenforo社区生态很强&#xff0c;而dz对于国内用户…

VMware创建新虚拟机教程(保姆级别)

&#x1f4e2; 续上一篇 最新超详细VMware虚拟机安装完整教程-CSDN博客 &#xff0c;本章将详细讲解VMware创建虚拟机。 一、创建新的虚拟机 点击【创建新的虚拟机】&#xff01; 点击【自定义&#xff08;高级&#xff09;】> 下一步&#xff01; > 默认下一步&#x…

耐克:老大的烦恼

股价暴跌20%&#xff0c;老大最近比较烦。 今天说说全球&#xff08;最&#xff09;大运动品牌——耐克。 最近耐克发布2023-2024财年业绩&#xff08;截止于2024.5.31&#xff09;&#xff0c;还是爆赚几百亿美元&#xff0c;还是行业第一&#xff0c;但业绩不及预期&#xf…

Redis为什么设计多个数据库

​关于Redis的知识前面已经介绍过很多了,但有个点没有讲,那就是一个Redis的实例并不是只有一个数据库,一般情况下,默认是Databases 0。 一 内部结构 设计如下: Redis 的源码中定义了 redisDb 结构体来表示单个数据库。这个结构有若干重要字段,比如: dict:该字段存储了…

backbone是什么?

在深度学习中&#xff0c;特别是计算机视觉领域&#xff0c;"backbone"&#xff08;骨干网络&#xff09;是指用于提取特征的基础网络。它通常是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;其任务是从输入图像中提取高层次特征&#xff0c;这些特征然后被用…

【第12章】MyBatis-Plus条件构造器(下)

文章目录 前言一、使用 TypeHandler二、使用提示三、Wrappers四、线程安全性五、使用 Wrapper 自定义 SQL1.注意事项2.示例3. 使用方法 总结 前言 本章继续上章条件构造器相关内容。 一、使用 TypeHandler 在 wrapper 中使用 typeHandler 需要特殊处理利用 formatSqlMaybeWit…

scikit-learn教程

scikit-learn&#xff08;通常简称为sklearn&#xff09;是Python中最受欢迎的机器学习库之一&#xff0c;它提供了各种监督和非监督学习算法的实现。下面是一个基本的教程&#xff0c;涵盖如何使用sklearn进行数据预处理、模型训练和评估。 1. 安装和导入包 首先确保安装了…

【漏洞复现】D-Link NAS 未授权RCE漏洞(CVE-2024-3273)

0x01 产品简介 D-Link 网络存储 (NAS)是中国友讯&#xff08;D-link&#xff09;公司的一款统一服务路由器。 0x02 漏洞概述 D-Link NAS nas_sharing.cgi接口存在命令执行漏洞&#xff0c;该漏洞存在于“/cgi-bin/nas_sharing.cgi”脚本中&#xff0c;影响其 HTTP GET 请求处…

类和对象-友元-全局函数做友元

全局函数做友元 #include<iostream> using namespace std;class Building {//goodGay全局函数是Building好朋友&#xff0c;可以访问Building的私有成员 friend void goodGay(Building *building); public:Building(){m_SittingRoom "客厅";m_BedRoom &qu…

MyBatis学习笔记-数据脱敏

如果项目需要对一些特殊、敏感的数据进行脱敏处理。根据实际的需求可以考虑在读写的过程中分别做脱敏操作。 一、写过程参数脱敏 主要是使用mybatis框架提供的Interceptor实现。需要考虑不同类型的参数解析处理方式不同。 @Slf4j @AllArgsConstructor @Intercepts({@Signatu…

【vuejs】vue-router 之 addRoute 动态路由的应用总结

1. Vue Router 概述 Vue Router 是 Vue.js 官方的路由管理器&#xff0c;用于构建单页面应用。它与 Vue.js 深度集成&#xff0c;让开发者能够轻松地构建具有复杂用户界面的单页面应用。Vue Router 允许你定义不同的路由&#xff0c;并通过 router-view 组件在应用中显示匹配的…

【CSS】如何实现分栏布局

在CSS分栏布局中&#xff0c;设置宽度和样式是一个基本且重要的步骤。这可以通过直接应用样式到列元素&#xff08;通常是div元素&#xff09;上来实现。以下是一些常用的方法来设置分栏布局的宽度和样式&#xff1a; 1. 使用百分比宽度 使用百分比宽度可以使列的大小相对于其…

MyBatis学习笔记-参数转义处理

查询参数中如果有传入%的情况,数据会被全量返回。类似的可能还会有一些特殊符号的情况存在。这个时候可能需要在查询数据的时候进行参数转义处理。一般情况可能会考虑选择下面的两种方式处理。 一、基于Filter处理 主要通过实现Filter接口,自定义HttpServletRequestWrapper…

Stable Diffusion秋叶AnimateDiff与TemporalKit插件冲突解决

文章目录 Stable Diffusion秋叶AnimateDiff与TemporalKit插件冲突解决描述错误描述&#xff1a;找不到模块imageio.v3解决&#xff1a;参考地址 其他文章推荐&#xff1a;专栏 &#xff1a; 人工智能基础知识点专栏&#xff1a;大语言模型LLM Stable Diffusion秋叶AnimateDiff与…

Java 汉诺塔问题 详细分析

汉诺塔 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小…

vulnhub靶场ai-web 2.0

1 信息收集 1.1 主机发现 arp-scan -l 主机地址为192.168.1.4 1.2 服务端口扫描 nmap -sS -sV -A -T5 -p- 192.168.1.4 开放22&#xff0c;80端口 2 访问服务 2.1 80端口访问 http://192.168.1.4:80/ 先尝试admin等其他常见用户名登录无果 然后点击signup发现这是一个注…

prescan软件中导入路径文件txt/lpx

由于博主收到的是lpx格式的路径文件&#xff0c;因此&#xff0c;第一步 1.记事本打开 ctrla 全选 ctrlc 复制 2.新建一个excel 鼠标定位到第一行第一列的格子 ctrlv 复制 3.数据栏“分列”功能 4. (0.1递增的数列&#xff0c;纬度&#xff0c;经度&#xff0c;高程) 导入…

python——面向对象小练习士兵突击与信息管理系统

士兵突击 需求 1. 士兵 许三多 有一把 AK47 2. 士兵 可以 开火 3. 枪 能够 发射 子弹 4. 枪 装填 装填子弹 —— 增加子弹数量 # 士兵突击 # 需求 # 1. 士兵 许三多 有一把 AK47 # 2. 士兵 可以 开火 # 3. 枪 能够 发射 子弹 # 4. 枪 装填 装填子弹 —— 增加子弹数量 cl…

JDBC操作流程

目录 简介 具体操作 1. 引入驱动包 1&#xff09;下载驱动包 2&#xff09;引入驱动包到项目中 2. 编写代码 1&#xff09;创建数据源 2&#xff09;建立连接 3&#xff09;构造 SQL 语句 4&#xff09;执行 SQL 语句 5&#xff09;释放资源 总结 简介 JDBC 就是使…