STM32 多功能按键中断
key1 开关实现led1亮灭,key2开关实现蜂鸣器开关,key3开关实现风扇开关
main.c
#include "uart.h"
#include "key_it.h"
#include "led.h"
int main()
{char c;char *s;uart4_init();//串口初始化all_led_init();key_it_config();fengshan_init();key3_it_config();while(1){}return 0;
}
按键功能函数
#include"key_it.h"
void key3_it_config()
{ RCC->MP_AHB4ENSETR |= (0x1<<5);//PF8GPIOF->MODER &= (~(0x3<<16));//PF8EXTI->EXTICR3 &= (~(0xFF<<0));EXTI->EXTICR3 |= (0x5<<0);//设置触发方式为下降沿触发EXTI_FTSR1EXTI->FTSR1 |= (0x1<<8);//设置EXTI事件触发不屏蔽 EXTI_IMR1EXTI->C1IMR1 |=(0x1<<8);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);RCC->MP_AHB4ENSETR |= (0x1<<1);RCC->MP_AHB4ENSETR |= (0x1<<4);//设置PF9 PF7 PF8 GPIO_MODER输入//PF9GPIOF->MODER &= (~(0x3<<18)); //PF7GPIOF->MODER &= (~(0x3<<14));GICD->ISENABLER[3] |= (0x1<<2); //PF8 98号中断 //PB6 蜂鸣器GPIOB->MODER &= (~(0x3<<12));GPIOB->MODER |=(0x1<<12);GPIOB->OTYPER &=(~(0x1<<6));GPIOB->OSPEEDR &= (~(0x3<<12));GPIOB->PUPDR &= (~(0x3<<12));//设置PF9 PF7 PF8产生EXTI事件 EXTI_EXTICRx//PF7EXTI->EXTICR2 &= (~(0xFF<<24));EXTI->EXTICR2 |= (0x5<<24);//pF9EXTI->EXTICR3 &= (~(0xFF)<<8);EXTI->EXTICR3 |= (0x5<<8); //设置触发方式为下降沿触发EXTI_FTSR1EXTI->FTSR1 |= (0x7<<7);//设置EXTI事件触发不屏蔽 EXTI_IMR1EXTI->C1IMR1 |=(0x7<<7);//使能组0转发中断GICD_CTRLGICD->CTRL |=(0x1);//使能中断能转发到特定的CPU接口层GICD->ISENABLER[3] |= (0x1<<3); //PF9 99号中断 GICD->ISENABLER[3] |= (0x1<<1); //PF7 97号中断//GICD_IPRIOITYR设置中断优先级GICD->IPRIORITYR[24] &= (~(0x1F)<<11);//PF9GICD->IPRIORITYR[24] &= (~(0x1F<<27));//设置当前中断被转发特定的CPU接口层GICO_ITARGETSRxGICD->ITARGETSR[24] &= (~(0x3<<8));GICD->ITARGETSR[24] |= (0x1<<8);GICD->ITARGETSR[24] &= (~(0x3<<24));GICD->ITARGETSR[24] |= (0x1<<24);//使能CPU可以处理组0转发的中断GICD_CTLRGICC->CTRL |= 0x1;//设置中断优先级掩码GICC_CTKRGICC->PMR |= (0x1F<<3);GICC->CTRL |= (0x1);}
void fengshan_init()
{RCC->MP_AHB4ENSETR |= (0x1<<4);//PB9GPIOE->MODER &= (~(0x3<<18));GPIOE->MODER |= (0x1<<18);GPIOE->OTYPER &=(~(0x1<<9));GPIOE->OSPEEDR &= (~(0x3<<18));GPIOE->PUPDR &= (~(0x3<<18));
}
头文件 key_it.h
#ifndef __KEY_IT_H__
#define __KEY_IT_H__
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
void key_it_config();
void key3_it_config();
void fengshan_init();
#endif
led的功能函数 led.c
#include"led.h"
//延时函数
void delay(int ms)
{int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++);}
}//GPIO初始化
void all_led_init()
{//RCC使能RCC->MP_AHB4ENSETR |= (0x3<<20);//设置PE10 PF10 PE8为输出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));GPIOE->PUPDR &= (~(0x3<<20));GPIOE->PUPDR &= (~(0x3<<20));}
中断处理函数实现do_irq.c
#include "key_it.h"
#include "led.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
int flag=0;
void do_irq(void)
{int irqno; //保存中断号irqno=GICC->IAR & 0x3FF;switch(irqno){case 99://key1//按键1中断处理printf("key1\n");printf("key1 ID =%d\n",irqno);//LED亮if(flag==0){GPIOE->ODR |=(0x1<<10);flag=1;//GPIOE.odr &=(~(0x1<<10));//GPIOE.odr &= (~(0x1<<8));}else{flag=0;GPIOE->ODR &=(~(0x1<<10));}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |=(0x1<<3);//清除中断触发标志位EXTI_FPR1EXTI->FPR1 |= (0x1<<9);break;case 97://按键2中断处理printf("key2\n");printf("key2 ID =%d\n",irqno);if(flag==0){GPIOB->ODR |=(0x1<<6);flag=1;}else{flag=0;GPIOB->ODR &= (~(0x1<<6));}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |=(0x1<<1);//清除中断触发标志位EXTI_FPR1EXTI->FPR1 |= (0x1<<7);break;case 98://按键3中断处理printf("key3\n");printf("key3 ID =%d\n",irqno);if(flag==0){GPIOE->ODR |=(0x1<<9);flag=1;}else{flag=0;GPIOE->ODR &= (~(0x1<<9));}
//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |=(0x1<<2);//清除中断触发标志位EXTI_FPR1EXTI->FPR1 |= (0x1<<8);}//清除处理完的中断号GICC->EOIR=irqno;
}


相关文章:
STM32 多功能按键中断
key1 开关实现led1亮灭,key2开关实现蜂鸣器开关,key3开关实现风扇开关 main.c #include "uart.h" #include "key_it.h" #include "led.h" int main() {char c;char *s;uart4_init();//串口初始化all_led_init();key_it_config();fengshan_init…...
Linux-文件管理命令
绝对路径:从根目录开始描述的路径 pwd输入即为绝对路径, 开头一定是“/”,因为一定是从根目录开始走 相对路径:从当前路径开始描述的路径,开头不一定是“/”,因为不一定是从根目录开始走的 .:是当前目录 。…...
JS DataTable中导出PDF右侧列被截断的问题解决
JS DataTable中导出PDF右侧列被截断的问题解决 文章目录 JS DataTable中导出PDF右侧列被截断的问题解决一. 问题二. 解决办法三. 代码四. 参考资料 一. 问题 二. 解决办法 设置PDF大小和版型 orientation: landscape, pageSize: LEGAL,上述代码设置打印的PDF尺寸为LEGAL&…...
学习笔记-MongoDB(复制集,分片集集群搭建)
复制集群搭建 基本介绍 什么是复制集? 复制集是由一组拥有相同数据集的MongoDB实例做组成的集群。 复制集是一个集群,它是2台及2台以上的服务器组成,以及复制集成员包括Primary主节点,Secondary从节点和投票节点。 复制集提供了…...
Servlet与设计模式
1 过滤器和包装器 过滤器可以拦截请求及控制响应,而servlet对此毫无感知。过滤器有如下作用: 1)请求过滤器:完成安全检查、重新格式化请求首部或体、建立请求审计日志。 2)响应过滤器:压缩响应流、追加或…...
Python学习基础笔记六十五——布尔值
布尔对象: Python中有一种对象类型称之为布尔对象(英文叫bool)。 布尔对象只有两种取值,True和False。对应的是真和假,或者说是和否。True对应的是,False对应的是否。 我觉得这句话是一个关键:…...
ChatGPT生产力|实用指令(prompt)
GPT已经成为一个不可或缺的科研生产力了,但是大多数人只知晓采用直接提问、持续追问以及细节展开的方式来查阅相关资料,本文侧重于探讨“限定场景限定角色限定主题”、“可持续追问细节展开”等多种方式来获取更多信息,帮人们解决更多问题。 …...
【大数据Hive】hive select 语法使用详解
目录 一、前言 二、Hive select 完整语法树 三、Hive select 操作演示 3.1 数据准备 3.1.1 创建一张表 3.1.2 将数据load加载到t_usa_covid19表 3.1.3 再创建一张分区表 3.1.4 使用动态分区插入数据 3.2 select 常用语法 3.2.1 查询所有字段或者指定字段 3.2.2 查询…...
Android---java线程优化 偏向锁、轻量级锁和重量级锁
java 中的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统的帮忙,这就需要从用户态转换到核心态。状态转换需要花费很多时间,如下代码所示: private Object lock new Object();private int value;p…...
处理机调度
目录 处理机调度概述 处理机调度的层次 低级调度 中级调度 高级调度 进程调度 进程调度的时机 进程调度的方式 非抢占式调度方式 抢占式调度方式 调度算法的评价指标 调度算法 先来先服务调度算法(FCFS,First Come First Serve) …...
Webpack 解决:ReferenceError: dist is not defined 的问题
1、问题描述: 其一、报错为: ReferenceError: dist is not defined 中文为: ReferenceError:dist 未定义 其二、问题描述为: 想在 webpack 的配置中,创建一个 dist 文件夹来存放 npm run build 打包后…...
MySQL的index merge(索引合并)导致数据库死锁分析与解决方案 | 京东云技术团队
背景 在DBS-集群列表-更多-连接查询-死锁中,看到9月22日有数据库死锁日志,后排查发现是因为mysql的优化-index merge(索引合并)导致数据库死锁。 定义 index merge(索引合并):该数据库查询优化的一种技术࿰…...
第四章 网络层 | 计算机网络(谢希仁 第八版)
文章目录 第四章 网络层4.1 网络层提供的两种服务4.2 网际协议IP4.2.1 虚拟互连网络4.2.2 分类的IP地址4.2.3 IP地址与硬件地址4.2.4 地址解析协议ARP4.2.5 IP数据报的格式4.2.6 IP层转发分组的流程 4.3 划分子网和构造超网4.3.1 划分子网4.3.2 使用子网时分组的转发4.3.3 无分…...
课题学习(八)----卡尔曼滤波动态求解倾角、方位角
一、 卡尔曼滤波 卡尔曼滤波的应用要求系统和底层过程的测量模型都是线性的。离散时间线性状态空间系统的描述为: x k Φ k , k − 1 x k − 1 G k − 1 w k − 1 x_k\Phi_{k,k-1}x_{k-1}G_{k-1}w_{k-1} xkΦk,k−1xk−1Gk−1wk−1 式中 Φ k , k − 1 \Phi_{…...
仿真软件Proteus8.9 SP2 Pro 下载、安装、汉化详细图文教程
Proteus8.9 安装教程 视频教程一、安装软件解压二、软件安装常见问题及解决方法:三、汉化 Proteus8.9 SP2 Pro 安装教程 本破解教程仅供个人及 proteus 8.9粉丝们交流学习之用,请勿用于商业用途, 谢谢支持。此版本为Proteus8.9 SP2 Pro。其他…...
振弦传感器和无线振弦采集仪在隧道安全监测的解决方案
振弦传感器和无线振弦采集仪在隧道安全监测的解决方案 隧道作为交通工程的重要组成部分,具有极高的安全风险,因此隧道安全监测是必不可少的。振弦传感器和无线振弦采集仪作为隧道安全监测的两种重要设备,能够有效地监测隧道的振动情况&#…...
c# xml 参数读取的复杂使用
完整使用2 生产厂家里面包含很多规格型号,一个规格型号里面包含很多出厂序列号,点击下一步如果检测到填充的和保存的不一样 就新增一条(如检测到生产厂家相同,但是规格型号不同,就新增一组规格型号)。 界面一:新增界面 界面2 删除界面 界面一:新增界面 load 其中…...
在Mac中使用 brew services start redis 命令启动、停止Redis服务报错
一、问题现象 启动Redis服务命令: brew services start redis异常信息如下: Error: uninitialized constant Homebrew::Service::System /opt/homebrew/Library/Homebrew/macos_version.rb:150:in const_missing /opt/homebrew/Library/Taps/homebrew…...
iapp源码-----比较经典
2.0底部菜单导航栏.rar: https://url18.ctfile.com/f/7715018-958700751-6096bd?p6511 (访问密码: 6511) 2.0涟漪_拖动条控制音乐播放.rar: https://url18.ctfile.com/f/7715018-958700754-4cec13?p6511 (访问密码: 6511) 2.0手电筒.rar: https://url18.ctfile.com/f/7715018…...
为什么手机会莫名多出许多软件?
许多手机用户都曾遭遇过这样的问题,他们在使用手机的过程中,突然发现手机屏幕上出现了一些未知的软件。这些软件并非他们主动下载的,但它们却显现在屏幕上。这些软件从何而来? 其实,这些软件往往是在浏览网页、阅读小…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
