stm32定时器中断配置

stm32定时器中断配置,第1张

  stm32中断

  stm32的Cortex内核具有强大的异常响应系统,它把能够打断当前代码执行流程的事件分为异常( excepTIon)和中断( terryp),并把它们用二个表管理起来,编号为0~15的称为内核异常,而16以上的则称为外部中断(外,相对内核而言),这个表就称为中断向量表。

  而STM32对这个表重新进行了编排,把编号从-3至6的中断向量定义为系统异常,编号为负的内核异常不能被设置优先级,如复位( Reset)、不可屏蔽中断(NMI)、硬错误( Hardfault)。从编号7开始的为外部中断,这些中断的优先级都是可以自行设置的。

  STM32的中断如此之多,配置起来并不容易,因此,我们需要一个强大而方便的中断控制器NVIC,NVIC是属于 Cortex内核的器件。

  stm32中断配置

  配置STM32的中断只需要理解2个内容,配置4个变量即可。

  4个变量:

  NV|IC_ IRQChannel中断向量

  NVIC_ IRQChannelCmd使能/禁止

  NVIC_ IRQChannelPreempTIon Priority抢占优先级

  NVIC_IRQChannelSub Priority响应优先级

  两个内容:抢占优先级和响应优先级

  抢占优先级

  抢占是指打断其他中断的属性,即因为具有这个属性,会出现嵌套中断(在执行中断服务函数A的过程中被中断B打断,先执行完中断服务B再继续执行中断服务A)。其属性编号越小,优先级别越高。

  响应优先级

  响应属性则应用在抢占属性相同的情况下,如果两个中断同时到达,则先处理响应优先级高的中断,再处理响应优先级低的中断。其属性编号越小,优先级别越高。

stm32定时器中断配置,stm32定时器中断配置,第2张

  若内核正在执行c的中断服务函数,则它能被抢占优先级更高的中断A打断,由于B和C的抢占优先级相同,所以C不能被B打断。但如果B和C中断是同时到达的,内核就会首先响应响应优先级别更高的B中断

  抢占优先级和响应优先级的数量由一个4位的数字来决定。

  第0组:所有4位用来配置抢占优先级,即NVIC配置的24=16种中断向量都是只有抢占属性,没有响应属性。

  第1组:最高1位用来配置抢占优先级,低3位用来配置响应优先级。抢占优先级(0级,1级)响应优先级分别为0~7。

  第2组:2位用来配置抢占优先级,2位用来配置响应优先级。即22=4种抢占优先级,22=4种响应优先级。

  第3组:高3位用来配置抢占优先级,最低1位用来配置响应优先级。即有8种抢占优先级,2种响应2优先级。

  第4组:所有4位用来配置响应优先级。即6种中断向量具有都不相同的响应优先级。

  stm32中断的配置方法

  第一步定义一个中断配置结构体变量

  NVIC_Init TypeDef NVIC_IinitStructure;

  第二步建立中断优先级配置组

  NVIC_Ppriority Group Config (NVIC_Priority Group_1);

  第三步对结构体变量初始化

  NVIC_IRQChannel中断向量

  NVIC_IRQChannelCmd使能/禁止

  NVIC_IRQChannel PreempTIon Priority抢占优先级

  NVIC_IRQChannelSubPriority响应优先级

  第四步 NVIC_Init (& NVIC_InitStructure)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2717008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存