STM32—外部中断_按键控制 LED

目录

1 、 电路构成及原理图 

2 、编写实现代码 

main.c

 exti.c

3、代码讲解

4、烧录到开发板调试、验证代码

5、检验效果

开发板介绍

相关笔记


此笔记基于朗峰 STM32F103 系列全集成开发板的记录 

1 、 电路构成及原理图 

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

2 、编写实现代码 

main.c

 exti.c

 

3、代码讲解

按部就班的先初始化产生中断的引脚 PC8 也就是 KEY1 引脚,因KEY1 的另一个引脚连接在低电平 GND 端所以选择下降沿触发(按下按键时 PC8 引脚会由高电平被拉到低电平),也是这个原因 PC8 选择上拉即平时没有按下 KEY1 时 PC8 是高电平状态。 

随后就要用 HAL 库函数 HAL_NVIC_SetPriority()设置中断的优先级别了,这里中断线我们选择 EXTI9_5 因前面介绍了中断线和中断服务 函 数 的 对 应 关 系 , 引 脚 PC8 对 应 的 中 断 服 务 函 数 是EXTI9_5_IRQHandler()。

main 没有更多好说的,依旧是初始化 HAL 库、初始化系统时钟(72Mhz)、初始化 LED、初始化按键最后初始化按键的外部中断。 因控制逻辑写在了中断服务函数里,程序运行后有中断产生时就自动运行了,所以 main 函数里也就没有什么需要处理了。 

4、烧录到开发板调试、验证代码

 工程编译没有问题后就下载到开发板中检验代码运行情况,把代码下载到朗峰 F1 开发板方法是:用朗峰 F1 开发板保护盒配的 ST-LINK 下载器 ,连接到开发板的 SWD 插针上注意引脚对应关系,不要插错了。 

然后编译一次(按 ),编译结果显示 0 错误 0 警告就 OK 


 
之后再按 将代码下载到开发板。 

5、检验效果

下载完成后,连接好开发板电源并按下电源开关,

按下 KEY1 看到LED1 亮起,

再次按 KEY1 键 LED1 熄灭。

工程到此验证无误。 

开发板介绍

STM32F103RCT6开发板——全集成开发板,外设齐全,资料详尽,新手学习好帮手!

相关笔记

STM32介绍-CSDN博客

STM32入坑-CSDN博客

STM32-寄存器和HAL库以及如何使用-CSDN博客

STM32-开发环境之MDK5-CSDN博客

STM32-开发环境之STM32CubeMX-CSDN博客

STM32-开发工具-CSDN博客

STM32-开发板介绍-CSDN博客

STM32-点亮 LED-CSDN博客

STM32-启用蜂鸣器-CSDN博客

STM32—启用按键-CSDN博客

STM32—触摸键-CSDN博客

STM32—PWM输出-CSDN博客

STM32—控制蜂鸣器(定时器)CSDN博客

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

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

相关文章

codeforce #925 (div3) 题解

D. Divisible Pairs 给出数组 a a a,如果二元组 ( i , j ) (i,j) (i,j)满足 a i a j m o d x 0 & & a i − a j m o d y 0 a_i a_j mod x 0 \&\& a_i - a_j mod y 0 ai​aj​modx0&&ai​−aj​mody0,则beauty。其中 i &…

BEVFormer代码阅读

1. 代码地址 https://github.com/fundamentalvision/BEVFormer 2. 代码结构 个人理解,代码库中的代码与两篇论文都略有不同,总结起来,其结构如下。 3. BEVFormer 的 Pipeline 根据自己调试算法模型以及对论文的理解,我这里将 …

牛客网刷题 :BC50 你是天才吗

描述 据说智商140以上者称为天才,KiKi想知道他自己是不是天才,请帮他编程判断。输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“Genius”。 输入描述: 多组输入,每…

(十)C++自制植物大战僵尸游戏设置功能实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 游戏设置 游戏设置功能是一个允许玩家根据个人喜好和设备性能来调整游戏各项参数的重要工具。游戏设置功能是为了让玩家能够根据自己的需求和设备性能来调整游戏,以获得最佳的游戏体验。不同的游戏和平…

音视频、网络带宽等常用概念详解

1.aac音频参数解释 AAC帧大小为1024个sample:指AAC编码一般以1024个采样为一个音频帧。 采样率48khz:指1秒(即1000毫秒)采集48000次。 计算1秒有多少帧:48000 / 1024 46.875 a(用a表示计算结果&#xff0…

vite - WebAssembly入门

1. 初始化 vite 项目 1.1 安装 nvm(可选) brew update brew install nvm在 ~/.zshrc 添加 export NVM_DIR~/.nvm source $(brew --prefix nvm)/nvm.sh执行如下命令 source ~/.zshrc1.2 安装 node nvm install nodenvm ls -> …

PyTorch Scheduler动态调整学习率

文章目录 PyTorch动态调整学习率1.使用官方scheduler2.自定义scheduler参考 PyTorch动态调整学习率 深度学习中长久以来一直存在一个令人困扰的问题,那就是如何选择适当的学习率。如果学习速率设置得过小,会导致模型收敛速度缓慢,训练时间延…

vscode 打代码光标特效

vscode 打代码光标特效 在设置里面找到settings 进入之后在代码最下方加入此代码 "explorer.confirmDelete": false,"powermode.enabled": true, //启动"powermode.presets": "fireworks", // 火花效果// particles、 simple-rift、e…

Day13-C++基础之文件操作

文件操作 #include<iostream> #include<fstream> #include<string> using namespace std; ​ class Person{ public:char m_Name[64];int m_Age; }; ​ int main(){//文本文件操作 ​//写文件//1.包含头文件 fstream//2.创建流对象ofstream ofs;//3.指定打开…

如何利用OceanBase v4.2的 外部表简化外部数据处理

为什么需要使用外表 在日常的业务场景中&#xff0c;经常遇到需要在数据库中处理外部数据的情况&#xff0c;这些数据可能来源于应用程序&#xff0c;或者是其他业务系统。一般来说&#xff0c;常是通过ETL工具将外部数据库的数据导入到数据库内部的表中&#xff0c;再进行分析…

EasyRecovery数据恢复软件好不好用?值不值得下载

EasyRecovery数据恢复软件是一款专业且功能强大的数据恢复工具&#xff0c;它旨在帮助用户从各种存储设备中恢复由于各种原因&#xff08;如误删除、格式化、病毒攻击、系统崩溃等&#xff09;导致丢失的数据。这款软件支持多种存储介质&#xff0c;包括但不限于硬盘驱动器、U盘…

分布式监控平台---Zabbix

一、Zabbix概述 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果&#xff0c;和网站的健康状态。 利用一个优秀的监控软件&#xff0c;我们可以&#xff1a; 通过一个友好的界面进行浏览整个…

go结构体嵌套递归调用的2种方式--struct和func

1: 需要嵌套部分是结构体类型的&#xff0c;例如&#xff1a;快照 套 子快照&#xff0c;但是子快照长得和快照一样&#xff08;同一份结构体&#xff09;&#xff0c;可以无限递归套娃&#x1fa86; // ResRootSnapshot ... type ResRootSnapshot struct {// 快照标识Urn str…

Java实现单点登录(SSO)详解:从理论到实践

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

【Maven工具】

maven Maven是一个主要用于Java项目的构建自动化工具。它有助于管理构建过程&#xff0c;包括编译源代码、运行测试、将编译后的代码打包成JAR文件以及管理依赖项。Maven使用项目对象模型&#xff08;POM&#xff09;文件来描述项目配置和依赖关系。 Maven通过提供标准的项目…

(三)C++自制植物大战僵尸游戏项目结构说明

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/ErelL 一、项目结构 打开项目后&#xff0c;在解决方案管理器中有五个项目&#xff0c;分别是libbox2d、libcocos2d、librecast、libSpine、PlantsVsZombies五个项目&#xff0c;除PlantsVsZombies外&#xff0c;其他四个…

第十五届蓝桥杯研究生组Java软件开发组总结

2024年十五届蓝桥杯研究生组 今年的题较去年难度降低了很多&#xff0c;题量也少了2道。 Q1 劲舞团 读文件&#xff0c;找到最长的满足条件的子数组的长度 答案是&#xff1a;9 BufferedReader&#xff0c;fopen&#xff0c;open Q2 召唤数学精灵 找规律&#xff0c;周期…

SELinux详解

SELinux是一种安全增强的Linux操作系统的安全子系统。它是由美国国家安全局&#xff08;NSA&#xff09;与Red Hat公司合作开发的&#xff0c;旨在提供高级的访问控制和强制访问控制&#xff08;MAC&#xff09;机制。 SELinux的目标是通过在操作系统内核中实施强大的访问控制…

【算法】快速排序的基本思想、优化 | 挖坑填补法和区间分割法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法分析与设计知识专栏&#xff1a;算法分析&#x1f525; 给大家跳…

基于springboot+vue实现的疫情防控物资调配与管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…