当前位置: 首页 > news >正文

按下按键之后,打印一句话------>三个按键需要实现

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 常用技巧 命令调色板 根据您当前的上下文访问所有可用的命令。 键盘快捷键&#xff1a;⇧⌘P 快速打开 快速打开文件。 键盘快捷键&#xff1a;⌘P **提示&#xff1a;**类型&#xff1f;查看命令建议。 在最近打开的文件夹和工作区之间导航 最近打开 键盘快捷…...

MAC地址IP地址 端口

网络结构&#xff1a; 服务器-客户机&#xff08;C/S&#xff09;Client-Server结构&#xff0c;如QQ,LOL都拥有客户端 优点&#xff1a;响应速度快&#xff0c;形式多样&#xff0c;安全新较高缺点&#xff1a;安装软件和维护&#xff0c;不能跨平台LINUX/windows/MAC浏览器-…...

关于虚拟数字人你想知道的都在这里

2022年底&#xff0c;微软旗下的人工智能实验室Open AI发布的对话式大型语言模型ChatGPT聊天机器人一夜蹿红&#xff0c;5天用户量超百万&#xff0c;在各大中外媒体平台掀起了一阵热潮。也带火了人工智能相关产业&#xff0c;AI虚拟数字人就是其中之一&#xff0c;一个随着元宇…...

分布式任务调度处理方案(无代码)

业务涉及到&#xff0c;需要向数据库、redis、elasticsearch、MinIO写四份数据&#xff0c;这里存在分布式事务问题。如何解决问题&#xff0c;先分析cap&#xff0c;是要保证可用性&#xff0c;还是保证一致性。如何选择是CP还是AP&#xff1f;分析业务场景CP的场景&#xff1…...

2023年博管办香江学者计划、澳门青年学者开始申报

2023年2月20日&#xff0c;全国博士后管委会办公室官方网站发出了2023年香江学者计划、澳门青年学者计划和博士后国&#xff08;境&#xff09;外学术交流项目申报指南&#xff0c;以下知识人网小编仅转载香江学者计划和澳门青年学者计划申报指南并做重点解读。知识人网整理香江…...

(二十一)、实现评论功能(1)【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

1&#xff0c;评论回复模块的样式布局 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#入门&#xff0c;就是一笔记&#xff0c;算不上原创&#xff0c;没办法得选啊。 一、vs中卸载项目和移除项目有什么区别&#xff1f; 1、卸载、移除都不会移除物理文件&#xff0c;只会删除关联 2、卸载删除关联的程度低&#xff0c;卸载后项目只是“变灰色…...

【数据结构与算法】算法的时间复杂度和空间复杂度

文章目录前言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的方式&#xff0c;添加计划任务 crond 服务的周期任务的文件存放位置在&#xff1a;/var/spool/cron/ 如果你是root用户的话那么你的周期任务文件名就叫root 如果你使用其他用户创建的周期任务&#xff0c;任务文件名就叫它本身 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等文件外&#xff0c;最为常见的…...

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反射机制&#xff1a; 是指在运行时去获取一个类的变量和方法信息。然后通过获取的信息来创建对象&#xff0c;调用方法的一种机制。由于这种<动态性>&#xff0c;可以极大的增强程序的灵活性&#xff0c;程序不用在编译期就完成确定&#xff0c;在运行期仍…...

构造agent类型的内存马(内存马系列篇十三)

写在前面 前面我们对JAVA中的Agent技术进行了简单的学习&#xff0c;学习前面的Agent技术是为了给这篇Agent内存马的实现做出铺垫&#xff0c;接下来我们就来看看Agent内存马的实现。 这是内存马系列篇的第十三篇了。 环境搭建 我这里就使用Springboot来搭建一个简单的漏洞…...

JavaEE简单示例——<select>中的查询参数传递和结果集封装自动映射关系

简单介绍&#xff1a; 在之前我们在讲SQL映射文件中的映射查询语句的<select>标签的时候&#xff0c;对其中的四个常用属性的讲解并不是那么的透彻&#xff0c;今天就来详细的解释<select>的四个常用属性的具体含义以及<select>标签在进行查询的时候查询参数…...

信息安全圈都在谈论CISP,CISSP,这两者有什么区别呢?

CISP 和 CISSP 都是信息安全认证资格考试&#xff0c;但是它们之间有一些区别。 CISP&#xff08;Certified Information Security Professional&#xff09;认证考试是由国际信息系统安全认证联盟&#xff08;ISC)所开发和管理的&#xff0c;主要考核信息安全专业人员在保障企…...

浅谈Redisson实现分布式锁的原理

1.Redisson简介 Redis 是最流行的 NoSQL 数据库解决方案之一&#xff0c;而 Java 是世界上最流行&#xff08;注意&#xff0c;我没有说“最好”&#xff09;的编程语言之一。虽然两者看起来很自然地在一起“工作”&#xff0c;但是要知道&#xff0c;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…...

Whisper JAX时间戳功能:为语音内容添加精准时间标记的终极指南

Whisper JAX时间戳功能&#xff1a;为语音内容添加精准时间标记的终极指南 【免费下载链接】whisper-jax JAX implementation of OpenAIs Whisper model for up to 70x speed-up on TPU. 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-jax Whisper JAX是OpenAI …...

Llama Pro用户必看:如何用LoRA_targets只微调新增的Block,大幅节省你的显存

Llama Pro高效微调指南&#xff1a;精准控制LoRA_targets优化显存使用 当Llama Pro模型规模不断扩展时&#xff0c;全参数微调对显存的消耗往往令人望而却步。实际上&#xff0c;通过巧妙配置LoRA_targets参数&#xff0c;我们可以仅针对新增模块进行定向微调&#xff0c;在保证…...

STM32CubeMX配置RT-Thread Nano:从零构建到任务与内存管理实战

1. 环境准备与基础工程搭建 第一次接触STM32CubeMX和RT-Thread Nano时&#xff0c;我完全按照官方文档操作却踩了不少坑。这里分享一个经过实战验证的配置流程&#xff0c;适用于STM32H7系列&#xff08;其他型号也类似&#xff09;。你需要准备&#xff1a; STM32CubeMX 6.12.…...

基于R语言的自动数据收集:网络抓取和文本挖掘实用指南【1.2】

第2章 HTML在网络上浏览时&#xff0c;我们阅读和操作的几乎所有内容的背后都隐藏着一个标准&#xff1a;超文本标记语言&#xff08;Hyper Text Markup Language&#xff0c;HTML&#xff09;。不管是我们在维基百科上查找信息&#xff0c;在Google搜索站点&#xff0c;查看我…...

双非统计本科入职大厂数据分析,我的CDA数据分析师二级备考经验

一、迷茫中寻路&#xff0c;锚定数据分析方向我本科就读于西安工程大学统计学专业&#xff0c;一所双非公办院校&#xff0c;既非985&#xff0c;也非211。和很多大学生一样&#xff0c;大学期间我曾无数次畅想过自己的第一份工作&#xff0c;却从未敢奢望&#xff0c;能有机会…...

用什么来搭建知识库(写给小白的LLM工具选型系列:第六篇)

诸神缄默不语-个人技术博文与视频目录 &#xff08;本文为AI生成&#xff0c;未做人工验证&#xff0c;也未列出参考资料。以后可能会更新&#xff09; 本文面向小白读者&#xff0c;介绍基于AI的大规模知识库&#xff08;RAG&#xff09;的基本原理和常见方案。我们首先用通…...

PHP爬虫框架大比拼

PHP 爬虫框架介绍PHP 作为服务器端脚本语言&#xff0c;在爬虫领域有多个成熟的框架&#xff0c;以下是主流框架的对比分析&#xff1a;1. Goutte特点&#xff1a;基于 Symfony 组件&#xff0c;轻量易用&#xff0c;适合基础爬取任务。 核心功能&#xff1a;模拟浏览器行为&am…...

解决pnpm安装esbuild时ELIFECYCLE错误的3种方法(附详细步骤)

彻底解决pnpm安装esbuild时ELIFECYCLE错误的实战指南 最近在Vite项目中使用pnpm安装esbuild时&#xff0c;不少开发者遇到了令人头疼的ELIFECYCLE错误。这个错误通常伴随着exit code 1&#xff0c;导致构建流程突然中断。作为一名长期使用pnpm的前端工程师&#xff0c;我深刻理…...

SPM12处理fMRI数据时,如何从OpenNeuro下载的JSON文件里自动提取SliceTiming参数?

SPM12处理fMRI数据时&#xff0c;如何从OpenNeuro下载的JSON文件里自动提取SliceTiming参数&#xff1f; 当你第一次从OpenNeuro下载fMRI数据集时&#xff0c;可能会被附带的JSON文件搞得一头雾水。这些看似复杂的元数据文件实际上藏着预处理所需的关键参数——尤其是SliceTim…...

HR 简历管理软件全解析:功能、价值与实操指南

企业招聘过程中&#xff0c;简历管理是 HR 工作的核心环节。随着招聘渠道多元化与简历数量激增&#xff0c;传统人工管理模式已难以满足需求&#xff0c;存在效率低、易遗漏、难复用等问题。 HR 简历管理软件作为专业化工具&#xff0c;能实现简历集中整合、智能解析、高效筛选…...