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。

猜你喜欢

转载自www.cnblogs.com/qifeng1024/p/12057007.html