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

Помогите разобраться с таймером в STM32F2xx

Привет всем. Подскажите как с помощью таймера в stm32 менять состояние вывода микроконтроллера на противоположное с достаточно высокой частотой(порядка 10 МГц)??? Делал вот так:

#define TIM8_OUT_FREQ 1000000
//Настраивем таймер
void TIM8_Config(void)
{
 uint16_t PrescalerValue;  
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);

 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
 //Enable the TIM8 gloabal Interrupt 
 NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);

 //Вычисляем значение предделителя
 PrescalerValue = (uint16_t)((SystemCoreClock / TIM8_OUT_FREQ) - 1);
 //Настраиваем таймер
 TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); 
 TIM_TimeBaseStructure.TIM_Period = 1;		             
 TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;   
 TIM_TimeBaseStructure.TIM_ClockDivision = 0; 	  
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
 TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);              
 //Prescaler configuration
//  TIM_PrescalerConfig(TIM8, PrescalerValue, TIM_PSCReloadMode_Immediate);     
 //Разрешаем прерывание по обновлению
 TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE);
 //Врубаем таймер
 TIM_Cmd(TIM8, ENABLE);  
 //Разрешаем обработку прерывания по переполнению счетчика TIM8
 NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);    
}
//Обработчик прерывания
void TIM8_UP_TIM13_IRQHandler()
{
  if (TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET) 
  { //Очищаем бит обрабатываемого прерывания
   TIM_ClearITPendingBit(TIM8, TIM_IT_Update);	     
   //Инвертируем сомтояние порта
GPIO_Write(GPIOC, GPIO_ReadOutputData(GPIOC) ^ (GPIO_Pin_6));

  }
} 

Работает, но выходная частота не поднимается выше 428,5кГц(???), даже если задаю 1мегагерц, например. А если задаю более низкую частоту(например, 200кГц), то частота на выходе в 4 раза меньше(50кГц). В чем причина?

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


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

Привет всем. Подскажите как с помощью таймера в stm32 менять состояние вывода микроконтроллера на противоположное с достаточно высокой частотой(порядка 10 МГц)???

Работает, но выходная частота не поднимается выше 428,5кГц(???), даже если задаю 1мегагерц, например. А если задаю более низкую частоту(например, 200кГц), то частота на выходе в 4 раза меньше(50кГц). В чем причина?

Использовать аппаратный ШИМ.

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


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

Можно настроить таймер на ногодрыгание без прерываний. Тогда не будет тратится ресурсы на переключение состояния вывода. Пример попробую в понедельник скинуть.

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


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

Так рядом все есть. Все уже украдено до вас.

http://electronix.ru/forum/index.php?showt...t&p=1123108

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


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

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

     TIM_TimeBaseStructure.TIM_Period = 3;// 4MHz
     TIM_TimeBaseStructure.TIM_Prescaler = 0;
     TIM_TimeBaseStructure.TIM_ClockDivision = 0;
     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse =0;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC2Init(TIM4, &TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Disable);
  TIM_Cmd(TIM4, ENABLE);

настраивается канал TIM4-CH2

 

 

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


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

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

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

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

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

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

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

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

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

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