NVIC_PRIORITY_GROUP_SET函数应该如何配置
时间: 2024-09-23 07:10:18 浏览: 87
NVIC_PRIORITY_GROUP_SET函数的配置通常涉及以下几个步骤:
1. 包含头文件:首先,在C代码中包含`<nvic.h>`或相关的中断管理头文件,因为这个函数属于NVIC库。
2. 设置优先级组:通过NVIC_PRIGROUP_xx宏指定优先级组,比如NVIC_PRIGROUP_PRE2_SUB2意味着选择预设的第2级优先级中的子级2。例如:
```c
#pragma GCC pushsection (.noinit)
__attribute__((__section__(".noinit"))) void configPriorityGroup(void) {
NVIC_PriorityGroupConfig(NVIC_PRIGROUP_PRE2_SUB2);
}
```
3. 调用配置函数:在初始化代码或者适当的时候调用`configPriorityGroup()`函数,来应用所选的优先级组设置。注意这是在程序启动前进行的,因为它会影响到整个系统的中断响应顺序。
4. 保存旧的优先级组:在更改之前,有时候需要先保存当前的优先级组设置,以防后续部分代码需要恢复原设置。
5. 配置完成后记得释放内存等资源,结束函数。
相关问题
nvic_priority_group_set此函数是不是只能使用一次
nvic_priority_group_set函数是用于设置中断优先级分组的函数,它可以被多次调用。中断优先级分组决定了中断优先级的位数分配,不同的分组方式可以提供不同的中断优先级粒度。
该函数的作用是设置中断优先级分组,并且只能在系统初始化时调用一次。一旦设置了中断优先级分组,就不能再次更改。因此,在使用nvic_priority_group_set函数时,确保在系统初始化阶段调用,并且只调用一次。
HAL_StatusTypeDef HAL_Init(void) { /* Configure Flash prefetch */ #if (PREFETCH_ENABLE != 0) #if defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || \ defined(STM32F102x6) || defined(STM32F102xB) || \ defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || \ defined(STM32F105xC) || defined(STM32F107xC) /* Prefetch buffer is not available on value line devices */ __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); #endif #endif /* PREFETCH_ENABLE */ /* Set Interrupt Group Priority */ HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ HAL_InitTick(TICK_INT_PRIORITY); /* Init the low level hardware */ HAL_MspInit(); /* Return function status */ return HAL_OK; }
HAL_Init函数是用来初始化HAL库的。它执行了以下操作:
1. 配置Flash预取:如果宏PREFETCH_ENABLE不为0,并且芯片型号符合条件,开启Flash预取缓冲区。
2. 设置中断组优先级:调用HAL_NVIC_SetPriorityGrouping函数设置中断组优先级为NVIC_PRIORITYGROUP_4。
3. 使用SysTick作为时间基准源,并配置为1ms的滴答(默认复位后的时钟是HSI):调用HAL_InitTick函数对SysTick进行初始化,设置滴答中断的优先级。
4. 初始化低层硬件:调用HAL_MspInit函数,用于初始化底层硬件。
5. 返回函数状态:返回HAL_OK,表示初始化成功。
这个函数的作用是初始化HAL库所需的各种配置,确保其正常工作。
阅读全文