【【萌新的STM32的学习--非正点原子视频的中断设计思路】】

萌新的STM32学习–非正点原子视频的中断设计思路

在这里插入图片描述
我们分析而言

我们对于PA0 的设计就从此而来
对于边沿触发的选择我们已经有所了解了
我们下拉,但是当我们摁下开关的时候 从0到1 导通了 所以这个是下拉 上升沿触发

而对于KEY0 我们摁下是使得电路从原来悬空高阻态到地就是0 所以是下降沿触发
那么对于何种模式有很多人可能不理解
我们这么分析
在这里插入图片描述
这里在摁下前是什么我们不知道但是摁下了电流通过了从高到低 所以我们选择给PA0一个开始接入低 也就是下拉模式
在这里插入图片描述
而对于这个我们分析在摁下之后是不是要把1连接到低 那么对于原来的PE4 就是上拉模式 原来上拉到1 那么摁下就是从1到0 就是下降沿触发合情合理

关于代码部分我们的处理方式是这样的
因为我们用的是HAL库 所以怎么说呢
HAL库把很多功能集成封装起来了对我们设计都是颇有帮助的
我们在最先的使用中会先注意对外设进行初始化
因为很多都是建立在GPIO外设上的操作
ok第一步先对GPIO进行初始化
我们最先使用HAL_GPIO_Init
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
写是这么写的 一共分为了2部分
前面说的是GPIO_TypeDef *GPIOx
x就是表示我们可以在其中填入其他类型 比如说是GPIOA 等等 我们用到哪个就写入那个 不要管其他了 因为在HAL库的其他地方已经帮我们做完了基本的定义了 
第二个是GPIO_InitTypeDef GPIO_Init
这是一种关于GPIO_InitTypeDef 类型定义的
这个结构体包括了
typedef struct{
uint32_t Pin; /
引脚号 /
uint32_t Mode; /
模式设置 /
uint32_t Pull; /
上拉下拉设置 /
uint32_t Speed; /
速度设置 */} GPIO_InitTypeDef;
这是关于这个类型的叙述 我们就可以设置GPIO相应管脚的各项参数
这其实是基本的 他会把很多操作都封装起来 让你不直接接触寄存器而直接调用
其实我觉得正点原子在这方面既做的好又做的不好 课程之间并没有很爽快的那种完美连接 
就像是你之前介绍完寄存器 然后你实际用起来的时候还是把寄存器封装成一个个模块用的 那当然了我们直接用函数多方便 就是总感觉这其中差了点什么连接块 让人使用起来好不舒服 这是我的个人胡乱猜测

通过外部中断的方式让开发板上的三个独立按键控制 LED 灯:KEY_UP 控制 LED0 翻转,KEY1 控制 LED1 翻转,KEY0 控制 LED0 和 LED1 翻转。
在这里插入图片描述
在这里插入图片描述
分为红 蓝 黄 三根线
红色部分和 蓝色部分是我们 之前就已经实现过的
而对于黄色部分在此处是一种新的定义方式
目的是为了更好的连接EXTI为后续做准备
接下来展示的是exti.c
在这里插入图片描述
对于我们来说黄色的实现 是上面两次实验都有的
就是先把GPIO初始化再先设置
然后接下来的是新实现的两部分我们细致分析一下
HAL_NVIC_SetPriority(KEY0_INT_IRQn, 0, 2); /* 抢占 0,子优先级 2 /
HAL_NVIC_EnableIRQ(KEY0_INT_IRQn); /
使能中断线 4 /
HAL_NVIC_SetPriority(KEY1_INT_IRQn, 1, 2); /
抢占 1,子优先级 2 / HAL_NVIC_EnableIRQ(KEY1_INT_IRQn); / 使能中断线 3 / HAL_NVIC_SetPriority(WKUP_INT_IRQn, 3, 2); / 抢占 2,子优先级 2 / HAL_NVIC_EnableIRQ(WKUP_INT_IRQn); / 使能中断线 0 */
它可以分为2部分一部分是
HAL_NVIC_SetPriority
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority,uint32_t SubPriority);

这里可以分为三部分 第一部分是设置 中断号
第二部分是抢占优先级
第三部分是响应优先级
中断号是来自IRQn_Type 定义的枚举类型
我们之前在下面定义的IRQn 其实有这方面的考虑
还有一部分是
HAL_NVIC_EnableIRQ
中断使能函数
所以分析下来是这样的
在这里插入图片描述
在这里插入图片描述
void EXTI4_IRQHandler(); 这是中断服务函数
在这里插入图片描述
你会发现所有的各个部分写法都是这样,因为
所有的外部中断服务函数里都只调用了同样一个函数 HAL_GPIO_EXTI_IRQHandler,该函数是外部中断共用入口函数,函数内部会进行中断标志位清零,并且调用中断处理共用回调函数 HAL_GPIO_EXTI_Callback。
在他的内部会自动带上通用回调函数 所以我们不必去考虑到底何时何地才会写入这个回调函数
只要简单的记住 在中断服务函数内部只要写2个就可以了
另外再写的回调函数 会在我中断服务函数里面的第一条全世界公用的HAL_GPIO_EXTI_IRQHandler
内部会自行调用
我们在前面中断函数的处理过程中都调用了 HAL_GPIO_EXTI_IRQHandler()这个接口,它主要帮我们进行了寄存器操作,清除了中断事件,清除完中断源后,调用中断回调函数HAL_GPIO_EXTI_Callback,这个接口是一个__weak 的接口,我们通过重新实现这个函数来实现真正的外部中断控制逻辑。在该函数内部,通过判断 IO 引脚号来确定中断是来自哪个 IO 口,也就是哪个中断线,然后编写相应的控制逻辑。所以在该函数内部,我们通过 switch 语句判断IO 口来源,例如是来自 GPIO_PIN_0,那么一定是来自 PA0,因为中断线一次只能连接一个 IO口,而三个 IO 口中引脚号为 0 的 IO 口只有 PA0,所以中断线 0 一定是连接 PA0,也就是外部中断由 PA0 触发。其他的引脚号的逻辑类似。
还算可以接收的水平

所以通用步骤
其实学了很长时间的中断 甚至是寄存器的用法 哪一个都不如直接用HAL库来的实在
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

算法通关村第10关【黄金】| 归并排序

归并排序(Merge Sort)是一种常见的基于比较的排序算法,它的主要思想是分而治之(Divide and Conquer)。它的核心思想是将一个大的问题分解为小的子问题,解决子问题,然后将它们合并(me…

开启EMQX的SSL模式及SSL证书生成流程

生成证书 首先:需要安装Openssl 以下是openssl命令 生成CA证书 1.openssl genrsa -out rootCA.key 2048 2.openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -subj "/CCN/STShandong/Ljinan/Oyunding/OUplatform/CNrootCA" -out ro…

模型的保存加载、模型微调、GPU使用及Pytorch常见报错

序列化与反序列化 序列化就是说内存中的某一个对象保存到硬盘当中,以二进制序列的形式存储下来,这就是一个序列化的过程。 而反序列化,就是将硬盘中存储的二进制的数,反序列化到内存当中,得到一个相应的对象&#xff…

理解 std::thread::join

C多线程并发编程入门(目录) 本文用最简单易懂的实际案例,讲清楚了 join 的实际内涵,保证你过目不忘。 Hello join 示例 join 函数是我们接触C多线程 thread 遇到的第一个函数。 比如: int main() {thread t(f);t.…

哈希的应用——位图

文章目录 前言1. 面试题思考2. 位图2.1 位图的概念2.2 思路讲解及代码实现结构定义构造函数set和reset接口实现set和reset测试观察test接口实现test接口测试思考 3. 位图的应用习题1习题2习题3 4. 总结5. 源码5.1 bitset.h5.2 Test.c 前言 前面的文章里我们学习了哈希表&#x…

赞奇科技参与华为云828 B2B企业节,云工作站入选精选产品解决方案

8月27日,由华为云携手上万家伙伴共同发起的第二届 828 B2B 企业节拉开帷幕,围绕五大系列活动,为万千中小企业带来精细化商机对接。 聚焦行业数字化所需最优产品,举办超1000场供需对接会,遍及20多个省100多个城市&…

Python小知识 - 使用Python进行数据分析

使用Python进行数据分析 数据分析简介 数据分析,又称为信息分析,是指对数据进行综合处理、归纳提炼、概括总结的过程,是数据处理的第一步。 数据分析的目的是了解数据的内在规律,为数据挖掘,并应用于商业决策、科学研究…

运行速度高达1.8GHz可编程采集网关

今天介绍下BL304这个设备。嵌入式ARM控制器BL304系列是一款专为工业控制领域设计的坚固型工控设备。它采用NXP公司的处理器I.MX8M Mini四核64位处理器,搭配四核 Cortex-A53单核Cortex-M4构架,运行速度高达1.8GHz,具有高度的稳定性和可靠性。 …

从0到1学会Git(第二部分):Git的本地操作和管理

写在前面:本文介绍了在本地仓库进行文件的处理以及本地的合并等操作。 前置知识:文件可以处在三个区域,分别为工作区,暂存区和本地仓库,我们此文的目标即是将文件存储在本地仓库中。我们可以将文件的区域理解为,cpu中&#xff0c…

计算机视觉主要任务

计算机视觉:使用计算机及相关设备对生物视觉的一种模拟。 主要包含6大任务,图像分类,目标检测,目标跟踪,语义分割,实例分割,影像重构。 图像分类:根据图像信息中所反映的不同特征&am…

数据结构与算法复杂度介绍

目录 一、基本概念 二、时间复杂度 【2.1】时间复杂度概念 【2.2】大O的渐进表示法 【2.3】举例时间复杂度计算 三、空间复杂度 一、基本概念 数据结构:相互之间存在一种或者多种特定关系的数据元素的集合。在逻辑上可以分为线性结构,散列结构、树…

Redis List类型命令 - Set类型命令 - SortedSet类型命令

目录 List类型 什么是双向链表呢? List类型的特征: List的常用命令 LPUSH和RPUSH的区别: LPOP和RPOP的区别: LPUSH和RPUSH的使用 LPOP和RPOP的使用 LRANGE key star end:返回一段距离范围内所有的元素 BLPOP…

最小生成树Kruskal、Prim算法C++

什么是最小生成树 连通图: 在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1和顶点v2是连通的。如果图中任意一对顶点都是连通的,则称此图为连通图。 生成树: 一个连通图的最小连通子图称作为图的生成树。有n个顶点的…

Pytorch 的基本概念和使用场景介绍

文章目录 一、基本概念1. 张量(Tensor)2. 自动微分(Autograd)3. 计算图(Computation Graph)4. 动态计算图(Dynamic Computation Graph)5. 变量(Variable) 二、…

【用unity实现100个游戏之8】用Unity制作一个炸弹人游戏

文章目录 前言素材开始一、绘制地图二、玩家设置三、玩家移动四、玩家四方向动画运动切换 五、放置炸弹六、生成爆炸效果七、墙壁和可破坏障碍物的判断八、道具生成和效果九、玩家死亡十、简单的敌人AI十一、简单敌人AI十二、随机绘制地图十三、虚拟摇杆 最终效果待续源码完结 …

2023年行研行业研究报告

第一章 行业概述 1.1 行研行业 行业定义为同一类别的经济活动,这涉及生产相似产品、应用相同生产工艺或提供同类服务的集合,如食品饮料行业、服饰行业、机械制造行业、金融服务行业和移动互联网行业等。 为满足全球金融业的需求,1999年8月…

Linux之autofs自动挂载服务

目录 Linux之autofs自动挂载服务 产生原因 安装 配置文件分析 文件路径 作用 etc/auto.master文件内容格式 挂载参数 案例 案例1 --- 服务器创建共享目录,客户端实现自动挂载 案例2 --- 自动挂载光盘 Linux之autofs自动挂载服务 产生原因 在一般NFS文件系…

$attrs,$listeners

vue实现组件通信的方式有: 父子通信 父组件向子组件传递通过props定义各个属性来传递,子组件向父组件传递通过$emit触发事件 ref也可以访问组件实例跨级通信 vuex bus provide / inject $attrs / $listeners解释 $attrs / $listeners $attrs 将父组件中…

服务端请求伪造(SSRF)及漏洞复现

文章目录 渗透测试漏洞原理服务端请求伪造1. SSRF 概述1.1 SSRF 场景1.1.1 PHP 实现 1.2 SSRF 原理1.3 SSRF 危害 2. SSRF 攻防2.1 SSRF 利用2.1.1 文件访问2.1.2 端口扫描2.1.3 读取本地文件2.1.4 内网应用指纹识别2.1.5 攻击内网Web应用 2.2 SSRF 经典案例2.2.1 访问页面2.2.…