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

按键中断控制LED灯亮灭

EXTI—外部中断/事件控制器

EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20 个中断/事 件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的 检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触 发事件的属性

 

EXTI 功能框

 

中断/事件线

硬件设计:

软件设计:

创建两个文件Key.c和Key.h,用来存放按键驱动程序即相关宏定义。

编程要点:

(1)初始化用来产生中断的GPIO。
(2)初始化EXTI。
(3)配置NVIC。
(4)编写中断服务函数。

Key.c文件

#include "Key.h"
#include "Led.h"void Key_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);  //开启GPIOE时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);    //开启AFIO时钟GPIO_InitTypeDef  GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;   //上拉输入GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;    //引脚4GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitStruct);GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);   //选择外部中断线 AFIOEXTI_InitTypeDef  EXIT_InitStruct;   //定义外部中断结构体EXIT_InitStruct.EXTI_Line = EXTI_Line4;  //选择外部中断线EXIT_InitStruct.EXTI_LineCmd = ENABLE;    //使能外部中断EXIT_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;   //中断模式EXIT_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;   //上升沿触发EXTI_Init(&EXIT_InitStruct);  //初始化外部中断/*配置NVIC为优先级组*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   //配置NVICNVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = EXTI4_IRQn; /*配置中断源:按键0*/NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;  /*配置抢占优先级:1*/NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;			/*配置子优先级:1*/NVIC_Init(&NVIC_InitStruct);
}void Key1_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   //开启AFIO时钟GPIO_InitTypeDef  GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;   //上拉输入GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitStruct);GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);	   ///*选择EXTI的信号源*/EXTI_InitTypeDef  EXIT_InitStruct;   //定义外部中断结构体EXIT_InitStruct.EXTI_Line = EXTI_Line3;  //选择外部中断线EXIT_InitStruct.EXTI_LineCmd = ENABLE;    //使能外部中断EXIT_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;   //中断模式EXIT_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;   //上升沿触发EXTI_Init(&EXIT_InitStruct);  //初始化外部中断/*配置NVIC为优先级组*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   //配置NVICNVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = EXTI3_IRQn;  /*配置中断源:按键1*/NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;  /*配置抢占优先级:1*/NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;    	/*配置子优先级:2*/NVIC_Init(&NVIC_InitStruct);}void  EXTI4_IRQHandler(void)
{/*确认是否产生了EXTI Line中断*/if(EXTI_GetITStatus(EXTI_Line4) != RESET)  {LED_ON();   //按键按下灯亮//清除中断标志位EXTI_ClearITPendingBit(EXTI_Line4);}}void  EXTI3_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line3) != RESET)   //不等于0条件为真{LED_OFF();   //按键按下灯灭EXTI_ClearITPendingBit(EXTI_Line3);}

Key.h文件

#ifndef __KEY_H
#define __KEY_H#include "stm32f10x.h"                  // Device headervoid Key_Init(void);
void Key1_Init(void);#endif 

Led.c文件

#include "Led.h"void LED_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOE, &GPIO_InitStructure);GPIO_SetBits(GPIOE, GPIO_Pin_5);}void LED_ON()   //灯亮
{GPIO_ResetBits(GPIOE, GPIO_Pin_5);}void LED_OFF()   //灯灭
{GPIO_SetBits(GPIOE, GPIO_Pin_5);}

Led.h文件

#ifndef __LED_H
#define __LED_H#include "stm32f10x.h"                  // Device headervoid LED_Init(void);
void LED_ON(void);
void LED_OFF(void);#define LED1_TOGGLE		{GPIOE->ODR ^=GPIO_Pin_5;} //绿灯状态翻转    异或操作#endif

main.c文件

#include "stm32f10x.h"                  // Device header
#include "Led.h"
#include "Key.h"int main(void)
{LED_Init();Key_Init();Key1_Init();while(1){}}

相关文章:

按键中断控制LED灯亮灭

EXTI—外部中断/事件控制器 EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20 个中断/事 件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的 检测。EXTI可…...

YOLOV8目标检测——模型训练

文章目录 1下载yolov8([网址](https://github.com/ultralytics/ultralytics))2用pycharm打开文件3训练自己的YOLOV8数据集4run下运行完了之后没有best.pt文件5导出为onnx文件 本章内容主要解决如何训练自己的YOLOV8模型。 1下载yolov8(网址&a…...

利用dockerfile升级flink的curl

最近Nusses扫出flink镜像有CURL漏洞,才发现要更新到最新版本 8.4.0,笔者当时flink版本为: flink:1.17.1-scala_2.12-java8 官方镜像仓库:https://hub.docker.com/_/flinkapt源 我试了如上2种方法,都不能更新curl到8…...

element 日期选择器禁止选择指定日期前后时间

画圈重点&#xff1a;disabledDate的写法要用箭头函数&#xff0c;不能用普通函数写法&#xff0c;否则this指向就错了&#xff0c;会报 undefined <el-date-picker v-model"time" type"date" value-format"yyyy-MM-dd" :…...

00TD时尚女童睡衣,蕾丝边+蝴蝶结太好看了

甜美又可爱的蕾丝花边加蝴蝶结 真的一下子戳中了我的心巴&#xff0c; 满满的少女风真的很好看&#xff0c; 妥妥的可爱小公主一枚 柔软又亲肤&#xff0c;厚厚的很保暖 睡觉真的很舒服 还有袖口和裤脚都做了松紧设计哟&#xff01;...

网络基础知识点

osi七层模型&#xff1a; 应用层&#xff1a;提供用户接口&#xff0c;与用户进行交互 表示层&#xff1a;进行数据格式的转换 会话层&#xff1a;建立、维护和验证会话 传输层&#xff1a;保证目标从源到目的地的传输&#xff08;传输协议和端口号&#xff09; 网络层&#x…...

力扣每日一题54:螺旋矩阵

题目描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示例 2&#xff1a; 输入&#…...

基于WebRTC的程序因虚拟内存不足导致闪退问题的排查以及解决办法的研究

目录 1、WebRTC简介 2、问题现象描述 3、将Windbg附加到目标进程上分析 3.1、Windbg没有附加到主程序进程上&#xff0c;没有感知到异常或中断 3.2、Windbg感知到了中断&#xff0c;中断在DebugBreak函数调用上 3.3、32位进程用户态虚拟地址和内核态虚拟地址的划分 …...

2023年9月青少年软件编程(C 语言) 等级考试试卷(三级)

2023年9月青少年软件编程&#xff08;C 语言&#xff09; 等级考试试卷&#xff08;三级&#xff09;含答案 1.谁是你的潜在朋友 题目描述 “臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男&#xff0c;你…...

用节点亲和性把 Pod 分配到节点

用节点亲和性把 Pod 分配到节点 当前集群信息&#xff1a; rootk8s-master:~# kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k8s…...

GB28181学习(十)——视音频文件下载

要求 SIP服务器接收到媒体接收者发送的视音频文件下载请求后向媒体流发送者发送媒体文件下载命令&#xff0c;媒体流发送者采用RTP将视频流传输给媒体流接收者&#xff0c;媒体流接收者直接将视频流保存为媒体文件&#xff1b;媒体流接收者或SIP服务器可通过配置查询等方式获取…...

2023 年和 2024 年 10 个最佳加密货币趋势

1.熊市低迷 加密货币市场已进入持续数月的长期看跌阶段。尽管 2023 年初出现了一些看涨走势&#xff0c;但大多数领先的加密货币随后都出现了看跌低迷&#xff0c;导致其市值大幅下跌。 此外&#xff0c;持续的熊市可归因于一系列因素&#xff0c;包括宏观经济不确定性、利率…...

0026【Edabit ★☆☆☆☆☆】Convert Hours and Minutes into Seconds

0026【Edabit ★☆☆☆☆☆】Convert Hours and Minutes into Seconds language_fundamentals math Instructions Write a function that takes two integers (hours, minutes), converts them to seconds, and adds them. Examples convert(1, 3) // 3780 convert(2, 0) //…...

Java 枚举类

一、枚举类简介 1、枚举类概念 类的对象只有有限个且确定的&#xff0c;这种类称之为枚举类&#xff1b;因为在jdk1.5之前没有enum关键字来定义枚举类&#xff0c;只能采用class定义一个类然后将类做一些修改满足对象个数有限且确定&#xff0c;那么这种类就是枚举类&#xf…...

SQL sever中的存储过程

在Oracle的专篇中我也有仔细总结了存储过程的相关内容&#xff0c; 文章链接&#xff1a;http://t.csdnimg.cn/Z8AnH 尽管Oracle和SQL sever之间是存在一些区别&#xff0c;但许多基本的概念和原则在Oracle和SQL Server之间是通用的。它们之间有一些常见的区别&#xff0c;如下…...

spacy.load(“en_core_web_trf“)报错TypeError: issubclass() arg 1 must be a class

使用spacy时遇到的问题 写在最前面&#xff1a; 安装spacy和en_core_web_trf时需要保证二者版本一致 安装及查看对应spacy版本 安装 pip install spacy查看版本 import spacy spacy.__version__安装en_core_web_trf 直接安装&#xff08;如果可以的话&#xff09; pytho…...

【C++和数据结构】模拟实现哈希表和unordered_set与unordered_map

目录 一、哈希的概念与方法 1、哈希概念 2、常用的两个哈希函数 二、闭散列的实现 1、基本结构&#xff1a; 2、两种增容思路 和 插入 闭散列的增容&#xff1a; 哈希表的插入&#xff1a; 3、查找 4、删除 三、开散列的实现 1、基本结构 2、仿函数Hash 3、迭代器…...

十四天学会C++之第五天:类的详细讨论

1. 友元函数和友元类 什么是友元函数和友元类&#xff0c;它们的作用。如何声明和使用友元函数和友元类&#xff0c;访问类的私有成员。 友元函数&#xff08;Friend Functions&#xff09; 友元函数是一种特殊的函数&#xff0c;它被允许访问类的私有成员。这意味着即使成员…...

字典树学习笔记

trie 树&#xff0c;即字典树&#xff0c;是一种可以实现 O ( S ) O(S) O(S) 的预处理&#xff08; S S S 为所有字符串的长度和&#xff09;&#xff0c; O ( N ) O(N) O(N)&#xff08; N N N 为查询的字符串的长度&#xff09;的查询的数据结构。 举个栗子&#xff0c;对于…...

web各个指标理解

QPS : 单位时间得请求次数 TPS &#xff1a;单位时间得事务数 并发 &#xff1a; QPS *单位响应时间 pv &#xff1a;进入一个网站&#xff0c;又单击打开该网站的其他页面&#xff0c;每打开一个页面就 增加一个PV,甚至在同一页面每刷新一次也多一个PV 二八定律&#xff1a;百…...

别只发GET请求了!ESP32的HTTPClient库POST数据到服务器,保姆级配置流程(含模拟测试)

ESP32实战&#xff1a;HTTPClient库POST数据全流程指南与模拟测试方案 在物联网开发中&#xff0c;数据采集只是第一步&#xff0c;如何将传感器数据可靠地上传到服务器才是真正体现项目价值的环节。很多开发者习惯使用GET请求获取数据&#xff0c;却忽视了POST请求在数据上传中…...

Win10/Win11双网卡访问冲突?详解路由跃点数(Metric)的优先级设置与实战调优

Win10/Win11双网卡访问冲突&#xff1f;详解路由跃点数&#xff08;Metric&#xff09;的优先级设置与实战调优 当你的笔记本同时连接公司内网和家庭WiFi时&#xff0c;是否遇到过微信消息延迟、视频会议卡顿却查不出原因&#xff1f;或者远程桌面连接时断时续&#xff0c;而pi…...

从理论到实践:流体机械核心知识点与工程应用解析

1. 流体机械基础&#xff1a;从速度三角形到能量转换 第一次接触流体机械时&#xff0c;我被那些旋转的叶轮和复杂的流道搞得一头雾水。直到导师在黑板上画出第一个速度三角形&#xff0c;突然就明白了流体如何在叶轮中"跳舞"。速度三角形是理解流体机械的钥匙&#…...

错过这轮AGI城市升级窗口期,你的城市将掉队至少7.2年——基于世界银行2023-2030跨区域效能衰减模型

第一章&#xff1a;AGI驱动的城市系统范式迁移 2026奇点智能技术大会(https://ml-summit.org) 传统城市操作系统依赖于预设规则、静态模型与人工干预的闭环控制逻辑&#xff0c;而AGI的深度认知能力、跨域泛化推理与实时因果建模&#xff0c;正从根本上重构城市系统的运行底层…...

用C语言手把手教你找出迷宫所有路径(附完整回溯算法代码)

用C语言手把手教你找出迷宫所有路径&#xff08;附完整回溯算法代码&#xff09; 迷宫问题一直是算法学习中的经典案例&#xff0c;它不仅考验编程基础&#xff0c;更是理解递归与回溯思想的绝佳实践。本文将带你从零开始&#xff0c;用C语言实现一个能够找出迷宫所有路径的完整…...

Vue3+TS+Element-Plus 动态筛选组件封装:从配置化表单到智能条件管理(2024-08-01 聚焦‘下拉勾选更多条件’的工程实践)

1. 动态筛选组件的需求背景与设计思路 后台管理系统开发中&#xff0c;查询功能的设计往往决定了用户体验的上限。我经历过多个项目&#xff0c;发现当表格列数超过10个时&#xff0c;传统的横向排列筛选条件会让界面变得拥挤不堪。这时候就需要一个能智能管理空间的动态组件—…...

Sunshine终极故障排除指南:8个常见场景的快速解决方案

Sunshine终极故障排除指南&#xff1a;8个常见场景的快速解决方案 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine作为自托管的游戏串流服务器&#xff0c;为用户提供了强…...

获取淘宝商品详情item_get_pro参数说明

item_get_pro-获得淘宝商品详情高级版taobao.item_get_pro公共参数名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,i…...

告别手动截图!用Lumerical脚本批量导出FDTD仿真数据(附Python处理代码)

告别手动截图&#xff01;用Lumerical脚本批量导出FDTD仿真数据&#xff08;附Python处理代码&#xff09; 在光学仿真领域&#xff0c;时间就是科研生命线。当你在凌晨三点盯着屏幕上第27次重复的"截图-重命名-保存"操作时&#xff0c;是否想过那些被浪费在机械操作…...

凸优化避坑指南:为什么你的梯度下降总不收敛?

凸优化避坑指南&#xff1a;为什么你的梯度下降总不收敛&#xff1f; 在深度学习的实践中&#xff0c;许多初学者都会遇到一个令人困惑的现象&#xff1a;明明按照教科书实现了梯度下降算法&#xff0c;模型参数却始终无法稳定收敛。你可能已经检查了学习率、批量大小甚至激活函…...