嵌入式STM32学习——外部中断EXTI与NVIC的基础练习⭐
按键控制LED灯
按键控制LED的开发流程:
第一步:使能功能复用时钟
第二布,配置复用寄存器
第三步,配置中断屏蔽寄存器
固件库按键控制LED灯
外部中断EXTI结构体:typedef struct{uint32_t EXTI_Line;
EXTIMode_TypeDef EXTI_Mode;
EXTITrigger_TypeDef EXTI_Trigger;
FunctionalState EXTI_LineCmd;
}EXTI_InitTypeDef;外部中断EXTI相关库函数:void EXTI_DeInit(void);void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);void EXTI_ClearFlag(uint32_t EXTI_Line);ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
软件流程设计
- 初始化系统
初始化GPIO、EXTI外设时钟
初始化按键和LED引脚
初始化EXTI外部中断条件
初始化NVIC嵌套中断控制器及分组
- 编写外部中断函数
判断按键是否按下控制LED灯
weak:若弱定义;如果用户没有自己定义的中断函数,则系统默认执行系统自定义的中断函数,如果用户有定义中断函数则优先执行用户的中断函数。
实现代码
LED
led.h
#ifndef LED_H_
#define LED_H_void LED_Init(void);#endif
led.c
#include "led.h"
#include "stm32f10x.h"//初始化LED灯的函数————函数的定义、声明、调用(led.c led.h main.c)
void LED_Init(void)
{//1.初始化led引脚GPIOA1GPIO_InitTypeDef led_initstruct; //定义GPIO的结构体//2.³õʼ»¯Ê±ÖÓRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//时钟的初始化led_initstruct.GPIO_Pin = GPIO_Pin_1;led_initstruct.GPIO_Speed = GPIO_Speed_2MHz;led_initstruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA,&led_initstruct); //初始化GPIO结构体}
按键
shake.h
#ifndef SHAKE_H_
#define SHAKE_H_void Shake_Init(void);#endif
shake.c
#include "stm32f10x.h"
#include "shake.h"void Shake_Init(void)
{GPIO_InitTypeDef shake_initstruct;EXTI_InitTypeDef exti_initstruct;NVIC_InitTypeDef nvic_initstruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//时钟初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //NVIC分配shake_initstruct.GPIO_Mode=GPIO_Mode_IPU; //按键shake_initstruct.GPIO_Pin=GPIO_Pin_0;GPIO_Init(GPIOA, &shake_initstruct);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//GPIO中断线exti_initstruct.EXTI_Line =EXTI_Line0; //中断exti_initstruct.EXTI_Mode = EXTI_Mode_Interrupt;exti_initstruct.EXTI_Trigger = EXTI_Trigger_Falling;exti_initstruct.EXTI_LineCmd = ENABLE;EXTI_Init(&exti_initstruct);//NVICnvic_initstruct.NVIC_IRQChannel =EXTI0_IRQn; //f10x.h中寻找nvic_initstruct.NVIC_IRQChannelPreemptionPriority = 0;nvic_initstruct.NVIC_IRQChannelSubPriority = 0;nvic_initstruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&nvic_initstruct);
}
main.c
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "bear.h"
#include "key.h"
#include "shake.h"
void delay(uint16_t time)
{uint16_t i=0;while(time--){i =12000;while(i--);}}int main()
{LED_Init();Shake_Init();GPIO_SetBits( GPIOA, GPIO_Pin_1);while(1){}
}void EXTI0_IRQHandler() //中断函数
{if(EXTI_GetITStatus(EXTI_Line0) != RESET)//外部中断获取标志位,即查看是否满足中断条件{GPIO_ResetBits(GPIOA,GPIO_Pin_1);EXTI_ClearITPendingBit(EXTI_Line0); //外部中断标志位清除,为下一次中断留出位置,一般与EXTI_GetITStatus一起使用}
}
个人感悟:
难,要多练!!!
相关文章:
嵌入式STM32学习——外部中断EXTI与NVIC的基础练习⭐
按键控制LED灯 按键控制LED的开发流程: 第一步:使能功能复用时钟 第二布,配置复用寄存器 第三步,配置中断屏蔽寄存器 固件库按键控制LED灯 外部中断EXTI结构体:typedef struct{uint32_t EXTI_Line; …...
git merge和git rebase
git merge和git rebase 在Git中merge和rebase都是git在管理整合分支的两种主要工具,但是他们的工作方式、提交历史影响和使用场景不同。 git merge 定义 将两个分支的提交历史合并,创建一个新的合并提交(merge commit)ÿ…...
我的MCP相关配置记录
1.VSCode的Cline中的MCP {"mcpServers": {"github.com/modelcontextprotocol/servers/tree/main/src/github": {"autoApprove": [],"disabled": false,"timeout": 60,"command": "cmd","args&quo…...
浅聊一下数据库的索引优化
背景 这里的索引说的是关系数据库(MSSQL)中的索引。 本篇不是纯技术性的内容,只是聊一次性能调优的经历,包含到一些粗浅的实现和验证手段,所以,大神忽略即可。 额…对了,笔者对数据库的优化手段…...
如何创建maven项目
1.IDEA 中创建 Maven 项目 步骤一:点击 File -> New -> Project,在弹出的窗口左侧选择 Maven,点击 Next: 步骤二:填写项目的 GroupId、ArtifactId、Version 等信息(这些对应 pom.xml 中的关键配置&am…...
LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
一、引言 在自然语言处理领域,大规模预训练语言模型(LLMs)展现出强大的语言理解和生成能力。然而,将这些模型适配到多个下游任务时,传统微调方法面临诸多挑战。LoRA(Low-Rank Adaptation of Large Language Models)作为一种创新的微调技术,旨在解决这些问题,为大语言…...
Conda在powershell终端中无法使用conda activate命令
主要有以下原因: Windows PowerShell安全策略:默认情况下,PowerShell的执行策略设置为"Restricted",这会阻止运行脚本,包括conda的初始化脚本。调用方式不同:在PowerShell中,需要使用…...
MySQL索引底层数据结构与算法
1、索引的数据结构 1.1、二叉树 1.2、红黑树(二叉平衡树) 1.3、hash表 对key进行一次hash计算就可以定位出数据存储的位置 问题:hash冲突问题、仅满足和in的查找,不支持范围查找 1.4、B-tree 1.5、B tree 非叶子节点不存储data&…...
GOOSE 控制块参数gocbRef及goID有大小写要求
在 IEC 61850 标准中,GOOSE 控制块参数gocbRef和goID的大小写是严格区分的。这一结论基于以下多维度分析: 一、标准协议与配置文件的强制性 XML 语法的刚性约束 GOOSE 控制块的配置信息通过 SCL(Substation Configuration Languageÿ…...
重庆医科大学附属第二医院外科楼外挡墙自动化监测
1.项目概述 重庆医科大学附属第二医院,重医附二院,是集医疗、教学、科研、预防保健为一体的国家三级甲等综合医院。前身为始建于1892年的“重庆宽仁医院”。医院现有开放床位 1380张,年门诊量超过百万人次,年收治住院病人4.5万人…...
3.4 数字特征
本章系统讲解随机变量的数字特征理论,涵盖期望、方差、协方差与相关系数的核心计算与性质。以下从四个核心考点系统梳理知识体系: 考点一:期望(数学期望) 1. 离散型随机变量的数学期望 一维情形: E ( X …...
servlet-api
本次内容总结 1、再次学习Servlet的初始化方法 2、学习Servlet中的ServletContext和<context-param> 3、什么是业务层 4、IOC 5、过滤器 7、TransActionManager、ThreadLocal、OpenSessionInViewFilter 1、再次学习Servlet的初始化方法 1)Servlet生命周期&…...
NLTK进行文本分类和词性标注
《python ⾃然语⾔处理实战》学习笔记 NLTK 下载依赖 !pip install nltkimport nltk nltk.download(punkt_tab)分词(tokenize) from nltk.tokenize import word_tokenize from nltk.text import Textinput_str """Twinkle, twinkle, little star, How I won…...
电机控制储备知识学习(一) 电机驱动的本质分析以及与磁相关的使用场景
目录 电机控制储备知识学习(一)一、电机驱动的本质分析以及与磁相关的使用场景1)电机为什么能够旋转2)电磁原理的学习重要性 二、电磁学理论知识1)磁场基础知识2)反电动势的公式推导 附学习参考网址欢迎大家…...
华三路由器单臂路由配置
目录 1.实验目的1.1 掌握华三路由器单臂路由配置方法2.1 路由器连接交换机,交换机划分多个 VLAN,不同 VLAN 的 PC 通过路由器实现通信 配置步骤与命令解析1.配置交换机2.配置路由器验证配置3.1 配置交换机 VLAN3.1.1 创建 VLAN3.1.2 配置端口所属 VLAN3.…...
一键转换上百文件 Word 批量转 PDF 软件批量工具
各位办公族们,你们有没有被手动把Word一个个转成PDF给折腾得欲哭无泪过啊?我之前就因为这事忙得晕头转向,眼睛都快看瞎了!不过呢,后来我发现了专门为咱提升办公效率设计的Word批量转PDF软件,那简直就是办公…...
矫平机:工业精密矫正的全维度解析
作为现代制造业的核心设备之一,矫平机通过消除材料残余应力、提升平整度,持续推动着汽车、航空航天、新能源等领域的质量升级。本文基于最新行业动态与技术突破,从原理革新到智能化实践展开深度解析。 一、核心原理:力学与智能的深…...
网络安全-等级保护(等保) 2-3 GB/T 22240—2020《信息安全技术 网络安全等级保护定级指南》-2020-04-28发布【现行】
################################################################################ 在开始等级保护安全建设前,第一步需要知道要保护的是什么,要保护到什么程度,所以在开始等级保护中介绍的第一个标准是《定级指南》,其中明确了…...
GNSS数据自动化下载系统的设计与实现
摘要 本文详细介绍了三种不同设计的GNSS数据自动化下载系统,分别针对IGS观测数据、GRACE-FO Level-1B数据以及通过代理服务器获取数据的需求场景。系统采用Python实现,具备断点续传、完整性校验、异常处理和进度显示等核心功能。实验结果表明࿰…...
c语言第一个小游戏:贪吃蛇小游戏06
实现贪吃蛇四方向的风骚走位 实现代码 #include <curses.h> #include <stdlib.h> struct snake{ int hang; int lie; struct snake *next; }; struct snake *head; struct snake *tail; int key; int dir; //全局变量 #define UP 1 //这个是宏定义&a…...
人工智能_大模型数据标注主要做什么_拉框_人工智能训练师_数据标准师介绍---人工智能工作笔记0244
随着大模型的快速发展,数据标注迅速成为比较热门的工作,那么 数据标注,具体干什么呢? 因为现在人工智能在某个领域如果理解,或者识别的越精准,那么 就需要越高质量的数据, 就是因为,模型的训练,大多还是有监督深度学习.给他足够高质量的数据才行有好的效果. 可以看到在AI领…...
工业4G路由器IR5000公交站台物联网应用解决方案
随着城市化进程的加速,公共交通是智慧城市的重要枢纽。城市公共交通由无数的公交站台作作为节点组合而成,其智能化升级成为提升城市出行效率与服务质量的关键。传统公交站台信息发布滞后、缺乏实时性,难以满足乘客对公交信息快速获取的需求&a…...
文件操作: File 类的用法和 InputStream, OutputStream 的用法
目录 1. File 概述 1.1 File的属性 1.2 File的构造方法 1.3 File的方法 2. 文件的基本操作 2.1 InputStream 2.2 OutputStream 2.3.字符流读取(Reader) 2.4 字符流写(Writer) 1. File 概述 Java 中通过 java.io.File 类来对⼀个文件…...
SQL 中 INSTR 函数简介及 截取地址应用
一、基本语法与参数解析 语法: INSTR(string1, string2 [, start_position [, nth_occurrence]]) 参数说明: a.string1:源字符串(必选)。 b.string2:需查找的子字符串&am…...
Oracle SYSTEM/UNDO表空间损坏的处理思路
Oracle SYSTEM/UNDO表空间损坏是比较棘手的故障,通常会导致数据库异常宕机进而无法打开数据库。数据库的打开故障处理起来相对比较麻烦,读者可以参考本书第5章进一步了解该类故障的处理过程。如果数据库没有备份,通常需要设置官方不推荐的隐含…...
【HarmonyOs鸿蒙】七种传参方式
一、页面间导航传参 使用场景:页面跳转时传递参数 实现方式:通过router模块的push方法传递参数 // 页面A传参 import router from ohos.router;router.pushUrl({url: pages/PageB,params: { id: 123, name: HarmonyOS } });// 页面B接收参数 Entry Co…...
微信小程序 密码框改为text后不可见,需要点击一下
这个问题是做项目的时候碰到的。 密码框常规写法: <view class"inputBox"><view class"input-container"><input type"{{inputType}}" placeholder"请输入密码" data-id"passwordValue" bindin…...
Gatsby知识框架
一、Gatsby 基础概念 1. 核心特性 基于React的静态站点生成器:使用React构建,输出静态HTML/CSS/JS GraphQL数据层:统一的数据查询接口 丰富的插件系统:超过2000个官方和社区插件 高性能优化:自动代码分割、预加载、…...
TCP协议十大核心特性深度解析:构建可靠传输的基石
TCP(传输控制协议)作为互联网的"交通指挥官",承载着全球80%以上的网络流量。本文将深入解析TCP协议的十大核心特性,通过原理剖析、流程图解和实战案例,揭示其如何实现高效可靠的数据传输。 一、面向连接的可…...
【架构】RUP统一软件过程:企业级软件开发的全面指南
一、RUP概述 RUP(Rational Unified Process,统一软件过程)是由Rational Software公司(后被IBM收购)开发的一种迭代式软件开发过程框架。它结合了传统瀑布模型的系统性和敏捷方法的灵活性,为中大型软件项目提供了全面的开发方法论。 RUP不仅仅是一种过程…...
基于智能家居项目 实现DHT11驱动源代码
DHT11 温湿度传感器的数据读取一般分为 四个步骤,下面详细介绍每个步骤的具体内容: 步骤一:主机发送起始信号 主机(如 MCU)主动向 DHT11 发送开始信号,方式为: 将数据线拉低 至少 18ms&…...
小程序的内置组件
一、Text文本组件 1.Text组件解析 Text组件用于显示文本, 类似于span标签, 是行内元素 user-select属性决定文本内容是否可以让用户选中 space有三个取值(了解) decode是否解码(了解) decode可以解析的有 < > & '    二、Butto…...
T-BOX硬件方案深度解析:STM32与SD NAND Flash存储的完美搭配
在智能网联汽车快速发展的当下,车载 T-BOX(Telematics Box)作为车辆与云端互联的核心枢纽,其性能和可靠性直接决定了用户体验的上限。米客方德(MK)推出的基于 STM32H7RX 主控芯片与 MKDV4GIL-AST࿰…...
hadoop3.x单机部署
jdk hadoop3.x需要jdk8以上的版本 hadoop3.x 从官网下载对应的tar.gz文件 配置环境变量 vim /etc/profile# 需要替换为自己的安装地址!!! export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-amd64 export PATH$PATH:$JAVA_HOME/bin expo…...
Hadoop的目录结构和组成
Hadoop 目录结构 bin 目录:包含了 Hadoop 的各种命令行工具,如hadoop、hdfs等,用于启动和管理 Hadoop 集群,以及执行各种数据处理任务。etc 目录:存放 Hadoop 的配置文件,包括core-site.xml、hdfs-site.xm…...
深度剖析 RTX 4090 GPU 算力租赁:从技术优势到生态价值的全维度解析
一、引言:当算力成为数字经济的 "新石油" 在 AI 大模型训练成本突破千万美元大关、元宇宙场景渲染需求呈指数级增长的 2025 年,算力已然成为驱动技术创新的核心生产要素。NVIDIA RTX 4090 显卡作为消费级 GPU 的性能天花板,正通…...
基于MATLAB的生物量数据拟合模型研究
一、研究背景 在现代科学研究与工程实践的广泛领域中,数据拟合扮演着举足轻重的角色。从物理学中对复杂物理现象的建模,到生物学里对生物生长规律的探究,数据拟合已成为揭示数据内在规律、构建有效数学模型的关键技术手段。其核心要义在于&am…...
VSCode设置SSH免密登录
引言 2025年05月13日20:21:14 原来一直用的PyCharn来完成代码在远程服务器上的运行,但是PyCharm时不时同步代码会有问题。因此,尝试用VSCode来完成代码SSH远程运行。由于VSCode每次进行SSH连接的时候都要手动输入密码,为了解决这个问题在本…...
微信小程序的开发及问题解决
HttpClient 测试例子 SpringBootTest public class HttpClientTest {/*** 测试通过httpclient发送get方式的请求*/Testpublic void testGET() throws IOException {//创建httpclient对象CloseableHttpClient httpClient HttpClients.createDefault();//创建请求对象HttpGet ht…...
vscode百宝箱工具插件(devtools)
vscode百宝箱插件是一款结合JSON格式化, 正则表达式测试等工具为一体的插件, 直接嵌入到vscode里面, 省去了上网去找相应的工具 一、插件名称:devtools(TraesureBox) 目前插件上传到vscode插件市场, 搜索 devtools 看…...
3.5 统计初步
本章系统阐述统计推断理论基础,涵盖大数定律、抽样分布、参数估计与假设检验等核心内容。以下从六个核心考点系统梳理知识体系: 考点一:大数定律与中心极限定理 1. 大数定律 切比雪夫不等式: 设随机变量 X X X 的数学期望 E (…...
物联网设备状态监控全解析:从告警参数到静默管理的深度指南-优雅草卓伊凡
物联网设备状态监控全解析:从告警参数到静默管理的深度指南-优雅草卓伊凡 在当今万物互联的时代,物联网设备的稳定运行已成为企业数字化转型的基石。优雅草星云智控系统作为新一代智能监控平台,其设备告警管理模块集成了先进的监控逻辑与人性…...
讯联云库项目开发日志(一)
1、设计数据库 2、写基本框架 entity、controller、service、exception、utils、mapper mapper层: 生成了一系列的CRUD方法 工具类:线程安全的日期工具类、 参数校验工具类 线程安全的日期工具类:主要用于 日期格式化&…...
UE5通过C++实现TcpSocket连接
在 Unreal Engine 5 的 C 项目中,实现一个具备消息监听、心跳检测和断线重连功能的 TCP 客户端,可以参考以下完整示例。 准备工作 1、模块依赖 在 YourModule.Build.cs 文件中,添加对 Sockets 和 Networking 模块的依赖: Publ…...
Spark的缓存
RDD缓存 Spark速度非常快的原因之一,就是在不同操作中可以在内存中持久化或缓存多个数据集。当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用。这使得后续的动作变得更加迅速。…...
Vue 3.5 :新特性全解析与开发实践指南
2025 年初,Vue 官方正式发布了 Vue 3.5 版本,为开发者带来了诸多令人期待的新特性和性能优化。本文将全面解析 Vue 3.5 的核心更新内容,帮助你快速上手并应用于实际项目中。 🌟 1. 服务器端渲染(SSR)增强 L…...
电能质量扰动信号信号通过hilbert变换得到瞬时频率
利用Hilbert变换从电能质量扰动信号中提取瞬时频率、瞬时幅值、Hilbert谱和边际谱的详细步骤及MATLAB代码实现。该流程适用于电压暂降、暂升、谐波、闪变等扰动分析。 1. Hilbert变换与特征提取流程 1.1 基本步骤 信号预处理:滤波去噪(如小波去噪&…...
跨境电商数据被入侵后的应急与防护策略
随着跨境电商的全球化发展,数据安全已成为企业运营的核心挑战。一旦数据被入侵,不仅会导致经济损失,还可能引发法律纠纷和品牌声誉危机。本文将从应急响应、技术防护、合规管理三个维度,结合实际案例,提供系统性解决方…...
日拱一卒 | RNA-seq质控分析(2)
之前对这些软件的认识通常是云里雾里的。知道要用哪个软件,从网上抄一些代码,然后改改,就直接用了,对软件的原理不甚了解。此为急需改变的现状。这个过程也许需要重复重复的进行,但是我庆幸自己在实践的过程中了。 1.…...
org.slf4j.MDC介绍-笔记
1. 功能简介 MDC(Mapped Diagnostic Context)是 SLF4J 提供的一个接口,用于在多线程环境中为每个线程存储上下文信息。这些信息通常用于日志记录,帮助开发者快速定位问题。MDC 是基于 ThreadLocal 实现的,这意味着每个…...