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

STM32F107RCT6 Time base generator

Добрый день. У меня контроллер STM32F107RCT6. Хочу сделать тактовый генератор на таймере TIM1 (на 1-й канал выдавать частоту). Вроде все инициализировал (таймер, ножку PA8 для Ch1), а на ножке все равно глухо. Частота кварца 72MГц. Т.е. при текущей настройке на выходе должна быть частота 100Гц. Подскажите, пожалуйста, в чем может быть загвоздка? С контроллером серии STM32L100 у меня получалось, там просто некоторые структуры библиотечные выглядят немного иначе. А вот с этим контроллером никак

 

int main( void) {
  TIM_TimeBaseInitTypeDef timer;
  TIM_OCInitTypeDef TIM_OCConfig;

  SystemCoreClockUpdate ();
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);  
  RCC_APB2PeriphClockCmd(RCC_APB2ENR_AFIOEN, ENABLE);

  GPIO_mInit(GPIO_Speed_10MHz, GPIO_Mode_AF_PP, GPIOA, GPIO_Pin_8);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
  TIM_TimeBaseStructInit(&timer);
  timer.TIM_Prescaler = 11000;
  timer.TIM_Period = 65;
  TIM_TimeBaseInit(TIM1, &timer);
  TIM_ARRPreloadConfig(TIM1, ENABLE);
  
  TIM_OCStructInit(&TIM_OCConfig);
  TIM_OCConfig.TIM_OCMode = TIM_OCMode_Toggle;
  TIM_OCConfig.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OC1Init(TIM1, &TIM_OCConfig);
  TIM_Cmd(TIM1, ENABLE);                      // Включение таймера TIM1_CH1(F1) 

  while(1) 
  {    
    wdt_reset();            // сброс WDT
  }
}

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


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

А как включить бит MOE в TIMx_BDTR ?

"TIM1->BDTR |= TIM_BDTR_MOE;"?

Вот эти зубодробительные инициализации при помощи "полезных" библиотек только всё запутывают.

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


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

Добрый день. У меня контроллер STM32F107RCT6. Хочу сделать тактовый генератор на таймере TIM1 (на 1-й канал выдавать частоту). Вроде все инициализировал (таймер, ножку PA8 для Ch1), а на ножке все равно глухо. Частота кварца 72MГц. Т.е. при текущей настройке на выходе должна быть частота 100Гц. Подскажите, пожалуйста, в чем может быть загвоздка? С контроллером серии STM32L100 у меня получалось, там просто некоторые структуры библиотечные выглядят немного иначе. А вот с этим контроллером никак

Ну у меня делается, например, так:

void HW_TIM_Init(void)
{
    TIM_TimeBaseInitTypeDef TIM_Configure;
    
    TIM_Configure.TIM_ClockDivision     = TIM_CKD_DIV1;
    TIM_Configure.TIM_CounterMode       = TIM_CounterMode_Up;
    TIM_Configure.TIM_Period            = 100 - 1;
    TIM_Configure.TIM_Prescaler         = 90  - 1;
    TIM_Configure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM2, &TIM_Configure);
    
    TIM_OCInitTypeDef TIM_OC_Configure;
    
    TIM_OC_Configure.TIM_OCMode         = TIM_OCMode_Toggle;
    TIM_OC_Configure.TIM_OutputState    = TIM_OutputState_Enable;
    TIM_OC_Configure.TIM_OutputNState   = TIM_OutputNState_Disable;
    TIM_OC_Configure.TIM_Pulse          = 0;
    TIM_OC_Configure.TIM_OCPolarity     = TIM_OCPolarity_High;
    TIM_OC_Configure.TIM_OCNPolarity    = TIM_OCNPolarity_High;
    TIM_OC_Configure.TIM_OCIdleState    = TIM_OCIdleState_Reset;
    TIM_OC_Configure.TIM_OCNIdleState   = TIM_OCNIdleState_Reset;
    TIM_OC1Init(TIM2, &TIM_OC_Configure);
    
    TIM_SetCompare1(TIM2, 30);
    TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Enable);
    
    return;
}

После этого включаем таймер и поехали.

Ключевой момент - установить значение сравнения TIM_SetCompare1(TIM2, ...) и включить сам канал захвата/сравнения TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Enable).

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


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

"TIM1->BDTR |= TIM_BDTR_MOE;"?

Вот эти зубодробительные инициализации при помощи "полезных" библиотек только всё запутывают.

 

Спасибо большое. Помогло :biggrin:

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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