У меня странная проблема, которую я не могу понять. Я использую плату STM32F411 и ST32CubeIDE (на основе затмения). Я хочу использовать ШИМ, поэтому я использовал cubeMX для настройки TIM4 в режиме вывода ШИМ с предскалером и значением нагрузки, которое соответствует частоте ШИМ / ширине импульса, которые я хочу. Я также включил глобальное прерывание для 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
Затем, после того как я просто установил ширину импульса ШИМ вручную:
htim4.Instance->CCR1 = 100;
htim4.Instance->CCR2 = 100;
htim4.Instance->CCR3 = 100;
htim4.Instance->CCR4 = 100;
Однако по какой-то причине, когда я включаю оптимизацию компилятора на «Оптимизировать для скорости -Ofast» *, программа, похоже, застревает после последней строки, пока отлаживается, где устанавливается CCR4, и не может прогрессировать.
Это только происходит, когда включена оптимизация компилятора по скорости. По умолчанию он был настроен на оптимизацию для отладки, и это нормально.