Это проблема с библиотеками HAL.Люди, которые их используют, понятия не имеют, что за этим стоит.
Что такое период таймера?Это комбинация PCS (prescaller) и ARR (регистр автоматической перезагрузки).Период рассчитывается как (ARR + 1) * (PSC + 1) / TimerClockFreq.
Когда вы пытаетесь изменить период, когда работает таймер, вы должны убедиться, что это сделано в безопасный момент.чтобы предотвратить глюки.Самый безопасный момент - событие UG.
У вас есть способы архивации:
Прерывание UG.В процедуре прерывания, если ARR или PSC изменились - вы должны обновить регистр.Имейте в виду, что изменение может произойти в следующем цикле, если регистры будут затенены.
При использовании таймеров DMA лопнет больше.Конфигурировать его сложнее, но аппаратное обеспечение заботится об обновлении регистров выбранного события.Изменение происходит мгновенно, и затенение регистра не влияет на него.Подробнее читайте в главе RM о режиме пакетной обработки DMA таймеров.
Если вы хотите использовать более продвинутые аппаратные функции, забудьте о HAL и запрограммируйте его, используя пустые регистры с полным контролем.