当前位置: 首页> 科技> 能源 > 建e网全景图_河南项目信息网_北京快速优化排名_百度网站链接

建e网全景图_河南项目信息网_北京快速优化排名_百度网站链接

时间:2025/7/11 8:20:07来源:https://blog.csdn.net/qq_44764442/article/details/146980798 浏览次数:0次
建e网全景图_河南项目信息网_北京快速优化排名_百度网站链接

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!

本文写于:2025.04.03

STM32开发板学习——第11节: [5-1] EXTI外部中断

  • 前言
  • 开发板说明
  • 引用
  • 解答和科普
  • 一、外部中断
  • 二、硬件介绍
  • 问题
  • 总结

前言

   本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始32单片机的学习之路。
   欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习32单片机了,就跟着B站上的江协科技开始学习了.
   在这里会记录下江协科技32单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
   另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!

开发板说明

   本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。另外我也购买了江科大的学习套间。
   原理图如下
1、开发板原理图
在这里插入图片描述
2、STM32F103C6和51对比
在这里插入图片描述
3、STM32F103C6核心板
在这里插入图片描述

视频中的都用这个开发板来实现,如果有资源就利用起来。另外也计划实现江协科技的套件。

下图是实物图
在这里插入图片描述

引用

【STM32入门教程-2023版 细致讲解 中文字幕】
还参考了下图中的书籍:
STM32库开发实战指南:基于STM32F103(第2版)
在这里插入图片描述
数据手册

相关的博客

解答和科普

一、外部中断

在这里插入图片描述
中断就是正常主程序执行的某个时刻,发生了中断触发条件,比如对外部中断来说,可以是引脚发生了电平跳变,对于定时器来说,可以是定时的时间到了,对于串口通信来说,可以是接收到了数据,当这些事件发生时,情况会比较紧急。所以我们希望当中断条件满足时,CPU能够立即停下当前执行的程序,转而去处理这些中断事件的程序。处理完之后返回原来被暂停的位置继续运行。

在这里插入图片描述
中断来了。主程序都得立即暂停。程序由硬件电路自动跳转到中断程序中。
当这个中断在执行时。叉有新的优先级更高的中断来,那这里就会再次打断。然后执行新的中断,新的中断结束。再继续原来的中断。

c语言中,中断的执行流程如下。上面是主函数,while(1)死循环里就是主程序,正常情况下,程序就是在主程序中不断循环执行,当中断条件满足时,主程序就会暂停,然后自动跳转到中断程序里运行,中断程序执行完之后,再返回主程序执行。一般中断程序都是在一个子函数里,这个函数不需要我们调用,当中断来临时,由硬件自动调用这个函数,这就是在c语言中,中断的执行流程。
在这里插入图片描述
多个可屏蔽中断通道(中断源),包含EXTI(外部中断)、TIM、ADC(模数转换器)、USART(串口)、SPI、I2C、RTC(实时时钟)等多个外设。(几乎所有模块都能申请中断)

使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级。

NVIC就是STM32中用来管理中断、分配优先级的,NVIC的中断优先级共有16个等级。还可以设置抢占优先级和响应优先级,这个是非常灵活的。

图为stm32的中断资源,上面灰色的是内核中断,比较高深,也很难理解,我们一般用不到,了解一下即可。
在这里插入图片描述

下面不是灰色的部分就是stm32外设的中断了,比如第一个,窗口看门狗,这个是用来监测程序运行状态的中断,比如你程序卡死了,没有及时喂狗,窗口看门狗就会申请中断,让你的程序跳到窗口看门狗的中断程序里,你在中断程序就可以进行一些错误检查,看看出什么问题了;
PVD电源电压监测,如果你供电电压不足,PVD电路就会申请中断,你在中断里就知道现在供电不足,是不是电池没电了,要赶紧保存一下重要数据;
外设电路检测到有什么异常或事件,需要提示一下CPU的时候,它就可以申请中断,让程序调到对应的中断函数里运行一次,用来处理这个异常或事件。
EXTI0-EXTI4 和EXTI5-EXTI_10都是外部中断对应的中断源

图中最右边是中断的地址,因为程序中的中断函数,它的地址是由编译器来分配的,是不固定的,但是我们的中断跳转,由于硬件的限制,只能跳到固定的地址执行程序,所以为了硬件能够跳转到一个不固定的中断函数里,这里就需要在内存中定义一个地址的列表,这个列表的地址是固定的,中断发生后,就跳到这个固定位置,然后在这个固定位置,由编译器,再加上一个跳转到中断函数的代码,这样中断跳转就可以跳转到任意位置了,这个中断地址的列表,就叫中断向量表,相当于中断跳转的一个跳板,不过我们用c编程,是不需要管这个中断向量表的,因为编译器都帮我们做好了。
在这里插入图片描述

在这里插入图片描述
NVIC(嵌套中断向量控制器),在STM32中,它是用来统一分配中断优先级和管理中断的,NVIC是一个内核外设,是CPU的小助手(STM32中断非常多,如果把中断全接到CPU上,会很麻烦,毕竟CPU主要是用来运算的,中断分配就放到别的地方),所以NVIC就出现了,NVIC有很多输入口,图中线上划了个斜杠上面写了n(这个意思是:一个外设可能会同时占用多个中断通道,所以这里有n条线),然后NVIC只有一个输出口,NVIC根据每个中断的优先级分配中断的先后顺序,之后通过右边这一输出口就告诉CPU该处理哪个中断,对于中断先后顺序分配的任务,CPU不需要知道

举个例子:比如CPU是医生,如果医院只有一个医生时,当看病人很多时,医生就得先安排一下先看谁后看谁,如果有紧急的病人,那还得让紧急的病人最先来,这个安排先后顺序的任务很繁琐会影响医生看病的效率,所以医院就安排了一个叫号系统(NVIC),来病人了统一取号并且根据病人的等级,分配一个优先级,然后叫号系统看一下现在在排队的病人,优先叫号紧急的病人,最后叫号系统给医生输出的就是一个一个排好队的病人,医生就可以专心看病了。
在这里插入图片描述
为了处理不同形式的优先级,STM32的NVIC可以对优先级进行分组,分为抢占式优先级和响应优先级:
抢占优先级和响应优先级的区别,例子:还想一下病人叫号的例子,对于紧急的病人,其实有两种形式的优先。一种是,上一个病人1在看病,外面排队了很多病人,当病人1看完后,外面排队中的紧急病人最先进去看病即使这个紧急病人是最后来的,这种在排队中的插队的就叫响应优先级,响应优先级高的可以插队提前看病。另一种是,上一个病人1在看病,外面排队中的病人2比病人1更加紧急,病人2可以不等病人1看完直接冲到医生的屋里,让病人1先靠边站,先给病人2看病,病人2看完病接着病人1看病,然后外面排队的病人再进来,这种形式的优先级就是中断嵌套,这种决定是不是可以中断嵌套的优先级,就叫抢占优先级,抢占优先级高的,可以进行中断嵌套。

==插队式优先级:响应优先级,==可以插队提前看病。
抢占式优先级: 直接冲到医生的屋里。让上一个病人先靠边站

为了将优先级区分为抢占优先级和响应优先级,就需要对这16个优先级优先级进行分组,NVIC的中断优先级由优先级寄存器的4位(0~15,4位二进制,对应16个优先级)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级优先级的数值越小,优先级越高,0就是最高优先级 ;然后呢这4位可以进行切分,分为高N位的抢占优先级和低4-n位的响应优先级。
抢占式优先级高的可以中断嵌套,响应优先级高的可以优先排队,然后还有,抢占优先级和响应优先级均相同的按中断号排队,这个中断号就是表里的数字,当抢占优先级和响应优先级均相同时按照这个数字来排队,数值小的优先响应,所以STM32的中断不存在先来后到的排队方式。在任何时候都是优先级高的先响应。

在这里插入图片描述
因为优先级总共是4位,所以就有(0,4)、(1,3)、(2,2)、(3,1)、(4,0),这5种分组方式,分组0的就是0位的抢占等级,取值只能为0,4位的响应等级,取值可以是0-15;分组1是1位的抢占等级,取值是0~1,3位的响应等级(取值是0-7);这个分组方式在程序中是我们自己来选择的,选好分组方式后,我们在配置优先级的时候,就要注意抢占优先级和响应优先级的取值范围,不要超出这个表里规定的取值范围。
在这里插入图片描述
了解完NVIC这个叫号系统和叫号的规则,就来看一下第一个病人——EXTI外部中断

在这里插入图片描述
简单来说,就是引脚电平变化,申请中断;
软件触发,就是引脚啥事没有,程序里执行一句代码,就能触发中断,
所有GPIO口但相同的Pin不能同时触发中断:比如PA0和PB0不能同时用,只能选一个作为中断引脚,所以如果有多个中断引脚,要选择不同Pin的引脚。
因为这个外部中断有个功能。就是从低功耗模式的停韭模武下唤醒STM32,那对于PVD电源电压监测。当从电原从电压过低诙复时,就需要PVD借助一下跳部中断退出停止模武。
对于RT闹钟来说。有时候为了省电。RT定一个闹钟之后,STM3B2会进入停止模武。等到闹钟响的时候再唤醒。这也需要借助外部中断。

==当外部中断检测到引脚电平变化时。正常的流程是选择触发中断,但是在STM32中。也可以选择触发一个事件,如果选择触发事件。那外部中断的信号就不会通向CPU了, 而是通向其它外设。==用来触发其它外设的操作, 比如触发ADC转换触发DMA等
中断响应是正常的流程。引脚电平变化触发中断, 事件响应不会触发中断。而是触发别的外设操作。属于外设之间的联合工作.

在这里插入图片描述
首先最左边,是GPIO口的外设,比如GPIOA、GPIOB、GPIOC等,每个GPIO外设有16个引脚,所以进来16根线,EXTI模块只有16个GPIO的通道,但这里每个GPIO外设都有16个引脚,如果每个引脚占用一个通道,那EXTI的16个通道显然就不够用了,所以在这里,会有一个AFIO中断引脚选择的电路模块,这个AFIO就是一个数据选择器,它可以在这前面3个GPIO外设的16个引脚里选择其中一个连接到后面EXTI的通道里,
所以相同的Pin不能同时触发中断,只有一个能接上通道。这就是所有GPIO口都能触发中断。但相同的Pin不能同时触发中断的原因。想用pin直接全部选吧应该也就是只有16个通道,意思是应该全选了,每个都能触发,但是相同Pin不能同时触发。

然后通过AFIO选择之后的16个通道,就接到了EXTI边沿检测及控制电路上,同时下面这4个蹭网的外设也是并列接进来的,这些加起来就组成了EXTI的20个输入信号,然后经过EXTI电路之后,分为了两种输出;
其中,上面的接到了NVIC,是用来触发中断的,本来有20路输入,应该有20路输出,但是可能ST公司觉得这20个输出太多了,比较占用NVIC的通道资源,所以就把外部中断9~5,和15 ~ 10,给分到一个通道里,也就是说,外部中断9 ~5 会触发同一个中断函数, 15 ~10也会触发同一个中断函数 ,在编程的时候,我们在这两个中断函数里,需要再根据标志位区分到底是哪个中断进来的
下面这里有20条通道接到了其他外设,这就是用来触发其他外设操作的,也就是刚才说的事件响应。
在这里插入图片描述
复用功能重映射
在这里插入图片描述
就是用AFIO来完成的,这也是AFIO的一大主要功能,然后是中断引脚选择

中断引脚选择
在这里插入图片描述
在这里插入图片描述

二、硬件介绍

到低什么样的设备需要用到外部中断呢,使用外部中断有什么好处呢?

就是对于STM32来说,想要获取的信号是外部驱动的很快的突发信号:比如旋转编码器的输出信号,我可能很久都不会拧它,这时不需要STM32做任何事情,但是我一拧它,就会有很多脉冲波形需要STM32接受,这个信号是突发的,STM32不知道什么时候会来,同时它是外部驱动的,STM32只能被动读取,最后这个信号非常快,STM32稍微晚一点,就会错过很多波形,所以对于这种情况来说,就可以考虑使用STM32的外部中断了。比如红外遥控接收头,按键(不推荐因为抖动和松手检测)可以用定时器读取。
在这里插入图片描述
1、使用的也是对射式红外传感器来测速的,为了测速,还需呀配合一个光栅编码盘,当这个编码盘转动时,红外传感器的红外光就会出现遮挡、透过、遮挡、透过这样的现象,对应模块输出的电平就是高低电平交替的方波,这个方波的个数表示了转过的角度,方波的频率表示转速,那我们就可以用外部中断来捕获这个方波的边沿,依次判断位置和速度,这个模块只有一路输出,正转反转输出波形没法区分,所以这种方法只能测量位置和速度,不能测量旋转方向。
在这里插入图片描述
2、旋转编码器:产生一个90°的相位差。
正转

在这里插入图片描述
反转
在这里插入图片描述
带正交波形信号输出的编码器。是可以用来测方向的
因为它是触点接触的形武。所以以不适合电机这种高速旋转的地方,比如音响的调节。

3、霍尔传感器。
4、独立的编码器模块。
在这里插入图片描述
旋转轴旋转时。这两个触点以相俭相差90度的方式交替导通,因为这只是个开关信号。就以要配合外围电路才能输出高低电平,左边接了一个10K的上拉电阻,默认没旋转的情况下,这个点为上拉为高电平,通过R3这个电阻输出到A端口的就也是高电平,当旋转时。内部这里触点导通,那这个点就直接被拉低到GND了,再通过R3输出,A端口就是低电平了,还有限流电阻,和滤波电容。

NVIC是内核外设,所以在Cortex-M3编程手册里面找,
在这里插入图片描述

问题

1、感觉很复杂,有点难以理清楚。

总结

本节课主要是了解这中断系统,最主要学了外部中断,知道了中断的分组,优先级。NVIC来管理中断,而不是CPU来管理,最后向CPU申请中断就行了;还学了NVIC的优先级和中断分配,还有EXTI的基本结构,和AFIO来控制引脚,使得虽然每个GPIO都能触发外部中断,但是Pin相同的不能同时使用,最后的流程:经过输入进入边缘检测电路,上升沿和下降沿和都有触发器控制,和软件中断响或,最后通过后进行请求挂起(相当于标志位),然后经过中断屏蔽与后进入NVIC中断控制器,进而向CPU申请是否触发中断,还有一路信号是走向了事件,不触发中断,而是直接进入外设,进行直接的交互。

关键字:建e网全景图_河南项目信息网_北京快速优化排名_百度网站链接

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: