ARM的学习

键控灯

mykey.h

#ifndef __MYKEY_H__
#define __MYKEY_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_exti.h"
void key1_int_config();
void key2_int_config();
void key3_int_config();#endif

mykey.c

#include "mykey.h"void key1_int_config()
{//使能GPIO外设时钟RCC->MP_AHB4ENSETR |=(0x1<<5);//设置PF9为输入GPIOF->MODER &=(~(0x3<<18));//设置PF9产生EXTI9事件EXTI->EXTICR3 &=(~(0xff << 8));EXTI->EXTICR3 |=(0x05 << 8);//设置下降沿检测EXTI9事件EXTI->FTSR1 |= (0x1 << 9);//取消EXTI9事件的屏蔽EXTI->C1IMR1 |= (0x1 << 9);// 全局使能99号中断GICD->ISENABLER[3] |= (0x1 << 3);//设置99号中断的优先级GICD->IPRIORITYR[24] &=(~(0x1f << 27));//设置99号中断的目标处理器GICD->ITARGETSR[24] |=(0x1 <<24);//允许组0中断被转发到GICC层GICD->CTRL |= 0x1;// 设置中断优先级掩码GICC->PMR |=(0x1f << 3);// 允许组0中断被转发给处理器GICC->CTRL |= 0x1;
}void key2_int_config()
{
//使能GPIO外设时钟RCC->MP_AHB4ENSETR |=(0x1<<5);//设置PF7为输入GPIOF->MODER &=(~(0x3<<14));//设置PF7产生EXTI7事件EXTI->EXTICR2 &=(~(0xff << 24));EXTI->EXTICR2 |=(0x05 << 24);//设置下降沿检测EXTI7事件EXTI->FTSR1 |= (0x1 << 7);//取消EXTI7事件的屏蔽EXTI->C1IMR1 |= (0x1 << 7);// 全局使能97号中断GICD->ISENABLER[3] |= (0x1 << 1);//设置97号中断的优先级GICD->IPRIORITYR[24] &=(~(0x1f << 11));//设置97号中断的目标处理器GICD->ITARGETSR[24] |=(0x1 <<8);//允许组0中断被转发到GICC层GICD->CTRL |= 0x1;// 设置中断优先级掩码GICC->PMR |=(0x1f << 3);// 允许组0中断被转发给处理器GICC->CTRL |= 0x1;
}void key3_int_config()
{//使能GPIO外设时钟RCC->MP_AHB4ENSETR |=(0x1<<5);//设置PF8为输入GPIOF->MODER &=(~(0x3<<16));//设置PF8产生EXTI8事件EXTI->EXTICR3 &=(~(0xff ));EXTI->EXTICR3 |=(0x05 );//设置下降沿检测EXTI8事件EXTI->FTSR1 |= (0x1 << 8);//取消EXTI8事件的屏蔽EXTI->C1IMR1 |= (0x1 << 8);// 全局使能98号中断GICD->ISENABLER[3 ]|= (0x1 << 2);//设置98号中断的优先级GICD->IPRIORITYR[24] &=(~(0x1f << 19));//设置98号中断的目标处理器GICD->ITARGETSR[24] |=(0x1 <<16);//允许组0中断被转发到GICC层GICD->CTRL |= 0x1;// 设置中断优先级掩码GICC->PMR |=(0x1f << 3);// 允许组0中断被转发给处理器GICC->CTRL |= 0x1;}

do_irq.c

#include "mykey.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{//获取中断号unsigned int irqno=(GICC->IAR&0x3ff);switch(irqno){case 99://中断处理逻辑i=!i;if(i==0)GPIOE->ODR |=(0x1<<10);elseGPIOE->ODR &=(~(0x1<<10));//清除GICD的中断标志GICD->ICPENDR[3] |=(0X1<<3);//清除EXTI中的中断触发标志EXTI->FPR1 |=(0x1<<9);break;case 98://中断处理逻辑i=!i;if(i==0)GPIOE->ODR |=(0x1<<8);elseGPIOE->ODR &=(~(0x1<<8));//清除GICD的中断标志GICD->ICPENDR[3] |=(0X1<<2);//清除EXTI中的中断触发标志EXTI->FPR1 |=(0x1<<8);break;case 97://中断处理逻辑i=!i;if(i==0)GPIOF->ODR |=(0x1<<10);elseGPIOF->ODR &=(~(0x1<<10));//清除GICD的中断标志GICD->ICPENDR[3] |=(0X1<<1);//清除EXTI中的中断触发标志EXTI->FPR1 |=(0x1<<7);break;}//清除IAR寄存器中保存的中断号GICC->EOIR=irqno;
}

main.c

#include "mykey.h"#include "uart4.h"//手动封装延时函数void delay_ms(int ms){int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++){}}}int main(){//按键中断初始化key1_int_config();key2_int_config();key3_int_config();//串口初始化uart4_config();//char str[100];while(1){//死循环不让程序结束}return 0;}

效果演示

键控灯

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

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

相关文章

用海外云手机高效率运营TikTok!

很多做国外社媒运营的公司&#xff0c;想要快速引流&#xff0c;往往一个账号是不够的&#xff0c;多数都是矩阵养号的方式&#xff0c;运营多个TikToK、Facebook、Instagram等账号&#xff0c;慢慢沉淀流量变现&#xff0c;而他们都在用海外云手机这款工具&#xff01; 海外云…

使用EasyExcel和POI操作Excel实现文件上传和下载

使用easyExcel实现文件读写 实现流程 1.导入依赖 2.定义数据模型 3.定义监听器 4.读取或写入数据 5.释放资源 实现 导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.3</…

知识管理系统(KMS):一文扫盲,能和chatGPT相融吗?

一、什么是KMS&#xff0c;有什么作用 KMS&#xff08;Knowledge Management System&#xff09;知识管理系统是一种用于组织、存储、共享和利用知识的软件系统或平台。它旨在帮助组织有效地管理和利用内部和外部的知识资源&#xff0c;以支持决策、创新和持续学习。 KMS知识管…

华为云CodeArts IDE For Python 快速使用指南

CodeArts IDE 带有 Python 扩展&#xff0c;为 Python 语言提供了广泛的支持。Python 扩展可以利用 CodeArts IDE 的代码补全、验证、调试和单元测试等特性&#xff0c;与多种 Python 解释器协同工作&#xff0c;轻松切换包括虚拟环境和 conda 环境的 Python 环境。本文简要概述…

数据治理——元数据管理实施步骤

一、元数据管理概述 1.1 数据管理面临的问题 数据治理的概念是对数据数据管理的管理&#xff0c;在数据管理的过程中遇到的问题有&#xff1a; 1.1.1 数据不可理解 海量数据&#xff0c;标准不统一&#xff0c;各系统、各部门对统一指标和概念的解释不一致&#xff0c;统计口…

python机器学习库中Scikit-learn和TensorFlow如何选择?

在Python机器学习库中&#xff0c;Scikit-learn和TensorFlow是两个非常流行的选择&#xff0c;但它们各自有不同的特点和适用场景。以下是根据搜索结果的一些考虑因素&#xff0c;帮助你做出选择&#xff1a; 1. 项目需求&#xff1a; 如果你的项目主要涉及传统的机器学习算…

OpenCV基本图像处理操作(三)——图像轮廓

轮廓 cv2.findContours(img,mode,method) mode:轮廓检索模式 RETR_EXTERNAL &#xff1a;只检索最外面的轮廓&#xff1b;RETR_LIST&#xff1a;检索所有的轮廓&#xff0c;并将其保存到一条链表当中&#xff1b;RETR_CCOMP&#xff1a;检索所有的轮廓&#xff0c;并将他们组…

魔方网表 存在 mailupdate.jsp接口 任意文件上传漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 魔方网表mailupdate.jsp接口存在任意文件上传漏洞 …

数据仓库—维度建模—事实表设计

事实表 事实表是数据仓库中的核心表,用于记录与业务过程相关的事实信息,是进行数据分析和挖掘的主要数据来源。 在ER模型中抽象出了有实体、关系、属性三种类别,在现实世界中,每一个操作型事件,基本都是发生在实体之间的,伴随着这种操作事件的发生,会产生可度量的值,…

ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写教程

原文链接&#xff1a;ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601506&idx2&sn5dae3fdc3e188e81b8a6142c5ab8c994&chksmfa820c85cdf58593356482880998fc6eb98e6889b261bf621e1d…

Git 实用技巧2——新建空白分支 | 重命名分支 | 回退到历史 commit

git version 2.39.2.windows 1. 新建空白分支 参考&#xff1a;Git - git-switch Documentation: https://git-scm.com/docs/git-switch/zh_HANS-CN 使用 --orphan 参数&#xff0c;创建一条不基于任何现有提交的空白分支。其初始提交&#xff08;即 HEAD&#xff09;不指向任…

箭头函数多个函数体

当箭头函数需要多个语句组成函数体时&#xff0c;需要使用花括号 {} 将多个语句包裹起来&#xff0c;并且需要显式地使用 return 关键字返回值。下面是一个包含多个函数体语句的箭头函数示例&#xff1a;‘ var greet name > { var greeting "Hello, "; …

了解在 Docker 和 Kubernetes 中运行Go程序的影响

根据 2021 年对 Go 开发人员的调查,使用 Go 编写服务是最常见的用途。同时,Kubernetes 是部署这些服务的最广泛使用的平台。了解在 Docker 和 Kubernets 中运行 Go 的含义非常重要,可防止出现 CPU 节流等常见情况。 GOMAXPROCS 变量定义了负责同时执行用户级代码的操作系统线…

python生成二维码

要在Python中生成二维码&#xff0c;可以使用第三方库qrcode。首先&#xff0c;确保已经安装了qrcode库&#xff1a; pip install qrcode然后&#xff0c;使用以下代码生成二维码&#xff1a; import qrcodedata "https://mp.csdn.net/mp_blog/creation/editor?spm100…

c++ std::map 介绍

在 C 中&#xff0c;字典通常指的是 std::map&#xff0c;它是一个关联容器&#xff0c;用于存储键-值对&#xff0c;并且按照键的顺序进行排序。除了 std::map&#xff0c;C 标准库还提供了其他一些类似字典的容器&#xff0c;比如 std::unordered_map&#xff08;无序字典&am…

Kafka服务端(含Zookeeper)一键自启软件

1. 前言 本文介绍了一款集成图形化界面配置和一键自启功能的Kafka与Zookeeper服务管理软件。该软件通过直观易用的图形界面&#xff0c;使用户能够轻松完成Kafka和Zookeeper的配置工作&#xff0c;有效避免了手动编辑配置文件可能带来的错误和不便。同时&#xff0c;软件还提供…

【附gpt4.0升级秘笈】百度智能云万源全新一代智能计算操作系统发布:引领AI新纪元

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;作为引领未来发展的关键技术&#xff0c;正逐步渗透到社会的每一个角落。百度&#xff0c;作为中国AI领域的领军企业&#xff0c;始终站在技术创新的前沿&#xff0c;不断推出引领行业的重磅产品。今日&…

SRTP + RTCP + SCTP

SRTP&#xff08;Secure Real-time Transport Protocol&#xff09; 主要功能&#xff1a;SRTP 是 RTP 的一个扩展&#xff0c;提供额外的安全特性&#xff0c;如加密、完整性校验和认证。它旨在保护实时传输的音频和视频流不被窃听或篡改。加密传输&#xff1a;SRTP 使用强加密…

论文略读:SWE-bench: Can Language Models Resolve Real-world Github Issues?

iclr 2024 oral reviewer评分 5668 现有的语言模型&#xff08;LMs&#xff09;的基准测试已经饱和&#xff0c;无法捕捉到最先进的语言模型能做什么和不能做什么的前沿。 ——>要具有挑战性的基准测试论文引入了SWE-bench 在现实软件工程环境中评估语言模型的基准测试 ​​…

使用 code-server 搭建在线的 VS Code 编辑器

文章目录 前言安装体验后记 前言 VS Code 是一个非常流行的代码编辑器&#xff0c;安装各种拓展下也可以当作全功能的IDE使用。VS Code本身是基于Web方案构建的&#xff0c;完全可以搭建服务器&#xff0c;然后通过浏览器访问。事实上官方就是这么设计的。现在打开任何一个Git…