ARM作业2

news2025/4/26 7:06:04

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

按键2按下,蜂鸣器响。再按一次,不响

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

头文件key_it.h

#ifndef __KEY_IT_H__
#define __KEY_IT_H__
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_gic.h"
void key_it_config();
void key3_it_config();
void all_led_init();
void buzzer_init();
void fan_init();
#endif

源文件key_it.c

#include"key_it.h"

void key3_it_config()
{
    //RCC使能GPIOF时钟
    RCC->MP_AHB4ENSETR |= (0x1<<5);
    GPIOF->MODER &= (~(0x3<<16));
    EXTI->EXTICR3 &=(~(0xFF<<0));
    EXTI->EXTICR3 |= (0x5<<0);
    EXTI->FTSR1 |= (0x1<<8);
    EXTI->C1IMR1 |= (0x1<<8);
    GICD->ISENABLER[3] |= (0X1<<2); 
    GICD->IPRIORITYR[24] &= (~(0X1F<<19)); 
    GICD->ITARGETSR[24]  &= (~(0X3<<16));
    GICD->ITARGETSR[24] |= (0X1<<16);
}
void key_it_config()
{
    //RCC使能GPIOF时钟
    RCC->MP_AHB4ENSETR |= (0x1<<5);
    //设置PF9 PF7 PF8GPIO输入
    //PF9
    GPIOF->MODER &= (~(0x3<<18));
    //PF8
    // GPIOF->MODER &= (~(0x3<<16));
    //pf7
    GPIOF->MODER &= (~(0x3<<14));
    //设置PF9 PF7 PF8产生EXTI事件 EXTI_EXTICRx
    //pf7
    EXTI->EXTICR2 &=(~(0xFF<<24));
    EXTI->EXTICR2 |= (0x5<<24);
    //pf8
    // EXTI->EXTICR3 &=(~(0xFF<<0));
    // EXTI->EXTICR3 |= (0x5<<0);
    //pf9
    EXTI->EXTICR3 &=(~(0xFF<<8));
    EXTI->EXTICR3 |= (0x5<<8);
    //设置事件触发方式为下降沿触发EXTI_FTSR1
    //pf7
    EXTI->FTSR1 |= (0x1<<7);
    //pf8
    // EXTI->FTSR1 |= (0x1<<8);
    //pf9
    EXTI->FTSR1 |= (0x1<<9);
    //设置EXTI事件触发不屏蔽EXTI_IMR1
    //PF7
    EXTI->C1IMR1 |= (0x1<<7);
    //PF8
    // EXTI->C1IMR1 |= (0x1<<8);
    //PF9
    EXTI->C1IMR1 |= (0x1<<9);
    //使能中断能转发到特定的CPU接口层GICD_ISENABLERx
    //PF7 97号中断
    GICD->ISENABLER[3] |= (0X1<<1); 
    //PF78 98号中断
    // GICD->ISENABLER[3] |= (0X1<<2); 
    //PF9 99号中断
    GICD->ISENABLER[3] |= (0X1<<3); 
    // GICD_ISENABLERx设置中断优先级
    //PF7
    GICD->IPRIORITYR[24] &= (~(0X1F<<11)); 
    //PF8
    // GICD->IPRIORITYR[24] &= (~(0X1F<<19)); 
    //PF9
    GICD->IPRIORITYR[24] &= (~(0X1F<<27)); 
    //设置当前中断被转发到哪一个CPU处理GICD_ITARGETSRx
    //pf7 97中断
    GICD->ITARGETSR[24]  &= (~(0X3<<8));
    GICD->ITARGETSR[24] |= (0X1<<8);
    //pf8 98中断
    // GICD->ITARGETSR[24]  &= (~(0X3<<16));
    // GICD->ITARGETSR[24] |= (0X1<<16);
    //pf9 99中断
    GICD->ITARGETSR[24]  &= (~(0X3<<24));
    GICD->ITARGETSR[24] |= (0X1<<24);
    //使能组0转发中断GICD_CTLR
    GICD->CTRL |= 0X1;
    //设置中断优先级掩码GICC_PMR
    GICC->PMR |= (0x1F<<3);

    //使能CPU可以处理组0转发的中断GICC_CTLR
    GICC->CTRL |= 0X1;    
}

void all_led_init()
{
    //RCC使能
    RCC->MP_AHB4ENSETR |= (0x3<<4);
    //设置PE10 PF10 PE8为输出
    GPIOE->MODER &= (~(0X3<<20));
    GPIOE->MODER |= (0X1<<20);
        //设置推挽输出
    GPIOE->OTYPER &= (~(0X1<<10));
     //设置三个管脚低速输出
    GPIOE->OSPEEDR &= (~(0X3<<20));
     //设置三个管脚输出时无上拉电阻和下拉电阻
    GPIOE->PUPDR &= (~(0X3<<20));
}
void buzzer_init()
{
    //RCC使能
    RCC->MP_AHB4ENSETR |= (0x1<<1);
    //设置PE10 PF10 PE8为输出
    GPIOB->MODER &= (~(0X3<<12));
    GPIOB->MODER |= (0X1<<12);
        //设置推挽输出
    GPIOB->OTYPER &= (~(0X1<<6));
     //设置三个管脚低速输出
    GPIOB->OSPEEDR &= (~(0X3<<12));
     //设置三个管脚输出时无上拉电阻和下拉电阻
    GPIOB->PUPDR &= (~(0X3<<12));
}
void fan_init(){
    //RCC使能
    RCC->MP_AHB4ENSETR  |= (0x1<<4);
    //设置PE9为输出
    GPIOE->MODER &= (~(0X3<<18));
    GPIOE->MODER |= (0X1<<18);
    //设置推挽输出
    GPIOE->OTYPER &= (~(0X1<<9));
    //设置三个管脚低速输出
    GPIOE->OSPEEDR &= (~(0X3<<18));
    //设置三个管脚输出时无上拉电阻和下拉电阻    
    GPIOE->PUPDR &= (~(0X3<<18));
}

do_irq.c

#include "key_it.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{
    int irqno;//保存中断号
    irqno=GICC->IAR & 0X3FF;
    switch(irqno)
    {
        case 99://key1
            //按键1中断处理
            printf("KEY1 INT\n");
			GPIOE->ODR ^=(0X1<<10);
    //清除挂起中断标志位GICD_ICPENDRx
        GICD->ICPENDR[3] |= (0x1<<3);
    //清除中断触发标志位EXTI_FPR1
        EXTI->FPR1 |= (0x1<<9);
            break;
        case 97://key2
            //按键2中断处理
            printf("KEY2 INT\n");
			GPIOB->ODR ^=(0x1<<6);
    //清除挂起中断标志位GICD_ICPENDRx
    GICD->ICPENDR[3] |= (0x1<<1);
    //清除中断触发标志位EXTI_FPR1
    EXTI->FPR1 |= (0x1<<7);
            break;
        case 98://key3
            //按键3中断处理
            printf("KEY3 INT\n");
			GPIOE->ODR ^=(0x1<<9);
    //清除挂起中断标志位GICD_ICPENDRx
    GICD->ICPENDR[3] |= (0x1<<2);
    //清除中断触发标志位EXTI_FPR1
    EXTI->FPR1 |= (0x1<<8);
            break;
    }
    //清除处理完的中断号GICC_EOIR
    GICC->EOIR =irqno;
}

main.c

#include "uart.h"
#include "key_it.h"
int main()
{
	all_led_init();
    uart4_init();//串口初始化
    //中断初始化
    key_it_config();
    key3_it_config();
	buzzer_init();
	fan_init();
    while(1)
    {
        //保证主程序不结束
    }
    return 0;
}

现象

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

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

相关文章

没有炫光的台灯有哪些?2023五款优秀护眼台灯

很多家长有时候会说孩子觉得家里的台灯灯光刺眼&#xff0c;看书看久了就不舒服。这不仅要看光线亮度是否柔和&#xff0c;还要考虑台灯是不是有做遮光式设计。没有遮光式设计的台灯&#xff0c;光源外露&#xff0c;灯光会直射孩子头部&#xff0c;孩子视线较低&#xff0c;很…

【小米技术分享】面试题:什么是乐观锁?你是如何设计一个乐观锁

大家好&#xff0c;我是小米。今天我们来聊一下面试中常见的一个问题&#xff1a;“什么是乐观锁&#xff1f;你是如何设计一个乐观锁&#xff1f;”作为一位热爱技术的程序员&#xff0c;对于这个问题&#xff0c;我有着自己独特的理解和实践经验。接下来&#xff0c;我将以通…

flink1.15 savepoint 超时报错 java.util.concurrent.TimeoutException

savepoint命令 flink savepoint e04813d4e7480c526912eb4d32bba510 hdfs://flink/flink/migration/savepoint56650 -Dyarn.application.id=application_1683808492336_1222报错内容 org.apache.flink.util.FlinkException: Triggering a savepoint for the job e04813d4e7480…

通讯网关软件023——利用CommGate X2HTTP实现HTTP访问Modbus TCP

本文介绍利用CommGate X2HTTP实现HTTP访问Modbus TCP。CommGate X2HTTP是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;SCADA系统上位机、PLC、设备具备Modbus RTU通讯接口&#xff0c;现在…

【计算机网络】——前言计算机网络发展的历程概述

主页点击直达&#xff1a;个人主页 我的小仓库&#xff1a;代码仓库 C语言偷着笑&#xff1a;C语言专栏 数据结构挨打小记&#xff1a;初阶数据结构专栏 Linux被操作记&#xff1a;Linux专栏 LeetCode刷题掉发记&#xff1a;LeetCode刷题 算法&#xff1a;算法专栏 C头…

Python编程必备:掌握列表遍历的6种神级技巧!

更多资料获取 &#x1f4da; 个人网站&#xff1a;涛哥聊Python 遍历列表是Python中最常见的任务之一&#xff0c;因为列表是一种非常常用的数据结构&#xff0c;它用于存储一组项目。 在编程中&#xff0c;经常需要对这些项目进行操作&#xff0c;例如查找特定元素&#xff…

【LeetCode】2.两数相加

目录 1 题目2 答案2.1 我写的&#xff08;不对&#xff09;2.2 更正 3 问题 1 题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返…

如何创建自定义前端组件?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

淘宝历史价格数据接口,淘宝商品历史价格接口,淘宝API接口

淘宝历史价格数据接口采集方法如下&#xff1a; 找到适当的淘宝API接口&#xff0c;该接口需要一个淘宝客的授权码才能使用。使用一个开发工具&#xff0c;比如Python编程语言和Requests库来调用该API接口并获取数据。在调用API时需要指定开始时间和结束时间来获取特定商品在时…

快速搭建Linux网站,并利用内网穿透实现宝塔面板的公网访问【内网穿透】

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板&#xff0c;它支持Linux/Windows系统&#xff0c;我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

DataGridView-----datagridviewcomboboxcolumn

今天项目中需要实现下拉框展示数据。同时我们需要进行对应的数据绑定和保存。以下是常见的两种方式。 1. 绑定数据库数据源 2. 直接输入的list集合。 3. 出现的问题 问题&#xff1a;使用datagridviewcomboboxcolumn时&#xff0c;默认第一次以及将鼠标点击到当前行时&#…

ipad有必要用手写笔吗?性价比电容笔排行榜

随着技术的进步&#xff0c;各种新型的数字电子产品不断涌现。比如说&#xff0c;智能手机、ipad、电容笔之类的东西。但事实上&#xff0c;要将iPad的功能发挥到极致&#xff0c;我认为&#xff0c;这款电容笔&#xff0c;就必不可少的了。这就好像我们在ipad平板上书写东西&a…

QT运行界面与画布大小不一致问题(一步到位)

QT运行界面与画布大小不一致问题 出现的问题直接设置环境变量main函数中输入以下代码更改系统缩放比好了&#xff0c;看一下运行结果吧 出现的问题 当我们运行程序时&#xff0c;发现运行出来的大小和设计的几面大小有很大的差别&#xff0c;这使我们开发起来就特别的困难&…

【设计模式】七、适配器模式

文章目录 现实生活中的适配器例子基本介绍工作原理举例&#xff1a;类适配器模式类适配器模式介绍类适配器模式应用实例 举例&#xff1a;对象适配器模式基本思路对象适配器模式应用实例 举例&#xff1a;接口适配器模式接口适配器模式应用实例适配器模式在 SpringMVC 框架应用…

GPT-4V的图片识别和分析能力

GPT-4V是OpenAI开发的大型语言模型&#xff0c;是GPT-4的升级版本。GPT-4V在以下几个方面进行了改进&#xff1a; 模型规模更大&#xff1a;GPT-4V的参数量达到了1.37T&#xff0c;是GPT-4的10倍。训练数据更丰富&#xff1a;GPT-4V的训练数据包括了1.56T的文本和代码数据。算…

国有企业合同领域的合规管理

随着中国经济的快速发展和市场经济体制的完善&#xff0c;国有企业在国民经济中的地位和作用日益凸显。作为经济主体之一&#xff0c;国有企业必须积极适应市场环境的变化&#xff0c;加强合同管理&#xff0c;提高合规水平&#xff0c;以实现持续发展目标。本文将围绕国有企业…

pycharm设置pyuic和pyrcc

pyuic设置 适合任何虚拟环境&#xff0c;直接用虚拟环境的python解决一切。。。 E:\anaconda3\envs\qt5\python.exe-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py$FileDir$pyrcc设置 E:\anaconda3\envs\qt5\python.exe-m PyQt5.pyrcc_main $FileName$ -o…

深入浅出了解华为云API网关的Gzip功能

Gzip是什么 Gzip是一种用于数据压缩的编码格式&#xff0c;经常被使用在基于HTTP协议的网络传输中。Gzip功能允许服务器在传输数据是对其进行压缩&#xff0c;从而减小传输的数据量&#xff0c;加快页面加载速度&#xff0c;这对于节省带宽和提高用户体验非常有用。本文将从Gz…

你觉得工作开心重要还是赚钱重要?

对于大多数的普通人来说&#xff0c;开心和钱都重要&#xff0c;但是都得不到。我觉得最重要的不是做取舍&#xff0c;或者说不是做我认清楚了哪个重要就可劲地去争取哪样。 真正要做得&#xff0c;而是我们在自己现有的境况下找到自己的最优解&#xff0c;如何在这世人皆苦的环…

小程序和前台开发软件定制的相关信息|APP网站搭建

小程序和前台开发软件定制的相关信息 在如今数字化时代&#xff0c;软件、小程序和前台开发软件定制已经成为了企业必备的工具之一。那么&#xff0c;这些工具到底有什么作用呢&#xff1f;接下来&#xff0c;我将为大家详细介绍。 首先&#xff0c;让我们来了解一下软件。软件…