Ich habe einen Timer (TIM1 in einem STM32F103C8T6) programmiert, daß er
mit einer Frequenz von ca. 8KHz (ca. 8372.09 Hz) läuft. Timerclock is 72
MHz. Initialisierungscode:
1 | /* USER CODE END TIM1_Init 1 */
|
2 | htim1.Instance = TIM1;
|
3 | htim1.Init.Prescaler = 0;
|
4 | htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|
5 | htim1.Init.Period = 8599;
|
6 | htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
7 | htim1.Init.RepetitionCounter = 0;
|
8 | htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
Kann ich, während der Timer läuft, "on the fly" die Timer.Period
schreiben, also z.B. TIM1->ARR=5739? Es funktioniert, aber was passiert
genau?
Wenn z.B. der Timer mit der Periode 8599 läuft und er kriegt eine 5739
"verpaßt", während er gerade bei 7123 mit der "Zählerei dran" ist?
Hört er dann auf? Er ist ja längst drüber, oder macht er die 8599 zu
Ende?
Wie wäre die "saubere" Vorgehensweise? Zähler anhalten, Period neu
schreiben und wieder starten?