arm实验

设置按键中断,按键1按下,LED亮,再次按下,灭

按键2按下,蜂鸣器叫,再次按下,停

按键3按下,风扇转,再次按下,停

头文件

#ifndef __CTRL_KEY_H__
#define __CTRL_KEY_H__#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_gic.h"
void all_led_init();   //初始化灯
void fan_init(); 		//初始化风扇
void voice_init();    //初始化蜂鸣器
void key_config();    //初始化中断
#endif

异常处理文件

#include "ctrl_key.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{int irq_num; //保存中断号irq_num = GICC->IAR &0x3ff;switch(irq_num){//key1case 99://按键1中断处理printf("KEY1 INT\n");//灯亮if(GPIOE->ODR &=(0x1<<10)){GPIOE->ODR &= (~(0x1<<10));}else{GPIOE->ODR |=(0x1<<10);}//清除挂起中断标志位GICD->ICPENDR[3] |= (0x1<<3);//清除中断触发标志位EXTI->FPR1 |=(0x1<<9);break;case 97:  //key2//按键1中断处理printf("KEY2 INT\n");//蜂鸣器叫if(GPIOB->ODR &=(0x1<<6)){GPIOB->ODR &= (~(0x1<<6));}else{GPIOB->ODR |=(0x1<<6);}//清除挂起中断标志位GICD->ICPENDR[3] |= (0x1<<1);//清除中断触发标志位EXTI->FPR1 |=(0x1<<7);break;case 98: //key3//按键1中断处理printf("KEY3 INT\n");//风扇转if(GPIOE->ODR &= (0x1<<9)){GPIOE->ODR &=(~(0x1<<9));}else{GPIOE->ODR |=(0x1<<9);}//清除挂起中断标志位GICD->ICPENDR[3] |= (0x1<<2);//清除中断触发标志位EXTI->FPR1 |=(0x1<<8);break;}//清除处理完的中断号GICC->EOIR =irq_num;
}

初始化文件

#include "ctrl_key.h"void key_config()
{//RCC使能GPIOF时钟   第5位置1RCC->MP_AHB4ENSETR |=(0x1<<5);//设置PF9、PF7、PF8的GPIOF输入模式 将[14:19]位置0GPIOF->MODER &= (~(0x3f<<14));//设置PF9、PF7、PF8产生EXTI事件//key2EXTI->EXTICR2 &=(~(0xff<<24));EXTI->EXTICR2 |=(0x5<<24);//key3EXTI->EXTICR3 &=(~(0xff));EXTI->EXTICR3 |=(0x05);//key1EXTI->EXTICR3 &=(~(0xff<<8));EXTI->EXTICR3 |=(0x05<<8);//设置事件触发方式为下降沿触发EXTI->FTSR1 |= (0x7<<7);//设置EXTI事件触发不屏蔽EXTI->C1IMR1 |=(0x7<<7);//使能组0转发中断GICD->CTRL |=(0x1);//使能中断能转发到指定的cpu接口层GICD_ISENABLERx//key1GICD->ISENABLER[3] |=(0x1<<3);//key2GICD->ISENABLER[3] |=(0x1<<1);//key3GICD->ISENABLER[3] |=(0x1<<2);//GICD_IPRIORITYRx寄存器 设置中断优先级//key1优先级GICD->IPRIORITYR[24] &= (~(0x1f<<27));//Key2优先级GICD->IPRIORITYR[24] &= (~(0x1f<<11));//key3优先级GICD->IPRIORITYR[24] &= (~(0x1f<<19));//设置当前中断被转发到哪一个cpu处理GICD_ITARGETSRxGICD->ITARGETSR[24] &= (~(0x3<<24));GICD->ITARGETSR[24] |= (0x1<<24);GICD->ITARGETSR[24] &= (~(0x3<<8));GICD->ITARGETSR[24] |= (0x1<<8);GICD->ITARGETSR[24] &= (~(0x3<<16));GICD->ITARGETSR[24] |= (0x1<<16);//使能cpu可以处理组0转发的中断GICC_CTLRGICC->CTRL |=(0x1);//设置中断优先级掩码GICC_PMRGICC->PMR |=(0x1f<<3);  //设置最低优先级
}//初始化灯、
void all_led_init()
{//RCC使能RCC->MP_AHB4ENSETR |= (0x3<<4);//设置为输出模式GPIOE->MODER &= (~(0x3<<20));GPIOE->MODER |= (0x1<<20);GPIOF->MODER &= (~(0x3<<20));GPIOF->MODER |= (0x1<<20);GPIOE->MODER &= (~(0x3<<16));GPIOE->MODER |= (0x1<<16);//设置为推挽输出GPIOE->OTYPER &= (~(0x1<<10));GPIOF->OTYPER &= (~(0X1<<10));GPIOE->OTYPER &= (~(0X1<<8));//设置输出速度GPIOE->OSPEEDR &= (~(0X3<<20));GPIOF->OSPEEDR &= (~(0X3<<20));GPIOE->OSPEEDR &= (~(0X3<<16));//不设置上拉、下拉GPIOE->PUPDR &= ~((0X3<<20));GPIOF->PUPDR &= ~((0X3<<20));GPIOE->PUPDR &= ~((0X3<<16));
}//初始化风扇    
void fan_init()    //PE9
{//RCC使能GPIOERCC->MP_AHB4ENSETR |= (0x1<<4);//设置为输出模式GPIOE->MODER &= (~(0x3<<18));GPIOE->MODER |= (0x1<<18);//设置推挽输出GPIOE->OTYPER &= (~(0x1<<9));	
}//初始化蜂鸣器
void voice_init()   //PB6
{//RCC使能GPIOBRCC->MP_AHB4ENSETR |=(0x1<<1);//设置输出模式GPIOB->MODER &= (~(0x3<<12));GPIOB->MODER |= (0x1<<12);//设置推挽输出GPIOB->OTYPER &=(~(0x1<<6));}

调试主文件

#include "ctrl_key.h"int main()
{//初始化灯all_led_init();//初始化风扇fan_init();//初始化蜂鸣器voice_init();//中断初始化key_config();while(1){//保证程序不结束}return 0;
}

实验效果:

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

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

相关文章

Learning Sample Relationship for Exposure Correction 论文阅读笔记

这是中科大发表在CVPR2023的一篇论文&#xff0c;提出了一个module和一个损失项&#xff0c;能够提高现有exposure correction网络的性能。这已经是最近第三次看到这种论文了&#xff0c;前两篇分别是CVPR2022的ENC&#xff08;和这篇文章是同一个一作作者&#xff09;和CVPR20…

cap分布式理论

cap 理论 cap是实现分布式系统的思想。 由3个元素组成。 Consistency&#xff08;一致性&#xff09; 在任何对等 server 上读取的数据都是最新版&#xff0c;不会读取出旧数据。比如 zookeeper 集群&#xff0c;从任何一台节点读取出来的数据是一致的。 Availability&…

Unity基于C#事件委托机制

事件委托是一种用于实现观察者模式的设计模式&#xff0c;它允许对象在发生特定事件时通知其他对象。在Unity中&#xff0c;事件委托机制为开发者提供了一种简单而有效的方式来处理游戏中的事件和交互。 对啦&#xff01;这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的…

解决方案 | 法大大电子签精准击破销售场景签约难题

新商业形态及新交易模式不断涌现&#xff0c;电子签已经成为现代商业活动中不可或缺的一部分。特别是在销售场景中&#xff0c;电子签的应用不仅可以提高销售效率&#xff0c;还可以降低成本&#xff0c;提高客户满意度。本文将详细分析电子签在销售场景中的应用价值能力&#…

快速解决“找不到msvcr120.dll无法执行代码”问题,总结5解决方法

计算机已经成为我们生活和工作中不可或缺的一部分。然而&#xff0c;在使用计算机的过程中&#xff0c;我们常常会遇到各种问题&#xff0c;其中之一就是找不到msvcr120.dll文件。这个问题可能会可能导致计算机程序软件&#xff0c;游戏无法正常运行&#xff0c;影响到我们的工…

(十四)VBA常用基础知识:当前excel文件所有sheet循环,获取sheet名,获取最大行数最大列数

获取当前excel的所有sheet以及sheet名 Sub test()Dim ws As WorksheetFor Each ws In Worksheetsws.ActivateDebug.Print ws.NameNext ws End Sub 输出结果&#xff1a; Sheet1 Sheet2 Sheet3 Sheet4 Sheet52.获取最大行数 首先要明白取最大行的方式&#xff0c;为什么这样取…

ceph 分布式存储与部署

目录 一、存储基础&#xff1a; 1.单机存储设备&#xff1a; 2. 单机存储的问题&#xff1a; 3. 商业存储解决方案&#xff1a; 4. 分布式存储&#xff1a; 5. 分布式存储的类型&#xff1a; 二、Ceph 简介&#xff1a; 三、Ceph 优势&#xff1a; 四、Ceph 架构&#xff1a…

01 时钟配置初始化,debug

1. 开启debug series&#xff0c;否则只能下载一次&#xff0c;再次下载要配置boot 2.f0外部时钟配置 h750 配置 实测可用

FPGA面试题(1)

一.FPGA内部结构 可编程I/OPLL锁相环&#xff08;其作用为&#xff1a;分频&#xff0c;倍频&#xff0c;相位调节、占空比&#xff09;逻辑阵列块LAB&#xff08;每个LAB由16个逻辑器件LE组成&#xff0c;每个LE包括一个查找表LUT和一个RAM构成。Cyclone IV EP4CE6F17C8中包含…

【Spring AOP】统一异常处理

统一异常处理 统⼀异常处理使⽤的是 ControllerAdvice ExceptionHandler 来实现的&#xff0c; 类上面加上 ControllerAdvice 注解表示控制器通知类方法上面加上 ExceptionHandler 表示异常处理器&#xff0c;并添加异常返回的业务代码 两个结合表示当出现异常的时候执⾏某个…

Android终极大招之全面取代drawble文件实现View圆角背景样式的新方案

简介 最近一直忙于音视频SDK的开发&#xff0c;遇到很多问题&#xff0c;简单来说&#xff0c;就是怎么让别人接入SDK时越简单越好。相信大多数Android开发都会遇到一个场景&#xff0c;给TextView或Button添加背景颜色&#xff0c;修改圆角&#xff0c;描边等需求。一看到这样…

React 组件传 children 的各种方案

自定义组件的时候往往需要传 children&#xff0c;由于写法比较多样&#xff0c;我就总结了一下。 方案列表 1. 类组件1.1 类组件&#xff0c;不使用解构1.2 类组件&#xff0c;使用解构 2. 函数组件2.1 函数组件&#xff0c;不使用解构2.2 函数组件&#xff0c;外部解构2.3 函…

docker 登录本地仓库harbor问题

1、报错如下&#xff1a; 添加目标harbor 仓库的hosts vim /etc/hosts 2、报错如下&#xff1a; 添加修改/etc/docker/daemon.json文件中的 insecure-registries vim /etc/docker/daemon.json 然后 systemctl daemon-reload systemctl restart docker再次登录

HQChart实战教程66-动态调整HQChart布局大小

HQChart实战教程66-动态调整HQChart布局大小 需求小程序h5AppHQChart插件源码地址 需求 在不销毁hqchart实例的情况下&#xff0c;动态调整K线图或分时图的大小&#xff0c; 如下图&#xff0c;把图1的K线图大小调整为图2的大小 图1 图2 小程序 调整画布大小&#xff0c;并…

(c语言进阶)指针的进阶

一.字符指针 1.一般应用 &#xff08;1&#xff09;%c的应用 &#xff08;2&#xff09;%s的应用 字符指针没有权限通过解引用去改变指针指向的值 2.笔试题 题目&#xff1a;判断输出结果 int main() { const char* p1 "abcdef"; const char* p2 "…

前端开发工具vscode

一、下载安装 https://code.visualstudio.com/ 二、安装插件 三、使用 ①、创建一个空目录 ②、利用vscode工具打开该目录 ③、将该目录设置为工作区 在工作区中添加文件&#xff0c;还可以进行浏览器访问&#xff08;提前安装了Live Server插件&#xff09; 为工具…

Dubbo-SPI机制

1、Java的SPI机制 SPI的全称是Service Provider Interface&#xff0c;是JDK内置的动态加载实现扩展点的机制&#xff0c;通过SPI可以动态获取接口的实现类&#xff0c;属于一种设计理念。 系统设计的各个抽象&#xff0c;往往有很多不同的实现方案&#xff0c;在面向的对象的…

黄金票据与白银票据

文章目录 黄金票据与白银票据1. 背景2. 具体实现2.1 Kerberos协议认证流程 3. 黄金票据3.1 条件3.2 适用场景3.3 利用方式 4. 白银票据4.1 条件4.2 适用场景4.3 利用方式 5. 金票和银票的区别5.1 获取的权限不同5.2 认证流程不同5.3 加密方式不同 6. 经典面试题6.1 什么是黄金票…

018-第三代软件开发-整体介绍

第三代软件开发-整体介绍 文章目录 第三代软件开发-整体介绍项目介绍整体介绍Qt 属性系统QML 最新软件技术框架 关键字&#xff1a; Qt、 Qml、 属性、 Qml 软件架构 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object …

97 # session

koa 里的 cookie 用法 koa 里内置了设置 cookie 的方法 npm init -y npm i koa koa/router用法&#xff1a; const Koa require("koa"); const Router require("koa/router"); const crypto require("crypto");const app new Koa(); let …