stm32 中断

Posted qifeng1024

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32 中断相关的知识,希望对你有一定的参考价值。

配置中断之前

要先设置一下优先级的分组,这个分组将会影响到你程序中的所有中断,并且这个分组不会再改

技术图片

 

 

 比如第二个组:有4个位,2个位是抢占优先级 另外2个位是响应优先级

 而2个位 能设置的数就只有0-3 所以可以设置抢占/相应优先级为0-3

 

然后说说抢占优先级和响应优先级

抢占优先级的作用:就是用来打断别人正在进行的程序。比如现在抢断优先级2的任务在执行,现在发生了一个抢断1的任务,那么前面的任务就会被打断。

响应优先级的作用:如果当前没有程序在运行,两个中断同时发生,如果抢占优先级相同,则先运行响应优先级高的程序

 

 

 

 


 

设置中断优先级分组:

void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)

函数参数填 NVIC_PRIORITYGROUP_0  1 2 3 4 

 

举个例子:

  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);

 

 

设置抢占优先级和响应优先级

void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)

 

举个例子:

HAL_NVIC_SetPriority(USART1_IRQn,3,3);            //抢占优先级3,子优先级3

 

使能中断通道:

void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)

 

 

最后我们总结一下中断优先级设置的步骤: 
①系统运行开始的时候设置中断分组。确定组号,也就是确定抢占优先级和响应优先级的分配位数。设置函数为 HAL_NVIC_PriorityGroupConfig。
  对于 HAL 库,在文件 stm32f7xx_hal.c内部定义函数 HAL_Init 中有调用 HAL_NVIC_PriorityGroupConfig 函数进行相关设置,
  所以我们只需要修改 HAL_Init 内部对中断优先级分组设置即可。 ②设置单个中断的中断优先级别和使能相应中断通道,使用到的函数函数主要为函数 HAL_NVIC_SetPriority 和函数 HAL_NVIC_EnableIRQ。

以上是关于stm32 中断的主要内容,如果未能解决你的问题,请参考以下文章

STM32 定时器中断

STM32CubeMX(04) 串口中断实验

STM32Cubemx——定时器中断

STM32CubeIDE 在地址“xxx”处中断,没有可用的调试信息,或在程序代码之外

STM32Cubemx——外部中断

STM32CubeMX笔记--外部中断,使用按键KEY检测