启用编译器优化时,STM32F411无法更新PWM占空比

启用编译器优化时,STM32F411无法更新PWM占空比,stm32,pwm,Stm32,Pwm,我有一个奇怪的问题,我似乎无法解决。我使用的是STM32F411板和基于eclipse的ST32CubeIDE。我想使用PWM,所以我使用cubeMX在PWM输出模式下配置TIM4,带有预分频器和负载值,适合我想要的PWM频率/脉冲宽度。我还为TIM4启用了全局中断,因为我想稍后使用HAL_TIM_PWM_PulseFinishedCallback函数 在主循环之前,我初始化TIM4和所有4个通道,如下所示: HAL_TIM_PWM_Start_IT(&htim4, TIM_CHANNE

我有一个奇怪的问题,我似乎无法解决。我使用的是STM32F411板和基于eclipse的ST32CubeIDE。我想使用PWM,所以我使用cubeMX在PWM输出模式下配置TIM4,带有预分频器和负载值,适合我想要的PWM频率/脉冲宽度。我还为TIM4启用了全局中断,因为我想稍后使用HAL_TIM_PWM_PulseFinishedCallback函数

在主循环之前,我初始化TIM4和所有4个通道,如下所示:

HAL_TIM_PWM_Start_IT(&htim4, TIM_CHANNEL_1); //Start up PWM
HAL_TIM_PWM_Start_IT(&htim4, TIM_CHANNEL_2); //Start up PWM     
HAL_TIM_PWM_Start_IT(&htim4, TIM_CHANNEL_3); //Start up PWM     
HAL_TIM_PWM_Start_IT(&htim4, TIM_CHANNEL_4); //Start up PWM
然后在我手动设置PWM脉冲宽度之后:

htim4.Instance->CCR1 = 100;
htim4.Instance->CCR2 = 100; 
htim4.Instance->CCR3 = 100;
htim4.Instance->CCR4 = 100;
然而,出于某种原因,当我将编译器优化设置为“Optimize For speed-of AST”时,程序似乎在最后一行之后卡住了,而调试时,CCR4被设置了,无法继续

这仅在启用编译器速度优化时发生。默认情况下,它被设置为针对调试进行优化,这样做很好。

针对除调试之外的任何内容进行优化都会混淆调试器

您可以尝试的事情:您没有指定您的工具链,我假设它是基于eclipse/gcc的

允许一次一个地逐步完成装配说明。即使源代码行的调试不起作用,它也应该可以工作。 在代码的下面两行或三行设置断点,让调试器运行关键部分。 点击暂停按钮,看看它卡在哪里了。如果代码中没有活动断点,则该断点可能不可用。
这将有助于显示您实际上无法调试的代码。顺便说一句,这是什么编译器/调试器?请不要对代码段使用引号格式。抱歉-修复,这是STM32Cube IDE,它是STM自己的IDE,本质上是基于eclipse的。在此之前,除了cubeMX的自动生成代码之外,没有多少代码。程序被卡住的地方就是这些特定的行。它是基于eclipse的。是的,代码被卡住了,在最后一行htim4.Instance->CCR4=100之后无法继续运行;我在代码之前和之后都有断点,但它永远无法到达代码之后的第二个断点。好的,你打算显示实际上无法调试的代码吗?