Перейти к содержанию
    

Таймер отрабатывает в 2 раза быстрее

Доброго дня.

STM32F207

 

// Настраиваю TIM2 (32bits), работающий напрямую от APB1 (30МГц)
TIM_TimeBaseInitTypeDef TIM_InitStructure;
TIM_InitStructure.TIM_Prescaler = 0x0000;
TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Down;
TIM_InitStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseInit(TIM2, &TIM_InitStructure);

TIM_SelectOnePulseMode(TIM2, TIM_OPMode_Repetitive);
TIM_ARRPreloadConfig(TIM2, ENABLE);

TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
NVIC_EnableIRQ(TIM2_IRQn);

// Устанавливаю значение autoreload, равное частоте тактирующего клока (APB1),
// т.е. какой бы клок не был, то при условии отсутствия уможителей
// период таймера равен 1 с.

RCC_ClocksTypeDef rcc_clocks;
RCC_GetClocksFreq(&rcc_clocks);
TIM_SetAutoreload(TIM2, rcc_clocks.PCLK1_Frequency);

TIM_Cmd(TIM2, ENABLE);

 

На деле получаю период 0,5 с.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если прескейлер на APB равен единице (т.е. APB рабоатет на частоте AHB), то таймеры работают на частоте шины. Если же прескейлер на APB больше единицы, то таймеры работают на удвоенной частоте шины.

PS см раздел RCC, Clock tree.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если прескейлер на APB равен единице (т.е. APB рабоатет на частоте AHB), то таймеры работают на частоте шины. Если же прескейлер на APB больше единицы, то таймеры работают на удвоенной частоте шины.

Т.е. в данном случае, на частоте 60 MHz.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чёрт возьми, как-то я этот момент пролистал. Зачем так сделали, интересно?

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. в данном случае, на частоте 60 MHz.

Это смотря какой таймер - они на обеих шинах сидят, т.е. может быть и 120МHz

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чёрт возьми, как-то я этот момент пролистал. Зачем так сделали, интересно?

Понятно зачем: чтобы таймер мог работать на максимальной частоте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это смотря какой таймер - они на обеих шинах сидят, т.е. может быть и 120МHz

Не может. На частоту шин есть ограничения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не может. На частоту шин есть ограничения.

RM0033 p.48

AHB/APB bridges (APB)

The two AHB/APB bridges provide full synchronous connections between the AHB and the two APB buses, allowing flexible selection of the peripheral frequency:

● APB1, limited to 30 MHz for low-speed peripherals

● APB2, limited to 60 MHz for high-speed peripherals

stm32f2xx.h

/*!< APB1 peripherals */
#define TIM2_BASE             (APB1PERIPH_BASE + 0x0000)
#define TIM3_BASE             (APB1PERIPH_BASE + 0x0400)
#define TIM4_BASE             (APB1PERIPH_BASE + 0x0800)
#define TIM5_BASE             (APB1PERIPH_BASE + 0x0C00)
#define TIM6_BASE             (APB1PERIPH_BASE + 0x1000)
#define TIM7_BASE             (APB1PERIPH_BASE + 0x1400)
#define TIM12_BASE            (APB1PERIPH_BASE + 0x1800)
#define TIM13_BASE            (APB1PERIPH_BASE + 0x1C00)
#define TIM14_BASE            (APB1PERIPH_BASE + 0x2000)
...
/*!< APB2 peripherals */
#define TIM1_BASE             (APB2PERIPH_BASE + 0x0000)
#define TIM8_BASE             (APB2PERIPH_BASE + 0x0400)
#define TIM9_BASE             (APB2PERIPH_BASE + 0x4000)
#define TIM10_BASE            (APB2PERIPH_BASE + 0x4400)
#define TIM11_BASE            (APB2PERIPH_BASE + 0x4800)

Еще есть возражения?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...