自适应网站模板,做问卷给钱的网站,黄骅贴吧新闻,ps为什么做不了视频网站STM32EXIT外部中断中断系统 中断系统中断触发条件#xff1a;中断处理流程和用途#xff1a; STM32中断NVIC嵌套中断向量控制器基本结构NVIC基本结构NVIC优先级分组EXTI简介EXTI基本结构AFIO复用IO口EXTI内部框图旋转编码器简介硬件电路外设手册里的介绍NVIC中断使能寄存… STM32EXIT外部中断中断系统 中断系统中断触发条件中断处理流程和用途 STM32中断NVIC嵌套中断向量控制器基本结构NVIC基本结构NVIC优先级分组EXTI简介EXTI基本结构AFIO复用IO口EXTI内部框图旋转编码器简介硬件电路外设手册里的介绍NVIC中断使能寄存器中断清除使能寄存器中断设置挂起寄存器中断清除挂起寄存器中断活动位寄存器中断优先级寄存器软件触发中断寄存器中断分组的配置 参考手册和数据手册 对射红外传感器计次 旋转编码器计次 中断系统 中断触发条件
对外部中断来说可以是引脚发生了电平跳变 对定时器来说可以是定时的时间到了 对串口通信来说可以是接收到了数据 当这些事件发生时情况比较紧急比如外部中断来了如果不处理下一个跳变信号就跟着过来了。 比如串口接收中断来了如果不读取接收到的数据那下一个数据再过来就会把原来的数据覆盖掉。 所以希望当中断条件满足时CPU能够立即停下当前执行的程序转而去处理中断事件的程序。
中断处理流程和用途
比如外部中断来了需要计次那就变量串口中断来了就把接收到的数据转存起来处理完紧急事情后CPU回到原来程序运行的位置。 使用中断系统能极大地提高程序的效率如果没有中断系统为了防止外部中断被忽略或者串口数据被覆盖那主程序就只能不断地查询是否有这些事件发生不能在干其他的事情。 如果没有定时器中断那主函数就只有靠Delay函数才能实现定时的功能。有了中断系统之后主程序就可以放心执行其他事情有中断的时候再去处理。大大提升效率。
中断优先级是根据程序设计的需求自己设置的。紧急的事情优先级要设置地高一点这样可以更好地安排中断事件防止紧急的事件被别的中断耽误。
中断嵌套也是为了照顾非常紧急的中断的能否进行中断嵌套由中断优先级来决定。 中断来了主程序都得立即暂停程序由硬件电路自动跳转到中断程序中。 中断执行前进行现场保护 中断执行后会再还原现场。保证主程序即使被中断了回来后也能继续运行。 用C语言编程保护现场和还原现场并不需要我们操作操作系统里面有中断的概念由编译器做好。
C语言程序中中断的执行流程 一般中断程序都是在一个子函数里面这个函数不需要我们调用当中断来临时由硬件自动调用这个函数。
STM32中断 中断通道就是中断源的意思68个是F1系列最多的中断数量对于一个具体的型号来说可能没有这么多中断所以这个数量看看就行具体以对应型号的数据手册为准。 STM32的中断非常多几乎所有模块都能申请中断
NVIC就是STM32中用来管理中断分配优先级的。 灰色的部分是内核的中断 1.Reset复位中断 当产生复位事件时程序就会自动执行复位中断函数也就是复位后程序开始执行的位置 2.后面的各种灰色的中断都是内核里面的一般比较高深看上去也难理解但是这些中断我们一般用不到所以了解一下即可
不是灰色的部分的就是STM32外设的中断了。 比如 WWDG 窗口看门狗用来监测程序运行状态的中断比如程序卡死了没有及时喂狗窗口看门狗就会申请中断程序就会调到窗口看门狗的中断程序里在中断程序里就可以进行一些错误检查看看出现什么问题了。 PVD 电源电压监测如果供电电压不足PVD电路就会申请中断在中断里就知道现在供电不足是不是电池没电了要赶紧保存一下重要数据。 TAMPER 外设电路检测到异常或者什么事件需要提示CPU的时候就可以申请中断让程序调到对应的中断函数里运行用来处理异常或事件 EXTI0-EXTI4EXTI9_5-EXTI15_10就是本节外部中断对应的中断资源。
中断的地址的作用因为程序中的中断函数它的地址由编译器分配的是不固定的。但是中断的跳转由于硬件限制只能跳转到固定的地址执行程序所以为了能让硬件跳转到一个不固定的中断函数里面就需要在内存中定义一个地址的列表。这个列表地址固定中断发生后就跳到这个固定位置。然后有编译器再加上一条跳转到中断函数的代码这样中断函数就可以跳转到任意位置了。 中断地址的列表叫做中断向量表相当于中断跳转的一个跳板。不过C语言编程不需要管这个中断向量表因为编译器帮我们做好了 NVIC嵌套中断向量控制器基本结构
NVIC基本结构 在STM32中NVIC用来统一分配中断优先级和管理中断的NVIC是一个内核外设是CPU的小助手。 STM32中断非常多如果把中断都接到CPU上那么CPU得引出很多线进行适配设计上就很麻烦并且很多中断同时申请或者中断很多产生了拥堵CPU就很难处理毕竟CPU主要用来做运算的。所以中断分配的任务就放到别的地方。所以NVIC就出现了。 NVIC有很多输入口有多少个中断线路都可以接过来。这里斜杠上写个n,意思是一个外设可能会同时占用多个中断通道所以有n条线NVIC只有一个输出口NVIC根据每个中断的优先级分配中断的先后顺序通过一个出口告诉CPU该处理哪个中断对于中断先后顺序分配的任务CPU不需要知道
NVIC优先级分组 所以STM32中不存在先来后到的排队规则抢占优先级相应优先级中断号排队
分组方式在程序中是我们来自己选择的选好分组方式后配置优先级时要注意抢占优先级和响应优先级的取值范围不要超出表中规定的取值范围。
EXTI简介 简单来说就是引脚电平变化申请中断 上升沿电平从低电平变到高电平的瞬间触发中断 下降沿电平从高电平变到低电平的瞬间触发中断 双边沿上升沿和下降沿都可以触发中断 软件触发引脚啥事没有程序里执行依据代码就能触发中断
任意的GPIO口都可以当做外部中断的引脚相同PIN不能同时触发意味着PA0和PB0这种GPIO_Pin一样的不能同时用只能选一个。如果有多个中断引脚要选择不同的Pin的引脚。 通道数16个GPIO_Pin 对应着GPIO_Pin0-15加上外加的总共20个中断线路16个GPIO_Pin是外部中断的主要功能跟着的4个是来蹭网的。 蹭网原因外部中断有一个功能从低功耗模式的停止模式下唤醒STM32。 对于PVD电源电压监测当电源从过低恢复时就需要PVD借助外部中断推出停止模式。 对于RTC闹钟来说有时为了省电RTC定一个闹钟之后STM32会进入停止模式等到闹钟响的时候再唤醒这也需要借助外部中断。 USB唤醒和以太网唤醒也是类似作用。 但本节主要学习引脚的外部中断这4个蹭网先了解一下即可。
中断响应申请中断让CPU执行中断函数 事件响应其实是STM32对外部中断增加的一种额外的功能当外部中断检测到引脚电平变化时正常的流程是选择触发中断但在STM32中也可以选择触发一个事件如果选择触发事件那外部中断的信号就不会通向CPU了而是通向其他外设用来触发其他外设的操作比如触发ADC转换触发DMA等。 总结中断响应是正常流程引脚电平变化触发中断 事件响应不会触发中断而是触发别的外设操作属于外设之间的联合工作。
EXTI基本结构 每个GPIO外设有16个引脚所以进来16根线前面讲过EXTI只有16个GPIO的通道如果每个外设的每个引脚都占用一个那么EXTI的16个就不够用所以有一个AFIO中断引脚选择的电路模块AFIO就是一个数据选择器它可以在前面3个GPIO外设的16个引脚里选择其中一个连接到后面的EXTI通道里所以前面说相同的Pin不能同时触发中断因为对于PA0、PB0、PC0这些同多AFIO选择之后只有其中一个能接到EXTI的通道0上。 通过AFIO选择之后的16个通道就接到了EXTI边沿检测及控制电路上了同时4个蹭网的外设也并联进来了加起来组成了EXTI的20个输入信号经过EXTI电路后。 分为了两种输出 上面的接到了NVIC是用来触发中断的。本来20路输入应该有20路输出的但可能ST公司觉得20个输出太多了比较占用NVIC通道资源所以把其中外部中断的9-5触发同一个中断函数,15-10给分到一个通道里触发同一个中断函数在编程时在这两个中断函数里需要再根据标志位来区分到底是哪个中断进来的。 下面的20条接到其他外设使用来触发其他外设操作的也就是事件响应
AFIO复用IO口
AFIO主要用于引脚复用功能的选择和重定义数据选择器的作用 在STM32中AFIO主要完成两个任务复用功能引脚重映射对应引脚定义表当想把默认复用功能的引脚换到重定义的位置来就用AFIO来完成这也是一大主要功能、中断引脚选择
AFIO选择中断引脚的结构图 一系列的数据选择器比如第一个输入PA0-PG0尾号都为0通过数据选择器最终选择一个接到EXTI0上在AFIO_EXTICR1配置这个寄存器的EXTI[3:0]位就可以决定选择哪一输入。
EXTI内部框图 EXTI的右边是20根输入线输入线首先进入边沿检测电路在上升沿触发选择寄存器和下降沿触发选择寄存器可以选择触发方式接着触发信号进入或门的输入端数据选择器的符号是梯形有多个输入一个输出侧面有选择控制端根据控制端的数据从输入选择一个接到输出 硬件触发或者软件中断寄存器的值接到了或门上也就是任意一个为1或门就可以输出1所以说支持的方式是上升沿、下降沿、双边沿和软件触发。 触发信号通过或门后分为两路上一路触发中断下一路触发事件 触发中断首先会置一个请求1挂起寄存器这相当于一个中断标志位我们可以读取这个寄存器判断是哪个通道触发的中断如果请求挂起寄存器置1他就会继续往前走和中断屏蔽寄存器共同进入一个与门然后是NVIC中断控制器这里的与门充当开关的作用哦中断屏蔽寄存器给1就是允许输出给0就是屏蔽中断 下一路也是一个事件屏蔽寄存器进行开关控制最后通过一个脉冲发生器到其他外设脉冲发生器就是给一个电平脉冲用来触发其他外设的动作。 上面就是外设接口和APB总线可以通过总线访问这些寄存器
使用外部中断模块的特性 对于STM32来说想要获取的信号时外部驱动的很快的突变信号比如旋转编码器的输出信号可能很久都不会拧它这时不需要STM32做任何事情但是一拧它就会有很多脉冲波形需要STM32接收这个信号时突发的STM32不知道什么时候会来。同时是外部驱动STM32只能被动读取同时信号很快STM32稍微晚一点读取就会错过很多波形所以这种情况就可以考虑使用外部中断。有脉冲过来STM32立即进入中断函数处理没有脉冲的时候STM32就专心做其他事情 红外遥控接收头的输出接收到遥控数据后会输出一段波形需要立即处理防止转瞬即逝需要外部中断来读取 按键虽然它的动作是外部驱动的突发事件但是不推荐外部中断来读取按键因为外部中断不好处理按键抖动和松手检测的问题对于按键来说它的输出波形也不是短暂的所以要求不高时可以在主程序循环读取。如果不想用主函数读取可以考虑用定时器中断读取的方式。这样就可以做到后台读取按键值不阻塞主程序也可以很好地处理按键抖动和松手检测的问题。
旋转编码器简介 第一个编码器 是一种最简单的编码器样式使用对射式红外传感器来测速为了测速需要配合一个光栅编码盘当编码盘转动时红外传感器的红外光就会出现遮挡、透过、遮挡、透过的现象对应模块输出的电平就是高低电平交替的方波方波个数代表转过的角度方波频率代表转速。那就可以用外部中断来捕获这个方波的边沿以此判断位置和速度不过模块只有一路输出正转反转没法区分无法测量旋转方向
第二个编码器 左边是外观右边是拆解结构 内部用金属触点来进行通断所以是一种机械触点式编码器 左右是两部分开关触点内侧两根细的触点都是和中间的引脚连接外侧的触点左边接在左边引脚右边接在右边引脚中间圆的金属片是一个按键旋转编码器的轴是可以按下去的按键的两根线在上面引出来了按键的轴按下上面的两根线短路松手上面的两根线断开就是个普通按键。编码盘也是一系列像光栅一样的东西只不过是金属触点旋转时依次接通和断开两边的触点并且还有一个关键部分是金属盘的位置经过了设计能让两侧触点的通断产生一个90°的相位差最终配合外部电路编码器的两个输出就会输出这样的波形。相位相差90°的波形叫正交波形带正交波形信号输出的编码器是可以测方向的。单相输出和两相正交输出的区别。还有的编码器不是输出正交波形而是一个输出方波信号代表转速一个输出高低电平代表旋转方向
第三个编码器
直接附在电极后面的编码器霍尔传感器形式的编码器中间是一个圆形磁铁边上有两个位置错开的霍尔传感器当磁铁旋转时通过霍尔传感器就可以输出正交的方波信号
第四个编码器 独立的编码器器件元件了输入轴转动时输出就会有波形也可以测速和测方向具体用法再看相应的手册。
第二种是一般用来调节比如音响调节音量因为是触点接触的形式所以不适合电极这种高速旋转的地方 另外几种都是非接触的形式可以用于电机测速电机测速在电机驱动的应用中还是比较常见。
先学外部中断读取编码器计次数据的用法学习定时器之后再看一下编码器测速的用途。
硬件电路 中间的框是旋转编码器上面按键的两根线模块并没有使用是悬空的 下面是编码器内部的两个触点旋转轴旋转时这两个触点以相位相差90°的方式交替导通因为这还只是开关信号要配合外围电路才能输出高低电平 R3位输出限流电阻防止模块引脚电流过大的。
右边是使用这个模块的接线图VCC和GND接电源A相输出和B相输出接到STM32的两个引脚上比如Pin0口和Pin1口但是别相同C引脚GND暂时用不到
外设手册里的介绍
NVIC
因为是内核外设所以的得在Cortex-M3编程手册里找Cortex-M3编程手册是内核和内核外设的详细介绍研究内核的转运细节可以研究这个手册中文版本会更加友好 有NVIC的说明
NVIC的一些寄存器包括
中断使能寄存器 中断清除使能寄存器 中断设置挂起寄存器 中断清除挂起寄存器 中断活动位寄存器 中断优先级寄存器
用来设置中断的优先级的 如果直接配置寄存器设置优先级的话那还是比较复杂的。不过直接用库函数的话就直接给结构体赋值就可以了所以此处寄存器大致看一下就OK了。
软件触发中断寄存器 之后还有中断执行细节的描述
中断分组的配置
此手册中NVIC还少了一个东西就是中断分组的配置。 中断分组的配置在SCB_AIRCR里同时寄存器的Prigoup的这三位就是用来配置中断分组的 中断分组的描述 等后期学习差不多了需要再详细了解内核是怎么运转的先学会怎么用。
参考手册和数据手册
STM32的参考手册和数据手册同样也很重要
中断的这个部分实际上是AFIO里面的 对AFIO的描述只有这一句话就是复用功能引脚重映射的意思下面全是重映射的表通过配置寄存器就可以在映射关系表里面切换了