在线购物网站,网站单页,新产品推广策划方案,桂林北站附近的景点案例代码及相关资料下载链接#xff1a; 链接#xff1a;https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwdjauj  
提取码#xff1a;jauj   
1 中断系统 
1.1  中断的概念 
中断系统的定义#xff1a;中断是指在主程序运行过程中#xff0c;出现了特定的中断触发条件…案例代码及相关资料下载链接 链接https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwdjauj  
提取码jauj   
1 中断系统 
1.1  中断的概念 
中断系统的定义中断是指在主程序运行过程中出现了特定的中断触发条件中断源使得CPU暂停当前正在运行的程序转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行。 
通俗来讲中断就是主程序在正常运行时出现了中断触发条件而中断触发的条件有很多对于外部中断来讲可能是引脚的电平发生变化对于定时器来讲可能是定时的时间到了对于串口通信来讲可能是接收到了数据当以上事件发生时程序的执行就会从主程序中跳到中断程序中来执行中断程序直到中断程序执行完成之后才会重新执行主程序。而使用中断系统最大的作用就是能够极大的提升程序的运行效率。 
中断优先级中断优先级建立在有多个中断源的时候当有多个中断源出现时CPU就要考虑率先执行哪个中断中断就像做一件事的轻重比例当有很多事情堆到眼前时候通常先做情况最紧急的再做稍次一点的这样就会给中断确立执行的先后顺序而多个中断的执行顺序的先后就被叫做中断优先级。 
中断嵌套当一个中断程序正在运行时又有新的更高优先级的中断源申请中断CPU再次暂停当前中断程序转而去处理新的中断程序处理完成后依次进行返回而中断嵌套的执行通常是由中断优先级来确定的。中断嵌套可以理解将一堆要做的事慢慢一个一个抛给你而你要根据每个事情的紧急程度来决定在已经有的事情里先做哪一个。 
中断执行的流程如下图所示 在我们学习的STM32 中有68个可屏蔽中断通道中断源包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设68个中断源是F1系列中最多的而对于某个具体型号可能并没有这么多所以中断源的数量以单片机的数据手册为准这些中断源都使用NVIC统一管理中断每个中断通道都拥有16个可编程的优先等级可对优先级进行分组进一步设置抢占优先级和响应优先级。具体中断源如下表所示灰色部分为内核中断不是灰色部分的为STM32的外设中断具体图标手册中有 NVIC结构 
基本结构图如下图所示 NVIC的全称是Nested vectoredinterrupt controller即嵌套向量中断控制器在STM32中NVIC用来统一分配中断优先级和管理中断的他是单片机内核外设是用来帮助CPU处理中断分配和配置中断优先级的地方为了让CPU高速运行因为NVIC有多个输入口所以能将单片机的外设中断都来接到NVIC上而NVIC只有一个输出口这样就能通过对中断优先级的设置来输出中断优先级高的然后交给CPU让CPU优先执行中断优先级高的程序这就是NVIC的基本作用。 
NVIC优先级分组 
为了处理不同形式的优先级NVIC会有优先级进行分组而NVIC的中断优先级由优先级寄存器的4位0~15决定这4位可以进行切分分为高n位的抢占优先级和低4-n位的响应优先级其属性编号越小表明它的优先级别越高。抢占优先级是指打断其他中断的属性即因为具有这个属性会出现嵌套中断在执行中断服务函数A 的过程中被中断B 打断执行完中断服务函数B 再继续执行中断服务函数A抢占属性由NVIC 的参数配置。而响应属性则应用在抢占属性相同的情况下当两个中断向量的抢占优先级相同时如果两个中断同时到达 则先处理响应优先级高的中断抢占优先级和响应优先级均相同的按中断号排队,数字小的先响应。中断号是指上图中优先级的序号 优先级的分组方式如下图所示 注意在配置好NVIC的分组方式之后配置优先级时取值不能超过对应NVIC分组的取值范围。 
1.2  外部中断的简介与配置 
外部中断简介 
EXTIExtern Interrupt外部中断EXTI可以监测指定GPIO口的电平信号当其指定的GPIO口产生电平变化时EXTI将立即向NVIC发出中断申请经过NVIC裁决后即可中断CPU主程序使CPU执行EXTI对应的中断程序。 
其触发方式有上升沿下降沿双边沿软件触发四种。EXTI支持所有的GPIO口都可以触发中断但是相同的Pin_不可以同时触发中断例如PA1与PB1不能同时触发中断。EXTI有20个通道数说明EXTI可以有20个中断源其中包括16个GPIO_Pin外加PVD输出、RTC闹钟、USB唤醒、以太网唤 
醒而EXTI响应方式有中断响应申请中断让CPU执行中断函数事件响应中断响应时外部中断信号不会传向CPU而是给到单片机外设让单片机外设响应一个事件。 
外部中断的基本结构 
结构图如下图所示 最左边是GPIO口的外设由于每个GPIO都有16个通道当每个GPIO的引脚都占用一个那么EXTI的通道就会不够用为了让相同的Pin_不同时触发中断所以就有AFIO用来进行中断引脚的选择相当于一个数据选择器他可以从前面N个GPIO的16个引脚中选择其中一个接到后面的EXTI通道里面所以就会有上面说的相同的Pin_不可以同时触发中断因为对于相同的Pin_在经过AFIO之后只会有一个Pin_接到后面的EXTI通道上例如PA0PB0PC0PD0只有一个Pin_0可以接到EXTI的通道0上。而以上GPIO引脚通过EXTI上之后就会分为两种输出一种接到NVIC上一种接到单片机外设上也是对应的事件响应这里EXTI的输出本来为20个但是由于ST公司想要节省引脚口所以EXTI4之后的中断被五个为一组分在同一个通道里所以EXTI5~9会触发同一个中断函数EXTI10~15触发同一个中断函数但是基于Hal库开发的STM32将这些中断函数写在了一起所以所有中断通道都可以写在同一个中断函数里面但是标准库必须根据不同的中断通道来判断到底能不能写在一起。 
AFIO口的结构图如下 此图原理就是将输入的不同GPIO相同的Pin_通过数据选择器来进行选择最后只选择一个Pin_来接到EXTI通道上具体如何选择就是通过配置AFIO_EXTRCRX寄存器的EXTIx位来进行选择每个位代表不同的GPIO这样就能以确定的位来确定是哪个GPIO的引脚会接到EXTIX的通道上面。 
AFIO主要用于引脚复用功能的选择和重定义数据选择器在STM32中AFIO主要完成两个任务复用功能引脚重映射、中断引脚选择。 EXTI结构图 电平经过AFIO之后进入EXTI首先要对该中断源的触发方式进行选择上升沿触发/下降沿触发/双边沿触发进入或门的输入这里用或门进行输入的原因是因为触发方式也可以选择是软件触发然后就会分成两路接到NVIC中断控制器的是触发中断的而接到脉冲发生器的是用来触发事件的。 
先看触发中断这一路的这里接的请求挂起寄存器相当于中断标志位通过读取这个寄存器判断是哪个通道发出中断请求如果给请求挂起寄存器置1那么就会和中断屏蔽寄存器进入一个与门然后进入NVIC中断控制器这里与门和这个中断屏蔽寄存器相当于一个开关的作用因为与门是如果输入有一个为0那么输出一定为0所以会通过控制中断屏蔽寄存器来控制是否响应中断。 
事件触发这一路与中断触发大同小异这里事件屏蔽寄存器和与门也充当开关的作用通过与门之后接一个脉冲发生器这个脉冲发生器的作用就是给一个电平脉冲是用来触发其他外设的。 
上图中画斜杠写20的表示这里可以接20根线连接20个通道而APB总线和外设接口单片机对于寄存器的访问就是借助APB总线来进行。 
2实验演示 
2.1  旋转编码器的简介 
旋转编码器用来测量位置、速度或旋转方向的装置当其旋转轴旋转时其输出端可以输出与旋转速度和方向对应的方波信号读取方波信号的频率和相位信息即可得知旋转轴的速度和方向通常有以下几种类型机械触点式/霍尔传感器式/光栅式。 
实物图如下 左边第一个不能判断不能判断旋转方向只能测位置和速度所以不经常使用而剩下的就是我们本开发板自带的旋转编码器由第三个拆解图可得他内部是通过金属触点来进行通断的所以为机械式编码器有左右两部分开关触点其中左右两部分内侧较细的触点是连接在引脚B上而剩下外侧的触点分别连在引脚A和C上而中间的圆点为一个普通的按键然后来看这个编码盘也是一系列像光栅一样的东西但也是金属触点在旋转时依次接通和断开两边的触点而金属盘的位置也是经过设计可以让两侧触点的通断有九十度的相位差 
具体输出波形如下方两图所示上图为正转时下图为反转时以下这样的正交波形就可以用来区别方向。 硬件电路图如下 2.2  对射式红外传感器计次 接线图如下 实物图如下 实验内容 
本实验是对对射式红外传感的传感次数进行计次通过用遮光片遮挡来对红外传感器传输进行计次然后通过OLED屏幕来显示传感次数。并且对于中断触发方式的不同计次方式也不同。 
首先配置STMCube MX 
将GPIO口用来实现外部中断的配置为中断模式即PB14由于OLED也要继续使用所以对OLED的引脚继续配置为输出模式即可 在NVIC中勾选EXTI line[15:10] interrupts 对NVIC的中断分组方式选择方式2哪一个随自己选择 在GPIO这里对中断触发方式进行选择 其他配置不变生成工程即可。 
代码部分 
HAL库关于外部中断的函数只有一个 
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); 
具体模板用法如下 
HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 
{ifGPIO_PinGPIO_PIN_1//判断是哪个中断源{//执行中断函数__HAL_GPIO_EXTI_CLEAR_IT ( GPIO_Pin);//中断结束标志必须有不然会卡在中断中不能进入主程序}//Hal库中所有的中断函数都在这一个函数中进行ifGPIO_PinGPIO_PIN_3{}
} 
CountSensor部分代码 
#include main.h
#include gpio.huint16_t Consensor_count;uint16_t  CountSensor_Get(void)
{return Consensor_count;
}/*** 函数功能: 外部中断回调函数* 输入参数: GPIO_Pin中断引脚* 返 回 值: 无* 说    明: 无*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_PinCountSensor_Pin){if(HAL_GPIO_ReadPin(CountSensor_GPIO_Port,CountSensor_Pin) 1  )//下降沿有效计次即可{Consensor_count;}__HAL_GPIO_EXTI_CLEAR_IT ( CountSensor_Pin);}
} 
主函数部分代码 
OLED_Init ();
OLED_ShowString (1,1,Count:);
while (1)
{OLED_ShowNum (1,7,CountSensor_Get (),5);//如果有新的下降沿出现直接覆盖上一次的数字
} 2.3  旋转编码计次 
接线图如下图所示 实验内容 
对旋转编码器旋转进行计次正转加加爱反转减减计得次数通过OLED来不断刷新。 
STM32CubeMX配置 
对旋转编码器连接的引脚PB0与PB1配置为外部中断模式给OLED连接的引脚PB8与PB9配置为输出模式在NVIC选择分组方式然后在下面勾选 
EXTI line0 interrupt   EXTI line1 interrupt 。 然后在GPIO里配置IO口的触发中断方式与输出模式根据自身习惯来对IO口进行宏定义。 配置完成后生成工程。 
代码部分 
Encoder部分代码 
#include main.h
#include gpio.huint16_t Encoder_Count;uint16_t  Encoder_Get(void)
{uint16_t Temp;Temp  Encoder_Count ;Encoder_Count  0;return Temp ;
}/*** 函数功能: 外部中断回调函数* 输入参数: GPIO_Pin中断引脚* 返 回 值: 无* 说    明: 无*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_PinCount_Increase_Pin)//读取中断源{if(HAL_GPIO_ReadPin(Count_Increase_GPIO_Port  , Count_Increase_Pin)0 ){if(HAL_GPIO_ReadPin(Count_Decrease_GPIO_Port  , Count_Decrease_Pin) 0 )//旋转编码器向左转时Encoder_Count--;}__HAL_GPIO_EXTI_CLEAR_IT ( Count_Increase_Pin);//消除中断标志由中断进入主函数}else if(GPIO_PinCount_Decrease_Pin){if(HAL_GPIO_ReadPin(Count_Decrease_GPIO_Port  , Count_Decrease_Pin) 0){if(HAL_GPIO_ReadPin(Count_Increase_GPIO_Port  , Count_Increase_Pin) 0 )//旋转编码器向右转时Encoder_Count;}__HAL_GPIO_EXTI_CLEAR_IT ( Count_Decrease_Pin);//消除中断标志由中断进入主函数
} 
主函数部分代码 
in16_t Num;
OLED_Init();
OLED_ShowString (1,1,Count:);while (1)
{/* USER CODE END WHILE *//* USER CODE BEGIN 3 */NumEncoder_Get();//时刻刷新计次OLED_ShowSignedNum(1,7,Num,5);}
} 
 文章转载自: http://www.morning.lfxcj.cn.gov.cn.lfxcj.cn http://www.morning.hfrbt.cn.gov.cn.hfrbt.cn http://www.morning.tnhqr.cn.gov.cn.tnhqr.cn http://www.morning.kgslc.cn.gov.cn.kgslc.cn http://www.morning.rpjyl.cn.gov.cn.rpjyl.cn http://www.morning.wtrjq.cn.gov.cn.wtrjq.cn http://www.morning.sfgtp.cn.gov.cn.sfgtp.cn http://www.morning.pwghp.cn.gov.cn.pwghp.cn http://www.morning.jkpnm.cn.gov.cn.jkpnm.cn http://www.morning.rnds.cn.gov.cn.rnds.cn http://www.morning.qkqgj.cn.gov.cn.qkqgj.cn http://www.morning.plfrk.cn.gov.cn.plfrk.cn http://www.morning.bkkgt.cn.gov.cn.bkkgt.cn http://www.morning.kyctc.cn.gov.cn.kyctc.cn http://www.morning.dsprl.cn.gov.cn.dsprl.cn http://www.morning.jhfkr.cn.gov.cn.jhfkr.cn http://www.morning.fmjzl.cn.gov.cn.fmjzl.cn http://www.morning.jypqx.cn.gov.cn.jypqx.cn http://www.morning.gjqwt.cn.gov.cn.gjqwt.cn http://www.morning.kwpnx.cn.gov.cn.kwpnx.cn http://www.morning.yyzgl.cn.gov.cn.yyzgl.cn http://www.morning.zdmlt.cn.gov.cn.zdmlt.cn http://www.morning.mldrd.cn.gov.cn.mldrd.cn http://www.morning.tturfsoc.com.gov.cn.tturfsoc.com http://www.morning.mpmtz.cn.gov.cn.mpmtz.cn http://www.morning.tnjkg.cn.gov.cn.tnjkg.cn http://www.morning.qpntn.cn.gov.cn.qpntn.cn http://www.morning.btsls.cn.gov.cn.btsls.cn http://www.morning.dshkp.cn.gov.cn.dshkp.cn http://www.morning.dwztj.cn.gov.cn.dwztj.cn http://www.morning.xbmwh.cn.gov.cn.xbmwh.cn http://www.morning.lddpj.cn.gov.cn.lddpj.cn http://www.morning.ygxf.cn.gov.cn.ygxf.cn http://www.morning.rxhsm.cn.gov.cn.rxhsm.cn http://www.morning.yxyyp.cn.gov.cn.yxyyp.cn http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn http://www.morning.bqwrn.cn.gov.cn.bqwrn.cn http://www.morning.ckctj.cn.gov.cn.ckctj.cn http://www.morning.tgdys.cn.gov.cn.tgdys.cn http://www.morning.ddfp.cn.gov.cn.ddfp.cn http://www.morning.dyxzn.cn.gov.cn.dyxzn.cn http://www.morning.yngtl.cn.gov.cn.yngtl.cn http://www.morning.dzyxr.cn.gov.cn.dzyxr.cn http://www.morning.dbfj.cn.gov.cn.dbfj.cn http://www.morning.dyxlj.cn.gov.cn.dyxlj.cn http://www.morning.qbwyd.cn.gov.cn.qbwyd.cn http://www.morning.xuejitest.com.gov.cn.xuejitest.com http://www.morning.tkrpt.cn.gov.cn.tkrpt.cn http://www.morning.njnqn.cn.gov.cn.njnqn.cn http://www.morning.dddcfr.cn.gov.cn.dddcfr.cn http://www.morning.xnyfn.cn.gov.cn.xnyfn.cn http://www.morning.xdmsq.cn.gov.cn.xdmsq.cn http://www.morning.wcyr.cn.gov.cn.wcyr.cn http://www.morning.fycjx.cn.gov.cn.fycjx.cn http://www.morning.xkpjl.cn.gov.cn.xkpjl.cn http://www.morning.attorneysportorange.com.gov.cn.attorneysportorange.com http://www.morning.xpgwz.cn.gov.cn.xpgwz.cn http://www.morning.wpydf.cn.gov.cn.wpydf.cn http://www.morning.lnbcx.cn.gov.cn.lnbcx.cn http://www.morning.kltmt.cn.gov.cn.kltmt.cn http://www.morning.jbkcs.cn.gov.cn.jbkcs.cn http://www.morning.ydxg.cn.gov.cn.ydxg.cn http://www.morning.tztgq.cn.gov.cn.tztgq.cn http://www.morning.fhqdb.cn.gov.cn.fhqdb.cn http://www.morning.zxwqt.cn.gov.cn.zxwqt.cn http://www.morning.bcngs.cn.gov.cn.bcngs.cn http://www.morning.zwsgl.cn.gov.cn.zwsgl.cn http://www.morning.pdmsj.cn.gov.cn.pdmsj.cn http://www.morning.pmdlk.cn.gov.cn.pmdlk.cn http://www.morning.qjfkz.cn.gov.cn.qjfkz.cn http://www.morning.grpbt.cn.gov.cn.grpbt.cn http://www.morning.qwhbk.cn.gov.cn.qwhbk.cn http://www.morning.llmhq.cn.gov.cn.llmhq.cn http://www.morning.nsrtvu.com.gov.cn.nsrtvu.com http://www.morning.alive-8.com.gov.cn.alive-8.com http://www.morning.smfbw.cn.gov.cn.smfbw.cn http://www.morning.kxqmh.cn.gov.cn.kxqmh.cn http://www.morning.tgwfn.cn.gov.cn.tgwfn.cn http://www.morning.ctwwq.cn.gov.cn.ctwwq.cn http://www.morning.lfgql.cn.gov.cn.lfgql.cn