按下按键之后,打印一句话------>三个按键需要实现
main.c:
#include "key.h"
extern void printf(const char *fmt, ...);
void delay_ms(int ms){
int i,j;
for(i = 0; i < ms;i++)
for (j = 0; j < 1800; j++);}
int main(){
//key1键盘
//EXIT控制器初始化
void PF9_exti_init();
//GICD控制器初始化
void PF9_gicd_init();
//gicc控制器初始化
void PF9_gicc_init();
//key2键盘
//EXIT控制器初始化
void PF7_exti_init();
//GICD控制器初始化
void PF7_gicd_init();
//gicc控制器初始化
void PF7_gicc_init();
//key3键盘
//EXIT控制器初始化
void PF8_exti_init();
//GICD控制器初始化
void PF8_gicd_init();
//gicc控制器初始化
void PH8_gicc_init();
while(1) {
}
return 0;
}
key.h:
#ifndef __KEY_h__
#define __KEY_h__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gic.h"
//key1键盘
//EXIT控制器初始化
void PF9_exti_init();
//GICD控制器初始化
void PF9_gicd_init();
//gicc控制器初始化
void PF9_gicc_init();
//key2键盘
//EXIT控制器初始化
void PF7_exti_init();
//GICD控制器初始化
void PF7_gicd_init();
//gicc控制器初始化
void PF7_gicc_init();
//key3键盘
//EXIT控制器初始化
void PF8_exti_init();
//GICD控制器初始化
void PF8_gicd_init();
//gicc控制器初始化
void PH8_gicc_init();
#endif
key.c:
#include "key.h"
//EXIT控制器初始化
void PF9_exit_init()
{
//------RCC章节-----------
RCC->MP_AHB4ENSETR |=0x01 << 5;
//-------输入模式--------------
//key1
GPIOF->MODER |=(~(0x03 << 18));
//初始化EXIT
EXTI->EXTICR3 &=(~(0xff << 8));
EXTI->EXTICR3 |=(0x05 << 8);
//编写事件
EXTI->FTSR1 |= 0x01 << 9;
EXTI->C1IMR1 |= 0x01 << 9;
}
void PF7_exit_init()
{
//------RCC章节-----------
RCC->MP_AHB4ENSETR |=0x01 << 5;
//-------输入模式--------------
//key1
GPIOF->MODER |=(~(0x03 << 14));
//初始化EXIT
EXTI->EXTICR3 &=(~(0xff << 24));
EXTI->EXTICR3 |=(0x05 << 24);
//编写事件
EXTI->FTSR1 |= 0x01 << 7;
EXTI->C1IMR1 |= 0x01 << 7;
}
void PF8_exit_init()
{
//------RCC章节-----------
RCC->MP_AHB4ENSETR |=0x01 << 5;
//-------输入模式--------------
//key1
GPIOF->MODER |=(~(0x03 << 16));
//初始化EXIT
EXTI->EXTICR3 |=(0x05 << 0);
//编写事件
EXTI->FTSR1 |= 0x01 << 8;
EXTI->C1IMR1 |= 0x01 << 8;
}
//GICD控制器初始化
void PF9_gicd_init()
{
GICD->CTRL |=0x01 << 0;
GICD->ISENABLER[3] |=0x01 << 3;
GICD->IPRIORITYR[24] &= (~(0x1f << 27));
GICD->ITARGETSR[24] &= (~(0x3 << 24));
GICD->ITARGETSR[24] |= 0x1 << 24;
}
//GICD控制器初始化
void PF7_gicd_init()
{
GICD->CTRL |=0x01 << 0;
GICD->ISENABLER[3] |=0x01 << 3;
GICD->IPRIORITYR[24] |= (0x1f << 11);
GICD->ITARGETSR[24] |= 0x1 << 8;
}
//GICD控制器初始化
void PF8_gicd_init()
{
GICD->CTRL |=0x01 << 0;
GICD->ISENABLER[3] |=0x01 << 2;
GICD->IPRIORITYR[24] |= (0x1f << 19);
GICD->ITARGETSR[24] |= 0x1 << 16;
}
//GICC控制器初始化
void PF9_gicc_init()
{
GICC->CTRL |=0x01 << 0;
GICC->PMR &=(~(0x1f << 3));
GICC->PMR |=(0x1f << 3);
}
//GICC控制器初始化
void PF7_gicc_init()
{
GICC->CTRL |=0x01 << 0;
GICC->PMR |=(0x02 << 2);
}
//GICC控制器初始化
void PF8_gicc_init()
{
GICC->CTRL |=0x01 << 0;
GICC->PMR |=(0x02 << 2);
}
do_irq:
#include "key.h"
extern void printf(const char *fmt, ...);
extern void delay_ms(int ms);
unsigned int i = 0;
void do_irq(void)
{
unsigned int num =0;
//获取中断信号
num=GICC->IAR;
//判断终端的好坏
switch(num)
{
//99:key1键盘按下
case 99:
delay_ms(500);
printf("key1---------");
EXTI->FPR1 |= (0X1<<9);
GICD->ICPENDR[3] |=(0x01 << 3);
break;
//97:key2键盘按下
case 97:
delay_ms(500);
printf("key2---------");
EXTI->FPR1 |= (0X1<<7);
GICD->ICPENDR[3] |=(0x01 << 1);
break;
//98:key3键盘按下
case 98:
delay_ms(500);
printf("key3---------");
EXTI->FPR1 |= (0X1<<8);
GICD->ICPENDR[3] |=(0x01 << 2);
break;
default:
delay_ms(500);
printf("输入错误,请重新输入!---------");
}
//清楚中断状态位
GICC->EOIR &= (~(0x3ff << 0));
GICC->EOIR |=num;
}
相关文章:
按下按键之后,打印一句话------>三个按键需要实现
main.c: #include "key.h" extern void printf(const char *fmt, ...); void delay_ms(int ms){ int i,j; for(i 0; i < ms;i) for (j 0; j < 1800; j);} int main(){ //key1键盘 //EXIT控制器初始化 void PF9_exti_init(); //GICD控…...
Mac配置VScode
Mac配置VScode 常用技巧 命令调色板 根据您当前的上下文访问所有可用的命令。 键盘快捷键:⇧⌘P 快速打开 快速打开文件。 键盘快捷键:⌘P **提示:**类型?查看命令建议。 在最近打开的文件夹和工作区之间导航 最近打开 键盘快捷…...
MAC地址IP地址 端口
网络结构: 服务器-客户机(C/S)Client-Server结构,如QQ,LOL都拥有客户端 优点:响应速度快,形式多样,安全新较高缺点:安装软件和维护,不能跨平台LINUX/windows/MAC浏览器-…...
关于虚拟数字人你想知道的都在这里
2022年底,微软旗下的人工智能实验室Open AI发布的对话式大型语言模型ChatGPT聊天机器人一夜蹿红,5天用户量超百万,在各大中外媒体平台掀起了一阵热潮。也带火了人工智能相关产业,AI虚拟数字人就是其中之一,一个随着元宇…...
分布式任务调度处理方案(无代码)
业务涉及到,需要向数据库、redis、elasticsearch、MinIO写四份数据,这里存在分布式事务问题。如何解决问题,先分析cap,是要保证可用性,还是保证一致性。如何选择是CP还是AP?分析业务场景CP的场景࿱…...
2023年博管办香江学者计划、澳门青年学者开始申报
2023年2月20日,全国博士后管委会办公室官方网站发出了2023年香江学者计划、澳门青年学者计划和博士后国(境)外学术交流项目申报指南,以下知识人网小编仅转载香江学者计划和澳门青年学者计划申报指南并做重点解读。知识人网整理香江…...
(二十一)、实现评论功能(1)【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】
1,评论回复模块的样式布局 1.1 在detail页面添加uview中的 Empty 内容为空组件 <!-- 评论区 --><view class"comment"><u-empty mode"comment" icon"http://cdn.uviewui.com/uview/empty/comment.png"></u-emp…...
【Docker】初识Dcoker以及镜像操作(一)
目录 1.初识Docker 1.1.什么是Docker 1.1.1.应用部署的环境问题 1.1.2.Docker解决依赖兼容问题 1.1.3.Docker解决操作系统环境差异 1.1.4.小结 1.2.Docker和虚拟机的区别 1.3.Docker架构 1.3.1.镜像和容器 1.3.2.DockerHub 1.3.3.Docker架构 1.3.4.小结 1.4.安装D…...
(1)C#传智:在vs2022中基本了解(第一天)
开始vs2022中C#入门,就是一笔记,算不上原创,没办法得选啊。 一、vs中卸载项目和移除项目有什么区别? 1、卸载、移除都不会移除物理文件,只会删除关联 2、卸载删除关联的程度低,卸载后项目只是“变灰色…...
【数据结构与算法】算法的时间复杂度和空间复杂度
文章目录前言1.算法效率1.1.如何衡量一个算法的好坏1.2.算法的复杂度2.时间复杂度2.1.时间复杂度的概念2.2.大O的渐进表示法2.3.常见时间复杂度计算举例2.4.常见时间复杂度3.空间复杂度4.复杂度oj练习Practice.1 消失的数字Practice.2 旋转数组写在最后前言 关于时空复杂度的分…...
不使用contab -e的方式,添加计划任务
不使用contab -e的方式,添加计划任务 crond 服务的周期任务的文件存放位置在:/var/spool/cron/ 如果你是root用户的话那么你的周期任务文件名就叫root 如果你使用其他用户创建的周期任务,任务文件名就叫它本身 1、 使用root用户创建周期任…...
sentry2摄像头之blink篇
一、硬件 arduino sentry2摄像头 二、实验内容 第一步 安装好esp8266库函数 具体详见ES826安装指导,CSDN有很多资源,或者浏览 https://tosee.readthedocs.io/zh/latest/ 网址 第二步 配置 详情见视频,有简单讲解 视频1:电脑端配置 https://live.csdn.net/v/277427 视频2:s…...
springboot集成PDF导出
内容目录 知识准备 什么是itext itext的历史版本和License问题 标准的itextpdf导出的步骤 实现案例 Pom依赖 导出PDF 添加页眉页脚和水印 进一步理解 遇到license问题怎么办 为何添加页眉页脚和水印是通过PdfPageEvent来完成 除了处理word, excel等文件外,最为常见的…...
Podman 创建持久 MySQL 数据库容器
使用正确的 SELinux 上下文和权限创建目录/home/student/local/mysql。 创建/home/student/local/mysql目录。 [studentworkstation ~]$ mkdir -vp /home/student/local/mysql mkdir: 创建的目录/home/student/local mkdir: 创建的目录/home/student/local/mysql/home/studen…...
Java-反射
反射概述 Java反射机制: 是指在运行时去获取一个类的变量和方法信息。然后通过获取的信息来创建对象,调用方法的一种机制。由于这种<动态性>,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍…...
构造agent类型的内存马(内存马系列篇十三)
写在前面 前面我们对JAVA中的Agent技术进行了简单的学习,学习前面的Agent技术是为了给这篇Agent内存马的实现做出铺垫,接下来我们就来看看Agent内存马的实现。 这是内存马系列篇的第十三篇了。 环境搭建 我这里就使用Springboot来搭建一个简单的漏洞…...
JavaEE简单示例——<select>中的查询参数传递和结果集封装自动映射关系
简单介绍: 在之前我们在讲SQL映射文件中的映射查询语句的<select>标签的时候,对其中的四个常用属性的讲解并不是那么的透彻,今天就来详细的解释<select>的四个常用属性的具体含义以及<select>标签在进行查询的时候查询参数…...
信息安全圈都在谈论CISP,CISSP,这两者有什么区别呢?
CISP 和 CISSP 都是信息安全认证资格考试,但是它们之间有一些区别。 CISP(Certified Information Security Professional)认证考试是由国际信息系统安全认证联盟(ISC)所开发和管理的,主要考核信息安全专业人员在保障企…...
浅谈Redisson实现分布式锁的原理
1.Redisson简介 Redis 是最流行的 NoSQL 数据库解决方案之一,而 Java 是世界上最流行(注意,我没有说“最好”)的编程语言之一。虽然两者看起来很自然地在一起“工作”,但是要知道,Redis 其实并没有对 Java…...
UVM实战(张强)-- UVM中的寄存器模型
目录一.整体的设计结构图二.各个组件代码详解2.1 DUT2.2 bus_driver2.3 bus_sequencer2.4 bus_monitor2.5 bus_agent2.6 bus_transaction2.7 bus_if2.8 my_if2.9 my_transaction2.10 my_sequencer2.11 my_driver2.12 my_monitor2.13 my_agent2.14 my_scoreboard2.15 my_env2.16…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
