Jump to content

    
Sign in to follow this  
misyachniy

Не запускается режим ШИМ STM32F100C8

Recommended Posts

Понадобилось в проекте добавить ШИМ для генерации отрицательного напряжения в схеме.

Перепробовал больше 5 вариантов скачанных с сети, сгенерил с куба только один вывод с ШИМ.

Никак не запускается.

Взял с F103 пример для TIM3 - все работает сразу.

Вернулся к TIM15. Специально вынес отличающиеся части в дефайны и перепробовал 4 варианта GPIO_PinRemapConfig - все равно никак.

С TIM3 даже GPIO_PinRemapConfig, не нужен

В чем же может быть вопрос?

#define INVERTER_TIMER  TIM3
#define INVERTER_PIN  (1<<7)
#define INVERTER_PORT  GPIOA
#define INVERTER_REMAP  GPIO_FullRemap_TIM3
#define RCC_TIMER_ENABLE()  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE)
#define RCC_TIMER_UNRESET()  RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, DISABLE);

/*
#define INVERTER_TIMER  TIM15
#define INVERTER_PIN  (1<<3)
#define INVERTER_PORT  GPIOA
#define INVERTER_REMAP  GPIO_Remap_TIM15
#define RCC_TIMER_ENABLE()  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM15, ENABLE)
#define RCC_TIMER_UNRESET()  RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM15, DISABLE);
*/

//GPIO_Remap_TIM15        ((uint32_t)0x80000001) 
//AFIO_MAPR2_TIM15_REMAP  ((uint32_t)0x00000001) 

  
//---------------------------------------------------------------------------
// Инициализация таймера для генерации отрицательного напряжения
void inverter_generator_init(unsigned short half_period)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 TIM_OCInitTypeDef TIM_OCInitStructure;

  GPIO_InitStructure.GPIO_Pin =  INVERTER_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //GPIO_Speed_50MHz;
  GPIO_Init(INVERTER_PORT, &GPIO_InitStructure);

 //GPIO_PinRemapConfig(INVERTER_REMAP, DISABLE);
   
     
 //  GPIO_PinRemapConfig(GPIO_Remap_TIM15, DISABLE);
 //  GPIO_PinRemapConfig(AFIO_MAPR2_TIM15_REMAP, DISABLE);

//    GPIO_PinRemapConfig(GPIO_Remap_TIM15, DISABLE);
//    GPIO_PinRemapConfig(AFIO_MAPR2_TIM15_REMAP, ENABLE);

//    GPIO_PinRemapConfig(GPIO_Remap_TIM15, ENABLE);
//    GPIO_PinRemapConfig(AFIO_MAPR2_TIM15_REMAP, DISABLE);

//    GPIO_PinRemapConfig(GPIO_Remap_TIM15, ENABLE);
//    GPIO_PinRemapConfig(AFIO_MAPR2_TIM15_REMAP, ENABLE);
  
  // Init PWM TIM
  // Enable Timer clock and release reset
  RCC_TIMER_ENABLE();
  RCC_TIMER_UNRESET();

  TIM_InternalClockConfig(INVERTER_TIMER);

  // Time base configuration
  TIM_TimeBaseStructure.TIM_Prescaler = 15;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_Period = half_period*2 -1; 
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
  TIM_TimeBaseInit(INVERTER_TIMER, &TIM_TimeBaseStructure);

  // Channel 2 Configuration in PWM mode
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputEnable;
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNEnable;
  TIM_OCInitStructure.TIM_Pulse = 0x00;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleSet;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleReset;
  TIM_OC2Init(INVERTER_TIMER,&TIM_OCInitStructure);
  
  // Double buffered
  TIM_ARRPreloadConfig(INVERTER_TIMER, ENABLE);
  
  // INVERTER_TIMER counter enable
  TIM_Cmd(INVERTER_TIMER,ENABLE);

  INVERTER_TIMER->CCR2 = half_period;
}

 

Share this post


Link to post
Share on other sites
3 hours ago, A.Lex said:

"Волшебную" строку не забыли?

 /* Enable the TIM Main Output */
    TIMx->BDTR |= TIM_BDTR_MOE;

Спасибо :-)

Даже ремапить не понадобилось.

С ремап вроде логично если написал 

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

То понятно что мультилексор отключит GPIO и включит альтернативную функцию. Но TIM3 работает и без волшебной строки, а TIM15 требует.

Вредительство. ;-)

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