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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版