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

ARM 按键控制 LED灯,蜂鸣器,风扇

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;
}

src/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输入//PF9GPIOF->MODER &= (~(0x3<<18));//PF8// GPIOF->MODER &= (~(0x3<<16));//pf7GPIOF->MODER &= (~(0x3<<14));//设置PF9 PF7 PF8产生EXTI事件 EXTI_EXTICRx//pf7EXTI->EXTICR2 &=(~(0xFF<<24));EXTI->EXTICR2 |= (0x5<<24);//pf8// EXTI->EXTICR3 &=(~(0xFF<<0));// EXTI->EXTICR3 |= (0x5<<0);//pf9EXTI->EXTICR3 &=(~(0xFF<<8));EXTI->EXTICR3 |= (0x5<<8);//设置事件触发方式为下降沿触发EXTI_FTSR1//pf7EXTI->FTSR1 |= (0x1<<7);//pf8// EXTI->FTSR1 |= (0x1<<8);//pf9EXTI->FTSR1 |= (0x1<<9);//设置EXTI事件触发不屏蔽EXTI_IMR1//PF7EXTI->C1IMR1 |= (0x1<<7);//PF8// EXTI->C1IMR1 |= (0x1<<8);//PF9EXTI->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设置中断优先级//PF7GICD->IPRIORITYR[24] &= (~(0X1F<<11)); //PF8// GICD->IPRIORITYR[24] &= (~(0X1F<<19)); //PF9GICD->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_CTLRGICD->CTRL |= 0X1;//设置中断优先级掩码GICC_PMRGICC->PMR |= (0x1F<<3);//使能CPU可以处理组0转发的中断GICC_CTLRGICC->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));
}

 include/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

 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_ICPENDRxGICD->ICPENDR[3] |= (0x1<<3);//清除中断触发标志位EXTI_FPR1EXTI->FPR1 |= (0x1<<9);break;case 97://key2//按键2中断处理printf("KEY2 INT\n");GPIOB->ODR ^=(0x1<<6);//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<1);//清除中断触发标志位EXTI_FPR1EXTI->FPR1 |= (0x1<<7);break;case 98://key3//按键3中断处理printf("KEY3 INT\n");GPIOE->ODR ^=(0x1<<9);//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<2);//清除中断触发标志位EXTI_FPR1EXTI->FPR1 |= (0x1<<8);break;}//清除处理完的中断号GICC_EOIRGICC->EOIR =irqno;
}

 

相关文章:

ARM 按键控制 LED灯,蜂鸣器,风扇

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; }src/key_it.c: #include"…...

VirtualBox Ubuntu扩展虚拟机磁盘空间

关于Orical VM VirtualBox虚拟机安装了ubuntu linux系统&#xff0c;由于需要&#xff0c;磁盘空间不足&#xff0c;需要扩展磁盘空间&#xff0c;最终找到了一个非常简单的方法&#xff0c;上干货。 1、关闭虚拟机 2、运用VBoxManage命令扩展vdi文件的空间 打开windows的命…...

C#开发的OpenRA游戏之电力系统之二

C#开发的OpenRA游戏之电力系统之二 继续前面的电力系统分析,在OpenRA游戏里,每一个建筑物都会有一个电力描述字段,说明这个建筑物是消耗电力,还是产生电力的。如果这个建筑物是产生电力的,那么这个字段就会是正值,如果这个建筑物是消耗电力的,就会是负值。因此所有电厂…...

Java架构师基础框架设计

目录 1 导学2 理解软件框架3 框架设计里面的框架和设计模式的关系4 基础框架中常见的基本功能4.1 事务处理4.2 微服务网络调用4.3 缓存实现4.4 分布式id4.5 任务调度4.6 工作流5 基础框架的几种基本的使用方式5.1 继承方式5.2 注解或注解加AOP的方式5.3 将基础框架的功能直接当…...

tortoise创建本地仓库

1.安装git和tortoise 推荐 TortoiseGit的安装与配置方法 以及 Git TortoiseGit 配置步骤以及本地版本管理 这里记录一下我遇到的问题 1.右键没有创建本地版本库 2 .创建了但是克隆不了 后续专有 一般选专有网络 注意自行谨慎选择 自行负责...

【FreeRTOS】【STM32】03 FreeRTOSConfig.h头文件简介与修改

基于[野火]《FreeRTOS%20内核实现与应用开发实战—基于STM32》.pdf FreeRTOSConfig.h头文件是FreeRTOS各项功能的打开与关闭 FreeRTOSConfig.h头文件简介 之前也说过了&#xff0c;FreeRTOSConfig.h文件可以添加在工程中任意文件夹&#xff0c;只需要在路径中添加好了就行。…...

VScode商店无法访问

下面的方法也许对你没用&#xff0c;也许也有用&#xff0c;但是尝试一下不会有任何副作用。 步骤一&#xff1a; 步骤二&#xff1a;在Proxy代理设置中复制输入 http://127.0.0.1:8080 步骤三&#xff1a;关闭软件&#xff0c;再打开VScode&#xff0c;把http://127.0.0.1:8…...

【UnityUGUI】复合控件详解,你还记得多少

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;UI_…...

ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“

现象&#xff1a; ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“ 尝试查找原因&#xff1a;打开从windos直接粘贴c程序到ubuntu的c代码&#xff0c;发现多了 <200b>&#xff1a; 方案&#xff1a;尝试在vim编辑器删除&#xff0c;多出来的字符后编译…...

LeetCode 143.重排链表

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 分析题目后我们可以直接进行模拟实现。 具体用到的就是我们之前的知识的结合&#xff0c;首先使用快慢指针找到链表的中间结点。然后将后半段链表给翻转一下&#xff0c;然后再让这…...

不做决策的“RPA机器人”,不是合格的“数字化劳动力”

01 RPA机器人向“数字劳动力”的转变 随着 RPA 技术被广泛应用各行业的不同场景中&#xff0c;再结合以深度学习为代表的 AI 人工智能技术的新一轮发展&#xff0c;RPA 机器人目前已经从仅能处理“单一、重复和标准化的流程”向智能流程自动化的方向发展&#xff0c;从而具备处…...

网页开发中使用highlight.js实现代码高亮 + 行号

一、背景# 笔者在开发这套博客系统时使用 Editormd 作为 Markdown 编辑器&#xff0c;由于不满足其代码高亮的样式&#xff0c;因此选用 highlight.js 插件来实现代码高亮功能。但是&#xff0c;highlight.js 插件不提供行号的设置功能&#xff0c;于是有了该文章。 二、实现…...

访问Apache Tomcat的manager页面

配置访问Tomcat manager页面的用户名、密码、角色 Tomcat安装完成后&#xff0c;包含了一个管理应用&#xff0c;默认安装在 <Tomcat安装目录>/webapps/manager 例如&#xff1a; 要使用管理页面的功能&#xff0c;需要在conf/tomcat-users.xml文件中配置用户、密码及…...

Ubuntu 20.04.6 LTS repo int 提示/usr/bin/env: “python“: 权限不够

这是由于ubuntu20.04默认安装的python3&#xff0c;将python命令配置i为了python3为软连接&#xff0c;此时只需要通过命令添加配置为python软连接即可 sudo ln -s /usr/bin/python3.8 /usr/bin/python 其中/usr/bin/python3.8这个需要看ubuntu下具体的文件&#xff0c;/usr/…...

python随手小练5

1、求1-100的累加和&#xff08;终止条件 1-100&#xff09;&#xff08;while和for两种&#xff09; #while循环 count 0 index 0 while index < 100:count indexindex 1 print(count)#for循环 sum 0 for i in range(0,101):sum i print(sum)结果&#xff1a; 5050 2…...

一分钟!图片生成32种动画;Adobe绘画工具大升级;复盘Kaggle首场LLM比赛;VR科普万字长文 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f525; Adobe Firefly 大升级&#xff01;图像高清、操作便利&#xff0c;体验感拉满 https://firefly.adobe.com Adobe Firefly 升级了&…...

[Framework] Android Handler 工作原理

Android 中的 Handler 都被人说烂了&#xff0c;但是还是想多说一次&#xff0c;因为在 Android 的系统中它真的非常重要而且它的机制并没有很复杂&#xff0c;无论是新手和老手都可以好好学习下&#xff0c;这对理解 Android 系统很重要&#xff0c;所以说学习的性价比非常高。…...

KITTI数据集中的二进制激光雷达数据(.bin文件)转换为点云数据(.pcd文件)(C++代码)

目录 main.cpp CMakeLists.txt main.cpp #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <fstream> #include <iostream> #include <vector>int main() {// Define file pathsstd::string input_filename "/home/f…...

全球AI人工智能领袖:Anthropic联合创始人丹妮拉·阿莫迪!

在创业界中&#xff0c;有许多杰出的女性企业家&#xff0c;而丹妮拉阿莫迪则是其中的佼佼者。作为Anthropic联合创始人&#xff0c;丹妮拉以她的智慧、勇气和远见闻名于世。 她的故事既是启迪&#xff0c;又是励志&#xff0c;让我们一起来看看她的独特之处。 丹妮拉阿莫迪毕…...

CoT 的方式使用 LLM 设计测试用例实践

前期准备 import SparkApi import os from dotenv import load_dotenv, find_dotenv#以下密钥信息从控制台获取_=load_dotenv(find_dotenv()) appid = os.getenv("SPARK_APP_ID") api_secret=os.getenv("SPARK_APP_SECRET") api_key=os.getenv("SPAR…...

告别‘千人千脑’:用DMMR模型搞定EEG情感识别的跨被试难题(附PyTorch代码)

突破脑电情感识别的个体差异壁垒&#xff1a;DMMR模型实战指南与PyTorch实现 当你在实验室里看着屏幕上跳动的脑电波形时&#xff0c;是否曾为不同受试者数据间的巨大差异而头疼&#xff1f;这种被称为"脑电指纹"的个体特异性&#xff0c;一直是情感识别领域最棘手的…...

Flink源码阅读:双流操作

Window Join我们先回顾一下 window join 的使用方法。DataStream<Tuple2<String, Double>> result source1.join(source2).where(record -> record.f0).equalTo(record -> record.f0).window(TumblingEventTimeWindows.of(Time.seconds(2L))).apply(new Joi…...

python协同过滤算法的基于python二手物品交易网站系统

目录同行可拿货,招校园代理 ,本人源头供货商协同过滤算法在二手物品交易网站中的应用用户行为数据收集基于用户的协同过滤基于物品的协同过滤混合推荐策略冷启动问题处理实时推荐更新推荐结果评估代码实现示例系统功能整合性能优化项目技术支持源码获取详细视频演示 &#xff1…...

电子测试岗面试翻车实录:我的硬件知识与英语短板,以及如何逆袭”

一&#xff1a;首先进行英文的自我介绍Hello, my name isxxx .你好&#xff0c;我叫xxx。I’m 20 years old, and I’m currently a third-year student majoring inElectronic Information Engineering at xxxx我今年20岁&#xff0c;目前是xxx电子信息工程专业的大三学生。My…...

GLM-OCR完整教程:部署、使用、API、案例,一篇搞定所有

GLM-OCR完整教程&#xff1a;部署、使用、API、案例&#xff0c;一篇搞定所有 1. GLM-OCR简介与核心优势 GLM-OCR是一款基于先进多模态架构的OCR识别工具&#xff0c;专为解决复杂文档理解问题而设计。与市面上大多数OCR工具不同&#xff0c;它不仅能识别文字&#xff0c;还能…...

GT New Horizons材质包精选:10款提升沉浸体验的视觉升级方案

GT New Horizons材质包精选&#xff1a;10款提升沉浸体验的视觉升级方案 【免费下载链接】GT-New-Horizons-Modpack A big progressive questing modpack for Minecraft 1.7.10 balanced around the mod GregTech. 项目地址: https://gitcode.com/GitHub_Trending/gt/GT-New-…...

目录中不显示标题中间的软换行符Shift+Enter

文档中的标题过长时&#xff0c;通常使用ShiftEnter软换行符来给标题在合适的位置换行&#xff0c;以实现美观的排版效果。然而&#xff0c;插入软换行符会造成自动产生的目录中标题文本中间出现空格&#xff0c;如图所示&#xff1a;那么&#xff0c;如何让目录中不显示这个软…...

千问3.5-2B轻量化部署教程:边缘设备适配可能性分析与CPU回退方案说明

千问3.5-2B轻量化部署教程&#xff1a;边缘设备适配可能性分析与CPU回退方案说明 1. 模型简介 千问3.5-2B是Qwen系列中的小型视觉语言模型&#xff0c;专为边缘计算场景优化设计。这个2B参数量的版本在保持视觉理解能力的同时&#xff0c;大幅降低了硬件需求。 模型核心能力…...

Kettle数据迁移实战:从CSV到MySQL的高效导入指南

1. 为什么选择Kettle进行CSV到MySQL的数据迁移 第一次接触数据迁移任务时&#xff0c;我试过用Python脚本逐行读取CSV写入MySQL&#xff0c;结果导入10万条数据花了近20分钟。后来发现Kettle这个神器&#xff0c;同样的数据量只需要2分钟就能搞定&#xff0c;效率提升简直惊人。…...

无损视频剪辑效率全攻略:5分钟掌握革新性剪辑技术

无损视频剪辑效率全攻略&#xff1a;5分钟掌握革新性剪辑技术 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 你是否曾因视频剪辑软件的漫长渲染过程而错失发布良机&a…...