cancel
Showing results for 
Search instead for 
Did you mean: 

Hi, I want to do phase shifting using complementary output at Timer1 using CH1 and CH1N. I believe it can be done using CCR2 register.

Suraj1
Associate

MX_TIM1_Init();

 /* USER CODE BEGIN 2 */

 RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // Enable timer1

 //RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;

 TIM1->CCMR1 |= 0x0000E8E8; // CH1 & CH2 Output Compare(CC1S), Preload(OC1PE), PWM1 Enable(OC1M)*

 TIM1->CCMR2 |= 0x000000E8; // CH3 Output Compare(CC3S), Preload(OC3PE), PWM1 Enable(OC3M)*

 TIM1->CCER |= 0x00000555; // complementary output enable CH1,CH3

 TIM1->CR1 |= 0x000000A1;  // Centre Align Mode 1 & Counter Enable Auto-reload Preload enable

 TIM1->CR2 |= 0x00000045; // CCPC:1(Update CCxE,CCxNE,OCxM for event, OC1Ref: trigger output)

 TIM1->ARR = 266;    

 TIM1->CCR1 = 133; // 50% Duty cycle

 TIM1-> CCR2 = 53;

 TIM1->CCR3 = 133;

 TIM1->BDTR |= 0x00008800; // Enable Main O/P & Enable OSSR

/* TIM1 init function */

static void MX_TIM1_Init(void)

{

 TIM_ClockConfigTypeDef sClockSourceConfig;

 TIM_MasterConfigTypeDef sMasterConfig;

 TIM_OC_InitTypeDef sConfigOC;

 TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;

 htim1.Instance = TIM1;

 htim1.Init.Prescaler = 0;

 htim1.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED1;

 htim1.Init.Period = 532/2;

 htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

 htim1.Init.RepetitionCounter = 0;

 htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

 sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;

 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

 sConfigOC.OCMode = TIM_OCMODE_TIMING;

 sConfigOC.Pulse = 0;

 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

 sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;

 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

 sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;

 sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;

 sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_ENABLE;

 sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE;

 sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;

 sBreakDeadTimeConfig.DeadTime = 12;

 sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;

 sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;

 sBreakDeadTimeConfig.BreakFilter = 0;

 sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;

 sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;

 sBreakDeadTimeConfig.Break2Filter = 0;

 sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;

 HAL_TIM_MspPostInit(&htim1);

}

0 REPLIES 0