cancel
Showing results for 
Search instead for 
Did you mean: 

Reset state slave timer

dwjbosman
Associate

Chip: STM32H747

I have setup a master timer. 

 

 

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; 
  sMasterConfig.MasterSlaveMode     = TIM_MASTERSLAVEMODE_ENABLE;



And two slave timers each with

 

 

 

  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_COMBINED_RESETTRIGGER;

  sConfigOC.OCMode     = TIM_OCMODE_TOGGLE;
  sConfigOC.Pulse      = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

 

 


The slave timers correctly start when the master timer starts
I first start the slave timer

 

 

  HAL_TIM_Base_Start(&htim_adc);
  HAL_TIM_OC_Start(&htim_adc, ADC_SAMPLING_TIMER_CHANNEL);


..as expected no timer output until I start the master timer
At a certain moment I stop the master and slave timers

 

 
 

 

  HAL_TIM_OC_Stop(&master, ...);
  HAL_TIM_Base_Stop(&master);
// reset
  HAL_TIM_GenerateEvent(&master, ...);
  __HAL_TIM_SET_COUNTER(&master, 0);
// also stop/reset the slave timer
  HAL_TIM_OC_Stop(&htim_adc, ADC_SAMPLING_TIMER_CHANNEL);
  HAL_TIM_Base_Stop(&htim_adc);
  HAL_TIM_GenerateEvent(&htim_adc, TIM_EVENTSOURCE_UPDATE);
  __HAL_TIM_SET_COUNTER(&htim_adc, 0);


Then I restart the timer, it won't be enabled until master actually starts:

HAL_TIM_Base_Start(&htim_adc);
HAL_TIM_OC_Start(&htim_adc, ADC_SAMPLING_TIMER_CHANNEL);​

 

But,  now, even though the master time is not started,  sometimes the channel output changes once. It seems that the previous timer counter value vs. compare state plays a role in this. How do I also reset the timer output?

I have checked the register values in the htim_adc.Instance struct. There was no difference, in the 2 situations.

  








1 REPLY 1
dwjbosman
Associate

I also tried setting the pulse value to period-1, so that setting the counter to zero should not cause a compare. But alas, no effect.