8. 嵌套向量中断控制器NVIC

2023-12-02 17:18

本文主要是介绍8. 嵌套向量中断控制器NVIC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

8. 嵌套向量中断控制器NVIC

  8.1 NVIC简介

  8.2 EXTI中断

  8.3 USART中断

  8.4 TIM中断

  8.5 ADC中断

  8.1 NVIC简介

  • 接口数据传送控制方式有查询、中断和DMA等,中断是重要的接口数据传送控制方式
  • STM32中断控制分为全局和局部2级,全局中断由NVIC控制,局部中断由设备控制
  • NVIC支持多个内部异常和多达240个外部中断。从广义上讲,异常和中断都是暂停正在执行的程序转去执行异常或中断处理程序,然后再返回原来的程序继续执行。从狭义上讲,异常由内部事件引起,而中断由外部硬件产生
  • 异常和中断的处理与子程序调用有相似之处,但也有本质下列区别:
  • (1)什么时候调用子程序是确定的,而什么时候产生异常和中断是不确定的
  • (2)子程序的起始地址由调用程序给出,而异常和中断程序的起始地址存放在地址表中
  • (3)子程序的执行一般是无条件的,而异常和中断处理程序的执行要先使能
  • STM32异常和中断(异常)

  • STM32异常和中断(中断)

  • NVIC通过6种寄存器对中断进行管理

  • STM32支持16个中断优先级,使用8位中断优先级设置的高4位,并分为抢占优先级和响应优先级,抢占优先级在前,响应优先级在后,具体位数分配通过应用程序中断及复位控制寄存器AIRCR的优先级分组PRIGROUP位段(AIRCR[10:8])设置

  • 抢占优先级高(数值小)的中断可以中断抢占优先级低(数值大)的中断,而响应优先级高的中断不能中断响应优先级低的中断

 

8.2 EXTI

  • 每个配置为输入方式的GPIO引脚都可以配置成外部中断/事件方式EXTI
  • 每个中断/事件都有独立的触发和屏蔽,触发请求可以是上升沿、下降沿或者双边沿触发

  • 每个外部中断都有对应的悬起标志,系统可以查询悬起标志响应触发请求,也可以在中断允许时以中断方式响应触发请求

  • 系统默认的外部中断输入线EXTI0-15是PA0-15,可以通过AFIO的EXTI控制寄存器(AFIO_EXTICR1-4)配置成其他GPIO引脚(访问EXTI控制寄存器时必须先使能AFIO时钟)

  • 另外四个EXTI线的连接方式为:

        EXTI16连接到PVD中断

        EXTI17连接到RTC闹钟中断

        EXTI18连接到USB唤醒中断

        EXTI19连接到以太网唤醒中断

  • EXTI通过6个寄存器进行操作

  • EXTI的2级中断控制

  • 按键中断初始化程序段
RCC->APB2ENR |= 1;             //开启AFIO时钟AFIO->EXTICR[2] |= 0x0011;     //EXTI9=PB.9,EXTI8=PB.8EXTI->IMR |= 0x0300;           //允许EXTI9和EXTI8中断EXTI->FTSR |= 0x0300;          //EXTI9和EXTI8下降沿触发NVIC->ISER[0] |= 1<<23;        //允许EXTI9-8中断
  • 按键中断处理子程序
void EXTI9_5_IRQHandler(void)
{if(EXTI->PR & 1<<8 )         //KEY1按下(PR.8=1)flag = 0;if(EXTI->PR & 1<<9 )         //KEY2按下(PR.9=1)flag = 1;EXTI->PR |= 0x0300;         //清除中断触发请求
}
  • 对比按键处理的查询和中断实现方法可以看出:中断实现方法的初始化子程序有些复杂
  • 处理子程序的主要区别是:查询处理Key_Proc()判断的是GPIOB->IDR(电平),中断处理EXTI9_5_IRQHandler()判断的是EXTI->PR(边沿)

 

8.3 USART中断

  • USART的2级中断控制

  • USART中断初始化程序段
USART->CR1 |= 1<<5;         //允许RXNE中断NVIC->ISER[1] |= 1<<5;      //允许USART1全局中断
  • USART中断处理子程序
void USART1_IRQHandler(void)

 

8.4 TIM中断

  • TIM的2级中断控制

  • TIM1中断初始化程序段
TIM1->DIER |= 1;             //允许更新中断NVIC->ISER[0] |= 1<<25;      //允许TIM1更新中断
  • TIM1中断处理子程序
void TIM1_UP_IRQHandler(void)
  • TIM2中断初始化程序段
TIM2->DIER |= 6;             //允许捕获/比较2-1中断NVIC->ISER[0] |= 1<<28;      //允许TIM2全局中断
  • TIM2中断处理子程序
void TIM2_IRQHandler(void)

 

8.5 ADC中断

  • ADC的2级中断控制

  • ADC中断初始化程序段
ADC1->CR1 |= 1<<5;             //允许转换结束中断ADC1->CR1 |= 1<<7;             //允许注入通道转换结束中断NVIC->ISER[0] |= 1<<18;        //允许ADC1和ADC2全局中断
  • ADC中断处理子程序
void ADC_IRQHandler(void)

 

 

 

这篇关于8. 嵌套向量中断控制器NVIC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/446164

相关文章

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

SpringBoot嵌套事务详解及失效解决方案

《SpringBoot嵌套事务详解及失效解决方案》在复杂的业务场景中,嵌套事务可以帮助我们更加精细地控制数据的一致性,然而,在SpringBoot中,如果嵌套事务的配置不当,可能会导致事务不生效的问题... 目录什么是嵌套事务?嵌套事务失效的原因核心问题:嵌套事务的解决方案方案一:将嵌套事务方法提取到独立类

hdu1254(嵌套bfs,两次bfs)

/*第一次做这种题感觉很有压力,思路还是有点混乱,总是wa,改了好多次才ac的思路:把箱子的移动当做第一层bfs,队列节点要用到当前箱子坐标(x,y),走的次数step,当前人的weizhi(man_x,man_y),要判断人能否将箱子推到某点时要嵌套第二层bfs(人的移动);代码如下:

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure is used throughout Unity to pass 3D positions and directions around. It also contains functions for doin

8. 自然语言处理中的深度学习:从词向量到BERT

引言 深度学习在自然语言处理(NLP)领域的应用极大地推动了语言理解和生成技术的发展。通过从词向量到预训练模型(如BERT)的演进,NLP技术在机器翻译、情感分析、问答系统等任务中取得了显著成果。本篇博文将探讨深度学习在NLP中的核心技术,包括词向量、序列模型(如RNN、LSTM),以及BERT等预训练模型的崛起及其实际应用。 1. 词向量的生成与应用 词向量(Word Embedding)

FreeRTOS学习笔记(四)Freertos的中断管理及临界保护

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Cortex-M 中断管理1.1 中断优先级分组1.2 相关寄存器1.3 相关宏定义1.4 FreeRTOS 开关中断 二、临界段及其保护2.1 taskENTER_CRITICAL( ) 和 taskEXIT_CRITICAL( )2.2 taskENTER_CRITICAL_FROM_ISR( )

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

jmeter之仅一次控制器

仅一次控制器作用: 不管线程组设置多少次循环,它下面的组件都只会执行一次 Tips:很多情况下需要登录才能访问其他接口,比如:商品列表、添加商品到购物车、购物车列表等,在多场景下,登录只需要1次,我们期望的是重复执行登陆后面的接口来做压测,这就和事务相关,例如 事务1: 登录—>添加购物车 事务2: 登录—>购物车列表 事务3: 登录—>商品列表—>添加购物车 … 一、仅一次控制器案例 在