Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103. Высокоскоростной таймер
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Evgeniyk
Здравствуйте. Пытаюсь завести прерывания по таймеру с частотой 20 МГц. Попытки это сделать успехом не увенчались поэтому я решил попробовать сделать его с максимально возможной частотой. Для этого написал следующий код:

CODE
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 1;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

/* TIM IT enable */
TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);

/* TIM enable counter */
TIM_Cmd(TIM1, ENABLE);
}

void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

/* Enable the TIM_ADC global Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM_ADC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

void TIM1_UP_IRQHandler(void)
{
if (TIM_ADC->SR & TIM_SR_UIF)
{
TIM_ADC->SR &= ~TIM_SR_UIF;
HSO_ADC_PORT->BSRR = HSO_ADC_CLK; //нога в единицу
HSO_ADC_PORT->BRR = HSO_ADC_CLK; //нога в ноль
}
}

int main(void)
{
/* NVIC configuration */
NVIC_Configuration();

/* Timer configuration */
TIM_Configuration();

while (1)
{

}

}


Проблема в том что период следования импульсов получился около 520ns. (частота на GPIO установлена в 50 МГц т.е он хотябы с этой частотой должен был отработать). В чем может быть проблема? Как заставить таймер работать от нужной частоты?
SSerge
Вход в прерывание занимает 12 тактов, выход - ещё 12, а максимальная тактовая частота у этого процессора 72 МГц.
Так что с прерываниями осетра придётся урезать раз этак в 10-20.
Для генерации импульсов наружу есть ещё output compare mode, с ним можно получить частоты повыше не нагружая процессор дурной работой.
Evgeniyk
Большое спасибо за информацию! А где можно узнать такие подробности как колличество тактов на прерывания и т.д?
Flexz
В Cortex-M3 Technical Reference Manual
Еще учитывайте, что выборка инструкций из флеша происходин не за один цикл, для 72МГц в STM32F103 добавляется два цикла ожидания на каждое обращение к флешу, об этом - в даташине на проц.
scifi
Цитата(Evgeniyk @ Nov 7 2012, 18:25) *
частота на GPIO установлена в 50 МГц т.е он хотябы с этой частотой должен был отработать

Вы глубоко заблуждаетесь. "50 МГц" - это установка крутизны фронтов у выхода и только. Как уже было сказано, учитывая тактовую 72 МГц, у этого МК никогда не будет 50 МГц на выходе (за исключением MCO).
vlad_new
Цитата(scifi @ Nov 8 2012, 12:18) *
Вы глубоко заблуждаетесь. "50 МГц" - это установка крутизны фронтов у выхода и только. Как уже было сказано, учитывая тактовую 72 МГц, у этого МК никогда не будет 50 МГц на выходе (за исключением MCO).

А помоему заблуждаетись Вы. Судя по структурной схеме выходного каскада это именно тактирование внутренних триггеров-защелок ( или регистров ). На крутизну это ни как не влияет. И в этом многие могли убедиться у кого есть хороший осциллограф. К тому же, из той же структурной схемы видно, что в альтернативном варианте выходные ключи вообще минуют триггера (регистры), а потому частота там может быть и выше 50 Мгц. Ну это теоретически, поскольку фиг его знает как там и что дальше тактируется в альтернативном режиме.

scifi
Цитата(vlad_new @ Nov 8 2012, 21:17) *
А помоему заблуждаетись Вы. Судя по структурной схеме выходного каскада это именно тактирование внутренних триггеров-защелок ( или регистров ). На крутизну это ни как не влияет.

Не гадайте на картинках, а читайте руководства. А именно таблицу "I/O AC Characteristics" в даташите. Там всё исчерпывающе изложено, причём со ссылкой на руководство по МК и тот самый регистр, который настраивает "2/10/50 МГц".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.