请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32CubeMX对中断分组的设置

[复制链接]
fantasylankao 提问时间:2019-12-11 22:06 /
用STM32CubeMX5.4生成一个简单的工程,选两个GPIO分别作为外部中断输入引脚,设置中断分组2:
1.jpg
但是在生成的代码中,却是中断分组4:
3.jpg
点开上图中的HAL_MspInit(),也没有发现对中断分组设置的代码:
2.jpg

出现这种情况,是我在STM32CubeMX中存在没有设置到的地方吗?还是STM32CubeMX的bug?
收藏 评论9 发布时间:2019-12-11 22:06

举报

9个回答
pkoko 回答时间:2019-12-20 00:50:48
     可以在main()的适当位置 加入 NVIC_GetPriorityGrouping() 函数,其返回值为当前的中断分组。获取当前的中断分组看看是否跟你设置的一致。
     可用 HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2); 函数自己设置分组。
butterflyspring 回答时间:2019-12-20 11:09:09
你好,我这边试了一下,没有错。在 HAL_Init(void) 中设置了默认值,若果你又对IO口的中断优先级分组配置了的话,在下面的 HAL_MspInit();中修改过来了。
cubemx set int 1.PNG
cubemx set int 2.PNG

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

fantasylankao 回答时间:2019-12-23 10:12:30
pkoko 发表于 2019-12-20 00:50
可以在main()的适当位置 加入 NVIC_GetPriorityGrouping() 函数,其返回值为当前的中断分组。获取当 ...

谢谢,确实可以手动添加。
fantasylankao 回答时间:2019-12-23 10:14:52
butterflyspring 发表于 2019-12-20 11:09
你好,我这边试了一下,没有错。在 HAL_Init(void) 中设置了默认值,若果你又对IO口的中断优先级分组配置了 ...

谢谢,你用的是STM32CUBEMX自动生成的代码吗?我用STM32CUBEMX5.4自动生成代码后,在HAL_MspInit()中并没有HAL_NVIC_SetPriorityGrouping()函数。
pkoko 回答时间:2019-12-23 10:58:55
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));
fantasylankao 回答时间:2019-12-30 08:12:29
pkoko 发表于 2019-12-23 10:58
用CubeMX5.4自动生成的代码中,在HAL_MspInit()确实没有调用HAL_NVIC_SetPriorityGrouping()函数。而是通 ...

原来如此,万分感谢
butterflyspring 回答时间:2020-1-2 16:10:45
查查CUBEMX上哪里没配置到么?
fantasylankao 回答时间:2020-1-6 16:16:53
butterflyspring 发表于 2020-1-2 16:10
查查CUBEMX上哪里没配置到么?

正如pkoko所言,HAL_NVIC_SetPriority()函数中确实调用了
NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority))
函数,但是无论在cubemx中怎样选择中断分组(我挨个试了),生成的代码里,传入NVIC_EncodePriority()函数中的prioritygroup参数的值始终没有改变,即cubemx中断分组设置没有起作用。
fantasylankao 回答时间:2020-1-8 11:11:31
cubemx5.5解决了这个bug,已经测试。在生成的main()函数中,调用了HAL_Init()函数,在stm32f4xx_hal.c文件中打开HAL_Init()函数源码:
1.jpg
通过上图可见,尽管在HAL_NVIC_SetPriorityGrouping()函数设置中断分组为NVIC_PRIORITYGROUP_4,但是又调用了HAL_MspInit(),在stm32f4xx_hal_msp.c中打开HAL_MspInit()函数源码:
2.jpg
通过上图可见,又把中断分组改成在cubemx5.5中设置的值了。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版