启用编译器优化后,STM32F411卡住了更新PWM占空比的过程

时间:2019-07-08 13:48:40

标签: stm32 pwm

我遇到了一个奇怪的问题,我似乎无法理解。我正在使用STM32F411开发板和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;

但是,由于某些原因,当我将编译器优化设置为“优化速度-Ofast” *时,程序似乎在最后一行之后卡住了,而调试时却设置了CCR4,并且无法进行。

仅当启用编译器速度优化时,此发生。默认情况下,它设置为优化调试,这样很好。

1 个答案:

答案 0 :(得分:1)

除调试之外的其他任何操作都会使调试器感到困惑。

您可以尝试的操作:(您没有指定工具链,我假设它是基于eclipse / gcc的。)

  • 启用instruction stepping一次逐步执行汇编说明。即使通过源代码行进行调试,它也应能正常工作。
  • 在代码的最下方两到三行设置一个断点,然后让调试器运行关键部分。
  • 点击暂停按钮只是为了看看它被卡住了。如果您在代码中的某个地方没有活动的断点,则它可能不可用。