Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Таймер отрабатывает в 2 раза быстрее
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
marco
Доброго дня.
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 с.
Flexz
Если прескейлер на APB равен единице (т.е. APB рабоатет на частоте AHB), то таймеры работают на частоте шины. Если же прескейлер на APB больше единицы, то таймеры работают на удвоенной частоте шины.
PS см раздел RCC, Clock tree.
ViKo
Цитата(Flexz @ Dec 17 2012, 16:26) *
Если прескейлер на APB равен единице (т.е. APB рабоатет на частоте AHB), то таймеры работают на частоте шины. Если же прескейлер на APB больше единицы, то таймеры работают на удвоенной частоте шины.

Т.е. в данном случае, на частоте 60 MHz.
marco
Чёрт возьми, как-то я этот момент пролистал. Зачем так сделали, интересно?
Спасибо.
pitt
Цитата(ViKo @ Dec 17 2012, 08:28) *
Т.е. в данном случае, на частоте 60 MHz.

Это смотря какой таймер - они на обеих шинах сидят, т.е. может быть и 120МHz
scifi
Цитата(marco @ Dec 17 2012, 18:10) *
Чёрт возьми, как-то я этот момент пролистал. Зачем так сделали, интересно?

Понятно зачем: чтобы таймер мог работать на максимальной частоте.
ViKo
Цитата(pitt @ Dec 25 2012, 01:19) *
Это смотря какой таймер - они на обеих шинах сидят, т.е. может быть и 120МHz

Не может. На частоту шин есть ограничения.
pitt
Цитата(ViKo @ Dec 25 2012, 01:54) *
Не может. На частоту шин есть ограничения.

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)

Еще есть возражения?
ViKo
Цитата(pitt @ Dec 25 2012, 17:43) *
Еще есть возражения?

Больше нет.
pitt
Цитата(ViKo @ Dec 25 2012, 11:29) *
Больше нет.

С Новым Годом!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.