Я использую STM32F407VGT6
с CubeMX
.
Итак, я начал с таймеров общего назначения, и я застрял со значениями предварительного масштабирования и периода.
В основном я хочу генерировать прерывание таймера каждые n
(где n = 1,2,3 ..) мс и выполнять некоторые задачи.
В формуле есть много вариантов для расчета значения периода и предварительного масштабирования
Некоторые версии формулы:
TIMupdateFreq (HZ) = Clock / ((PSC-1) * (Period-1))
Обновление события = TIM clk / ((PSC + 1) * (ARR + 1) * (RCR + 1)) < br /> Предделитель = ((((ClockSpeed) / ((период) / (1 / частота))) + 0,5) - 1)
Итак, переходя к вопросу, мои основные часы работают на 168 MHz
, но я вижу, что таймер подключен к APB1 Bus
, который работает на 84 MHz
.
Я пробовал код, который генерирует задержку 1 мс (по словам автора), и после использования этих значений для предварительного масштабирования и периода я сгенерировал код, который также генерирует задержку 1 мс (по интуиции - без области действия).
В коде используется значение предварительной шкалы 41999 и период 1999 года.
Итак,
PSC - 41999
ARR - 1999
Применяя это ко второй формуле
Update Event = TIM clk/((PSC+1)*(ARR+1)*(RCR+1))
Update Event = 84000000/(42000*2000) = 1
(Это задержка в 1 мс ??)
Хорошо, теперь я пытаюсь понять, как выбраны эти PSC = 41999
и Period = 1999
?? Основано ли это исключительно на предположении, поскольку в любой формуле, которую я использую, я должен предполагать одну переменную? Как рассчитать предварительную шкалу и период, если я хочу сказать 1,5, 2,3 или 4,9 что-то вроде этого точного времени ??
ИЗМЕНИТЬ
Более того, когда я использовал PSC=41999 and Period =999
, значение события обновления равно 2.
Update Event = 84000000/(42000*1000) = 2
Но у меня задержка в два раза в секунду. т.е. 500 мс
и когда я использую PSC=39999 and Period =4199
, значение события обновления равно 0,5.
Update Event = 84000000/(40000*4200) = 0.5
и моя задержка 2 мс.
заранее спасибо