当前位置: 首页 > news >正文

上海网站备案要求吗免费绑定域名的建站

上海网站备案要求吗,免费绑定域名的建站,路由器 搭建wordpress,华大基因 网站公司建设写在前面#xff1a;前面的学习中#xff0c;我们接触了STM32的第一个外设GPIO#xff0c;这也是最常用的一个外设#xff1b;而除了GPIO外#xff0c;中断也是一个十分重要且常用的外设#xff1b;只有掌握了中断#xff0c;再处理程序时才能掌握好解决实际问题的逻辑思…写在前面前面的学习中我们接触了STM32的第一个外设GPIO这也是最常用的一个外设而除了GPIO外中断也是一个十分重要且常用的外设只有掌握了中断再处理程序时才能掌握好解决实际问题的逻辑思路。此节我们学习STM32的中断 在前面51的学习中我们也介绍过中断的内容但是相对于32来说52的中断十分简单只有5个中断源中断的优先级响应函数也是比较简单的感兴趣的读者可以看一下下面的这篇博客。 CSDNhttps://mp.csdn.net/mp_blog/creation/editor/133904885 目录 一、什么是中断 二、 NVIC(中断管家) 2.1 NVIC基本概念 2.2 NVIC相关寄存器  2.3 NVIC工作原理  2.4 中断优先级  2.5 NVIC使用(STM32) 三、EXIT(外部中断控制) 3.1 EXIT基本概念 3.2 EXIT工作原理 3.3 EXIT相关寄存器 3.4 EXIT线与IO映射关系 四、中断的使用 4.1中断的使用步骤 4.2EXIT的配置步骤 4.3通用外设驱动 4.4中断回调机制HAL库 五、硬件设计  5.1实现功能 5.2原理图 六、程序设计 6.1程序设计流程图 6.2中断初始化函数  6.3中断服务函数 6.4中断处理回调函数 6.4源码 6.5实验现象 一、什么是中断 中断打断CPU执行正常的程序转而处理紧急程序然后返回原暂停的程序继续运行 举例当你正在写作业时做到一半又去吃饭吃完饭后又回来接着原来的作业继续完成。  对于单片机来说中断是指CPU正在处理某个事件A发生了另一件事件B请求CPU迅速去处理中断发生CPU暂时停止当前的工作中断响应转去处理事件B中断服务待CPU处理事件B完成后再回到原来的事件A断点继续执行这一过程称之为中断。 中断的作用和意义 1.实时控制在确定的时间内对相应事件做出相应例如温度控制 2.故障处理检测到故障需要第一时间进行处理 3.数据传输不确定数据何时会来利用中断进行控制 中断的作用高效处理紧急程序并且不会占用CPU资源。 STM32 GPIO外部中断简图 下面将分别对上述过程中的各个部分进行详细的描述 二、 NVIC(中断管家) 2.1 NVIC基本概念 NVIC 即嵌套向量中断控制器全称 Nested vectored interrupt controller。属于是内核的器件其作用是对STM32中的中断进行管理因为M3内核中的中断数量很多当同时出现多个中断时优先处理哪个中断以及那些中断不处理等都要靠NVIC 进行控制。M3 内核都是支持 256 个中断其中包含了 16 个系统中断和 240 个外部中断并且具有 256 级的可编程中断设置。 NVIC支持256个中断16个内核240个外部支持256个优先级。 但是对于ST公司来说用不了M3内核中的所有中断以及中断优先级进而对其进行了一定的裁剪。STM32中共有10个内核中断60个外部中断16个中断优先级 在中断的使用中还有一个极其重要的一部分为中断服务函数触发中断后系统执行的部分例如上文的吃饭过程中断服务函数是中断的入口。 中断向量表 定义一块固定的内存以4字节对齐32位用于存放终端服务函数的首地址系统已经将中断服务函数定义好了放在中断向量表中我们只需要进行调用即可。例如下面的中断向量表 具体可参考:STM32F103的中文参考手册9.1.2中断和异常向量 在程序中的定义为 中断向量表定义在启动文件中发生中断时CPU会自动执行对应的额中断服务函数 2.2 NVIC相关寄存器  NVIC相关的寄存器有很多但是重要的有以下几个也是需要进行掌握的 名称位数个数作用中断使能寄存器ISER328每一位控制一个中断打开中断失能寄存器ICER328每一位控制一个中断关闭应用程序中断及复位控制寄存器AIRCR321位[10:8]控制中断优先级分组中断优先级寄存器IPR82408个位对应一个中断而STM32只使用高4位 1、ISER与ICER寄存器共有32*8356,用于控制240个中断的打开与关闭 2、AIRCR寄存器位10、9、8三位用于控制优先级的分组三位共2*2*28种取其中的5组作为中断优先级的分组情况 3、IPR寄存器用于控制中断的优先级包括抢占优先级与响应优先级高4位控制至于哪几位控制抢占哪几位控制响应由AIRCR寄存器说了算 2.3 NVIC工作原理  工作原理图 工作过程         当外部被出发时首先进入ICER、ISER寄存器用于控制是否开对应的中断打开的中断进入IPR寄存器进行中断优先级的判断IPR寄存器受AIRCR寄存器控制最后按照中断优先级依次进入CPU被执行。         内核中断由SHPR寄存器控制SHPR与IPR寄存器属于同一级别  2.4 中断优先级  STM32中断优先级基本概念 1、抢占优先级(pre):高抢占优先级可以打断正在执行的低抢占优先级中断 2、响应优先级(sub):当抢占优先级相同时响应优先级高的先执行但是不能相互打断 3、抢占优先级和响应优先级都相同的情况下自然优先级越高的先执行 4、自然优先级:中断向量表中的优先级 5、数值越小表示优先级越高 STM32中断优先级分组 在前面我们说过AIRCR寄存器位10、9、8三位用于控制优先级的分组但是只取其中的五组优先级分组IPR寄存器用于控制中断的优先级包括抢占优先级与响应优先级高4位控制如下表所示 优先级分组AIRCR[10:8]IPR[7:4]分配分配结果0111None[7:4] 抢占优先级(0位、0级) 响应优先级4位、16级 1110[7]:[6:4] 抢占优先级(1位、2级) 响应优先级3位、8级 2101[7:6]:[6:4] 抢占优先级(2位、4级) 响应优先级2位、4级 3100[7:5]:[4] 抢占优先级(3位、8级) 响应优先级1位、2级 4011[7:4]:None 抢占优先级(4位、16级) 响应优先级0位、0级 假定设置中断优先级分组为 2然后设置中断3的抢占优先级为 2响应优先级为 1。中断6的抢占优先级为 3响应优先级为0。 中断7的抢占优先级为 2响应优先级为 0。那么这 3 个中断的优先级顺序为 中断 7中断 3中断 6。 上面例子中的中断 3 和中断 7 都可以打断中断 6 的中断。而中断 7 和中断 3 却不可以相互打断                 在一个工程中一般只设置一次中断优先级分组AIRCR寄存器 2.5 NVIC使用(STM32) 使用步骤 1、设置中断分组AIRCR寄存器[10:8]; HAL_NVIC_SetPriorityGrouping(); 2、设置中断优先级IPR寄存器[7:4] HAL_NVIC_SetPriority() 3、使能中断ISER寄存器 HAL_NVIC_EnableIRQ(); 1、HAL_NVIC_SetPriorityGrouping() 中断分组的设置在HAL_Init()函数中配置 2、HAL_NVIC_SetPriority() 函数说明 用于设置中断的抢占优先级和响应优先级子优先级 函数形参 形参 1 是中断号可以选择范围IRQn_Type 定义的枚举类型。 形参 2 是抢占优先级可以选择范围0 到 15。 形参 3 是响应优先级可以选择范围0 到 15。 3、HAL_NVIC_EnableIRQ() 函数描述 用于使能中断。 函数形参 形参 IRQn 是中断号可以选择范围IRQn_Type 定义的枚举类型 三、EXIT(外部中断控制) 3.1 EXIT基本概念 全称外部中断事件控制器 包含20个产生事件/中断请求的边沿检测器即20条EXIT线 中断和事件的理解 中断要进入NVIC有相应的中断服务函数需要CPU处理 事件不进入NVIC仅用内部硬件自动控制TIMDMAADC等 EXIT线说明 0-15对应GPIO_PIN 0-15中断; 16PVD输出 17RTC闹钟事件 18USB唤醒事件; 19:连接到以太网唤醒事件(只适用于互联型产品) 每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求 3.2 EXIT工作原理 工作原理图 其中按照控制功能划分共分为4个部分有两条主线一条是由输入线到 NVIC 中断控制器123一条是由输入线到脉冲发生器124。 输入线是线路的信息输入端它可以通过配置寄存器设置为任何一个 GPIO 口或者是一些外设的事件。输入线一般都是存在电平变化的信号。 1、边沿检测电路上升沿触发选择寄存器和下降沿触发选择寄存器。边沿检测电路以输入线作为信号输入端如果检测到有边沿跳变就输出有效信号‘1’就输出有效信号‘1’到标号2部分电路否则输入无效信号‘0’。边沿跳变的标准在于对两个触发选择寄存器的设置。 2、或门电路它的两个信号输入端分别是软件中断事件寄存器和边沿检测电路的输入信号。或门电路只要输入端有信号‘1’就会输出‘1’所以就会输出 ‘1’到标号3电路和标号4电路。 3、与门电路(标号3):两个信号输入端分别是中断屏蔽寄存器和标号2电路信号。如果中断屏蔽寄存器设置为 0 时不管从标号2电路输出的信号特性如何最终标号3电路输出的信号都是 0假如中断屏蔽寄存器设置为 1 时最终标号3电路输出的信号才由标号2电路输出信号决定这样子就可以简单控制 中断屏蔽寄存器 来实现中断的目的。标号4电路输出 ‘1’就会把请求挂起寄存器(EXTI_PR)对应位置 1。 4、与门电路(标号4)输入端来自标号2电路以及来自于事件屏蔽寄存器。可以简单的控制事件屏蔽寄存器来实现是否产生事件的目的。标号4电路输出有效信号 1 就会使脉冲发生器电路产生一个脉冲而无效信号就不会使其产生脉冲信号。脉冲信号产生可以给其他外设电路使用例如定时器模拟数字转换器等这样的脉冲信号一般用来触发 TIM 或者 ADC 开始转换。         产生中断线路目的使把输入信号输入到 NVIC进一步运行中断服务函数实现功能。 3.3 EXIT相关寄存器 在上述工作原理图中所涉及的寄存器共有7个但是对于外部中断来说我们只需要掌握其中四个寄存器上升沿触发选择寄存器(EXTI_RTSR)、下降沿触发选择寄存器(EXTI_FTSR)、挂起寄存器(EXTI_PR)与中断屏蔽寄存器(EXTI_IMR)。 1、上升沿触发选择寄存器(EXTI_RTSR) 该寄存器主要用于控制输入线进来的输入信号上升沿时是否在边沿检测电路被检测出20位共控制20条EXIT线  2、下降沿触发选择寄存器(EXTI_FTSR) 该寄存器主要用于控制输入线进来的输入信号下升沿时是否在边沿检测电路被检测出20位共控制20条EXIT线  3、挂起寄存器(EXTI_PR)  该寄存器的作用主要有两个 1、检测外部中断线上是否发生了选择的边沿事件如果发生了该位置1并将信号传递给 与门电路进而进入NVIC中 2、在该位手动软件写入1可以清除之前中断信号的1主要作用是进入中断后清除中断位防止多次进入中断 4、中断屏蔽寄存器(EXTI_IMR) 该寄存器的主要作用只有一个就是是否允许来自中断线上的中断信号进入NVIC中断控制器。  3.4 EXIT线与IO映射关系 前面说过 EXTI 线 0~15对应外部 IO 口的输入中断。但是STM32F1 供给 IO 口使用的中断线只有 16 个但是 STM32F1 的 IO 口 却远远不止 16 个所以 STM32 把 GPIO 管脚 GPIOx.0~GPIOx.15(xA,B,C,D,E,F,G)分别对应中断线 0~15。这样子每个中断线对应了最多 9 个 IO 口以线 0 为例它对应了GPIOA.0、GPIOB.0、 GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0 和 GPIOG.0。而中断线每次只能连接到 1 个 IO 口上 这样就需要通过配置决定对应的中断线配置到哪个 GPIO 上了。 GPIO 和中断线映射关系是在寄存器 AFIO_EXTICR1 ~ AFIO_EXTICR4 中配置的  外部中断配置寄存器 1(AFIO_EXTICR1) AFIO_EXTICR1 寄存器配置 EXTI0 到 EXTI3 线包含的外部中断的引脚包括 PAx 到 PGx x0 到 3。 AFIO_EXTICR2 寄存器配置 EXTI4 到 EXTI7 线 AFIO_EXTICR3 寄存器配置 EXTI8 到 EXTI11线 AFIO_EXTICR4 寄存器配置 EXTI12到 EXTI15线 特别注意配置AFIO寄存器之前需要使能AFIO的时钟 四、中断的使用 4.1中断的使用步骤 上述中断步骤共有两条线路一条为GPIO外部中断的工作流程即EXIT线0-15的工作流程另外一条为其他外设中断的工作流程即EXIT线16-19的工作流程。  4.2EXIT的配置步骤 1、使能GPIO时钟 2、设置GPIO的工作模式上拉、下拉、浮空输入 3、使能AFIO时钟设置AFIO时钟开启相关寄存器 4、设置GPIO与EXIT映射关系选择IO对应EXIT输入线AFIO_EXICR寄存器 5、设置EXIT屏蔽、上升沿、下降沿设置EXIT对应通道的屏蔽和上升沿、下降沿触发EMR、RTSR、FTSR寄存器 6、设置NVIC分3步优先级分组、优先级以及使能 7、设置中断服务函数包括清除中断标志 STM32 EXIT的HAL库设置步骤 1、使能GPIO时钟--使用_HAL_RCC_GPIOx_CLK_ENANLE 2、GPIO/AFIO/EXIT设置--使用_HAL_GPIO_Init 这些步骤 HAL 库全部封装在 HAL_GPIO_Init 函数里面 3、设置中断分组--使用HAL_NVIC_SetpriorityGrouping 4、设置中断优先级--使用HAL_NVIC_Setpriority 5、使能中断--使用HAL_NVIC_EnableRQ 6、设置中断服务函数--EXIT_TRQrlander STM32仅有EXIT0-4、EXIT9_5、EXIT15_10  7个外部中断服务函数         中断线 0-4每个中断线对应一个中断函数中断线 5-9 共用中断函数EXTI9_5_IRQHandler 中断线 10-15 共用中断函数 EXTI15_10_IRQHandler。一般情况下我们可以把中断控制逻辑直 接编写在中断服务函数中但是 HAL 库把中断处理过程进行了简单封装。 4.3通用外设驱动 一般外设的配置驱动模型为 1、初始化 分为时钟设置包括时钟源与开启时钟            参数设置            IO设置可选            中断设置可选 2、读函数从外设读取数据可选 3、写函数往外设写入数据可选 4、中断服务函数可选 这个内容在上一节GPIO的使用中已经说明详细内容请看下面这个博客 STM32--GPIO点亮LED灯手把手超详细-CSDN博客 4.4中断回调机制HAL库 五、硬件设计  5.1实现功能 利用STM32F1精英开发板的独立按键模块KEY0控制LED0灯的亮灭 5.2原理图 1、LED设置        在该开发板上的LED灯共有3个本次我们点亮LED0即对PB5进行操作我们看到LED0右端接的是VCC3.3V,那么只需要控制左端的PB5输出即可输出0点亮输出1熄灭 我们还需要确定GPIOB_5的工作模式我们采用推挽输出其特点为输出引脚电平高电平为VDD低电平为VSS 2、KEY设置 在该开发板上的KEY共有三个按键本次我们使用的是KEY0即对PE4进行操作当按键按下是PE4输出低电平当按键未按下时PE4应为高电平所以GPIOE_4的工作模式为上拉输入。  六、程序设计 6.1程序设计流程图 6.2中断初始化函数  void  exti_init(void) {     GPIO_InitTypeDef  gpio_init_struct;//GPIO初始化时钟使能引脚工作模式     __HAL_RCC_GPIOE_CLK_ENABLE();//使能GPIOE时钟     gpio_init_struct.PinGPIO_PIN_4;//定义引脚     gpio_init_struct.ModeGPIO_MODE_IT_FALLING ;//定义工作模式     gpio_init_struct.PullGPIO_PULLUP ;//定义上拉     HAL_GPIO_Init(GPIOE,gpio_init_struct);//GPIO/AFIO/EXIT设置     HAL_NVIC_SetPriority(EXTI4_IRQn,2,0);//设置中断优先级     HAL_NVIC_EnableIRQ(EXTI4_IRQn);//使能中断 } 注中断分组的设置已经在HAL_Init()函数中配置好了无需配置抢占优先级2位响应优先级2位。 6.3中断服务函数 每开启一个中断就必须编写其对应的中断服务函数否则将会导致死机CPU 将找不到 中断服务函数。STM32F1 的 IO 口外部中断函数只有 7 个上文已经说明。 中断线 0-4每个中断线对应一个中断函数中断线 5-9 共用中断函数EXTI9_5_IRQHandler 中断线 10-15 共用中断函数 EXTI15_10_IRQHandler。一般情况下我们可以把中断控制逻辑直 接编写在中断服务函数中但是 HAL 库把中断处理过程进行了简单封装。 void EXTI4_IRQHandler(void)     {      HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4);      __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_4);     }       所有的外部中断服务函数里都只调用了同样一个函数 HAL_GPIO_EXTI_IRQHandler该函 数是外部中断共用入口函数函数内部会进行中断标志位清零并且调用中断处理共用回调函 数 HAL_GPIO_EXTI_Callback。 6.4中断处理回调函数 HAL 库为了用户使用方便提供了一个中断通用入口函数 HAL_GPIO_EXTI_IRQHandler 在该函数内部直接调用回调函数 HAL_GPIO_EXTI_Callback。 该函数实现的作用非常简单通过入口参数 GPIO_Pin 判断中断来自哪个 IO 口然后清除 相应的中断标志位最后调用回调函数 HAL_GPIO_EXTI_Callback()实现控制逻辑。在所有的外 部中断服务函数中直接调用外部中断共用处理函数 HAL_GPIO_EXTI_IRQHandler然后在回调 函数 HAL_GPIO_EXTI_Callback 中通过判断中断是来自哪个 IO 口编写相应的中断服务控制逻 辑。 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//实现控制逻辑      {       delay_ms(20);//消抖          if( GPIO_PinGPIO_PIN_4)//判断中断来自哪个IO口          {               if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)0)//判断按键是否按下              {                 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); //led0进行状态取反              }          }      } 6.4源码 exti.c文件 #include ./BSP/EXTI/exti.h #include ./SYSTEM/delay/delay.hvoid exti_init(void) {GPIO_InitTypeDef gpio_init_struct;__HAL_RCC_GPIOE_CLK_ENABLE();gpio_init_struct.PinGPIO_PIN_4;gpio_init_struct.ModeGPIO_MODE_IT_FALLING ;gpio_init_struct.PullGPIO_PULLUP ;HAL_GPIO_Init(GPIOE,gpio_init_struct);HAL_NVIC_SetPriority(EXTI4_IRQn,2,0);HAL_NVIC_EnableIRQ(EXTI4_IRQn); }void EXTI4_IRQHandler(void){HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4);__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_4);}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){delay_ms(20);if( GPIO_PinGPIO_PIN_4){if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)0){HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);}}} 6.5实验现象 32中断点灯 链接https://pan.baidu.com/s/11o3VNe0gEB9w4InOlhlVrA  提取码1022 总结 本文主要讲解了STM32单片机的中断使用主要内容有中断的概念、NVIC、EXIT的介绍以及中断使用的步骤。并且利用中断实现了按键控制LED灯。大家一定要反复阅读才能掌握其中的思路也要对实验部分进行多次尝试。。 创作不易还请大家多多点赞支持
http://www.sadfv.cn/news/63287/

相关文章:

  • 深圳网站开发运营公司数据分析一般用什么软件
  • 校园网站建设的意义做网站上海的备案地址
  • 个人想做企业网站备案第二次使用wordpress
  • 网站上线详细步骤企业信息化管理平台
  • 在线切图网站石河子建设网站
  • 巴中建设机械网站怎么找做网站的
  • php网站开发安全手机扁平化网站模版
  • wordpress建两个网站吗哪个网站上做ppt比较好看的图片
  • 外贸建站深圳安徽省建设干部学校网站关停
  • 做网站需要租服务器吗出售app软件的平台
  • 做网站模板平台python网站开发入门
  • 国内设计的企业网站网站seo招聘
  • 网站建设制作专业开发定制数字广东网络建设有限公司地址
  • 商城网站建设计划书公司高管培训课程
  • 公司网站在哪里做肇庆网络营销外包公司
  • 织梦网站根目录在哪里wordpress程序安装包
  • 怎样做网站亮照亮标广州有专做网站
  • 广州大型网站制作公司专业的网站服务公司
  • cms官方网站网站制作和设计需要多少钱
  • 做二手车的网站玉溪市建设厅官方网站
  • 建设很行官方网站做网站什么商品好
  • 网站如何在手机端做适配北京 网站建设 知乎
  • 江苏网站建设公司排名wordpress用户角色插件
  • 网站建设找客户渠道在北京网站建设的岗位职责
  • 平台网站建设协议书东莞销售网站设计
  • 建设集团网站的作用网站建设公司权威排名
  • 网站备案流程实名认证凡科网微信小程序制作
  • 物流网站功能互联网平台建设方案
  • 阿里云虚拟主机建网站星裕建设网站
  • ui中国设计网站页面推广宝