STM32CubeMX对中断分组的设置
用STM32CubeMX5.4生成一个简单的工程,选两个GPIO分别作为外部中断输入引脚,设置中断分组2:但是在生成的代码中,却是中断分组4:
点开上图中的HAL_MspInit(),也没有发现对中断分组设置的代码:
出现这种情况,是我在STM32CubeMX中存在没有设置到的地方吗?还是STM32CubeMX的bug?
可以在main()的适当位置 加入 NVIC_GetPriorityGrouping() 函数,其返回值为当前的中断分组。获取当前的中断分组看看是否跟你设置的一致。
可用 HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2); 函数自己设置分组。 你好,我这边试了一下,没有错。在 HAL_Init(void) 中设置了默认值,若果你又对IO口的中断优先级分组配置了的话,在下面的 HAL_MspInit();中修改过来了。
pkoko 发表于 2019-12-20 00:50
可以在main()的适当位置 加入 NVIC_GetPriorityGrouping() 函数,其返回值为当前的中断分组。获取当 ...
谢谢,确实可以手动添加。 butterflyspring 发表于 2019-12-20 11:09
你好,我这边试了一下,没有错。在 HAL_Init(void) 中设置了默认值,若果你又对IO口的中断优先级分组配置了 ...
谢谢,你用的是STM32CUBEMX自动生成的代码吗?我用STM32CUBEMX5.4自动生成代码后,在HAL_MspInit()中并没有HAL_NVIC_SetPriorityGrouping()函数。 fantasyhpu 发表于 2019-12-23 10:14
谢谢,你用的是STM32CUBEMX自动生成的代码吗?我用STM32CUBEMX5.4自动生成代码后,在HAL_MspInit()中并没 ...
用CubeMX5.4自动生成的代码中,在HAL_MspInit()确实没有调用HAL_NVIC_SetPriorityGrouping()函数。而是通过类似HAL_NVIC_SetPriority(USART2_IRQn, 1, 0) 这样的函数调用。函数 HAL_NVIC_SetPriority()的原型在 stm32f1xx_hal_cortex.c 文件中定义,在该函数中调用了 NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); pkoko 发表于 2019-12-23 10:58
用CubeMX5.4自动生成的代码中,在HAL_MspInit()确实没有调用HAL_NVIC_SetPriorityGrouping()函数。而是通 ...
原来如此,万分感谢 查查CUBEMX上哪里没配置到么? butterflyspring 发表于 2020-1-2 16:10
查查CUBEMX上哪里没配置到么?
正如pkoko所言,HAL_NVIC_SetPriority()函数中确实调用了
NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority))
函数,但是无论在cubemx中怎样选择中断分组(我挨个试了),生成的代码里,传入NVIC_EncodePriority()函数中的prioritygroup参数的值始终没有改变,即cubemx中断分组设置没有起作用。 cubemx5.5解决了这个bug,已经测试。在生成的main()函数中,调用了HAL_Init()函数,在stm32f4xx_hal.c文件中打开HAL_Init()函数源码:
通过上图可见,尽管在HAL_NVIC_SetPriorityGrouping()函数设置中断分组为NVIC_PRIORITYGROUP_4,但是又调用了HAL_MspInit(),在stm32f4xx_hal_msp.c中打开HAL_MspInit()函数源码:
通过上图可见,又把中断分组改成在cubemx5.5中设置的值了。
页:
[1]