ST意法半导体
直播中

飘逸的D

12年用户 782经验值
私信 关注
[问答]

在MX_MotorContorl_Init() 中为SysTick添加HAL_NVIC_SetPriority()可以吗?

(环境)
MC_SDK 5.Y.3 + STM32CubeMX 6.3.0 + IAR EWARM 8.5
(硬件)
NUCLEO-F446RE + X-NUCLEO-IHM08M1 + 低压 BLDC 电机
(我发现了什么)
  • 通过CubeMX,Systick NVIC优先级配置为Priority Group=3bit+1bit, PreemptPriority=4, SubPriority=0
  • 在 main()、HAL_Init() 和 SystemClock_Config() 实现上述配置,然后我可以读取它们寄存器的相同值。
  • 然而,在上述代码之后,MX_MotorControl_Init() 调用 HAL_SYSTICK_Config(),其中 SysTick 优先级设置为 15,PreemptPriority=7,SubPriority=1
(问题)
  • 这是缺陷还是我在配置和代码生成方面做错了什么?
  • 如果有缺陷,在 MX_MotorContorl_Init() 中为 SysTick 添加 HAL_NVIC_SetPriority() 是否足够好?
  • 或者在 SysTick_Config() 中删除 NVIC_SetPriority() 会更好?
SysTick 初始化代码看起来有点乱。

回帖(1)

周娟

2022-12-16 14:39:33
你是对的,MX_MotorControl_Init() 覆盖了 SysTick 优先级,这是一个错误。
如果使用 HAL 生成,则可以替换 MX_MotorControl_Init(void) 中的以下行:
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/SYS_TICK_FREQUENCY);
通过这个:
HAL_SetTickFreq(HAL_RCC_GetHCLKFreq()/SYS_TICK_FREQUENCY);
这样做将恢复由 HAL_Init() 设置的 SYSTick 中断级别,这就是我们想要的。
感谢您的报告。
请注意,与其他中断相比,systick 的策略是最低优先级。由于默认情况下 MX_MotorControl_INIT() 将其重置为可能的最低值,我们没有捕捉到它。
我们建议想要为自己的应用程序使用另一个中断的用户将其优先级设置为 Systick 之一,由于此错误,这是不可能的。我们计划在下一个版本中修复它。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分