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

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

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

Перепробовал больше 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;
}

 

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


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

Такты для портов разрешили?
Reference Manual читали?

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


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

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 требует.

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

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


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

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

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

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

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

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

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

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

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

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