Jump to content

    
Sign in to follow this  
Vittok007

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

Recommended Posts

Привет всем. Подскажите как с помощью таймера в 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кГц). В чем причина?

Share this post


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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

     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

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this