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 中断的主要内容,如果未能解决你的问题,请参考以下文章