Счетчик таймера Stm32 с регистрами - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь использовать timer1 на STM32f103c8t6 (bluepill). Я был прочитан таблицы данных и inte rnet ответ / вопросы. Однако я не могу понять, «как я могу настроить значение периода с помощью регистров». Я использовал таймеры с библиотекой HAL и вычислял вычисления времени, значения периода и предскалера и т. Д. c.

(period)*(prescaler) / (clock Speed) = second

Это моя уже известная формула.

Моя тактовая частота равна 72 МГц, и я настроил Prescaler на 1000. Я хочу установить значение Period на 72000, и у меня будет 1 секундный таймер. Но я не знаю, как можно настроить значение периода, где оно.

 void TIM1_Config(){
 RCC-> APB2ENR  |= 0x00000400;      //TIM1 CLK Enable
 TIM1-> CR1     |= 0x0083;          //Auto Reload,Update Request Source, Counter Enable
 TIM1-> DIER    |= 0x0003;          //CC1 Interrupt Enable, Update Interrupt Enable
 TIM1-> ARR      = 0x0064;          //100 is set as Auto Reload Value
 TIM1-> PSC     |= 0x03E8;          //1000 is set as Prescaler Value
 TIM1-> (period value I need it)???? // it will set 72000

}

1 Ответ

0 голосов
/ 19 января 2020

Во-первых, помните, что часы TMR могут отличаться от ваших системных часов. Поэтому убедитесь, что вы правильно настроили тактовую частоту APB2.

Предполагая, что тактовая частота APB2 также равна 72 МГц, в течение 1 секунды вам нужно как-то разделить ее на 72000000 (72e6). Вам нужно использовать регистры ARR & PS C, чтобы (ARR + 1) * (PSC + 1) = 72e6. Имейте в виду, что эти регистры 16-разрядные, поэтому они не могут быть больше 65535.

Одна из возможных комбинаций:

TIM1->PSC = 1124;
TIM1->ARR = 63999;

Обратите внимание, что я не проверял ваши настройки кода / TMR.

...