其他分享
首页 > 其他分享> > STM32定时器同步功能2

STM32定时器同步功能2

作者:互联网

STM32定时器同步功能2:用一个定时使能另外一个定时器

测试芯片:STM32L151C8T6

代码库:LL库

本例中,TIM3为主定时器,TIM2为从定时器,通过TIM 3 的更新事件使能TIM2,TIM2 收到触发信号时,其 CEN 位会自动置 1,并且计数器开始计数,直到向 TIM2_CR1 寄 存器的 CEN 位写入“ 0 ”才停止计数。   使用注意事项: 1.使用LL库初始化TIM3时单独配置各个功能,建议不要使用LL_TIM_Init初始化函数,因为这个函数初始化配置后会软件产生一次更新事件,此时即使TIM3还未使能也会把TIM2给触发了。根据自己的应用情况去选择,我因为这个坑(也不能算坑吧),调试了好久。   参考代码:
/**
  * 说明 : 主定时器初始化,用来控制从定时器
  * 参数 : 无
  * 返回 : 无
  */
void Master_Timer_Init(void)
{
  LL_TIM_InitTypeDef TIM_InitStruct = {0};
  LL_TIM_OC_InitTypeDef TIM_OC_InitStruct = {0};	
	
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3);	
	
  /** 定时器时基配置(单独调用各个配置函数) */
  LL_TIM_SetAutoReload(TIM3, 1000);
  LL_TIM_SetPrescaler(TIM3, 31);
  LL_TIM_SetCounterMode(TIM3, LL_TIM_COUNTERMODE_UP);
  LL_TIM_EnableARRPreload(TIM3);
  LL_TIM_SetClockSource(TIM3, LL_TIM_CLOCKSOURCE_INTERNAL);
  /** 将定时器更新事件作为触发源输出 */
  LL_TIM_SetTriggerOutput(TIM3, LL_TIM_TRGO_UPDATE);
  LL_TIM_DisableMasterSlaveMode(TIM3);

}

/**
  * 说明 : 从定时器
  * 参数 : 无
  * 返回 : 无
  */
void Slave_Timer_Init(void)
{
  LL_TIM_InitTypeDef TIM_InitStruct = {0};
	
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);
	
	/** 定时器时基配置 */
  TIM_InitStruct.Prescaler = 31;
  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
  TIM_InitStruct.Autoreload = 99;
  TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
  LL_TIM_Init(TIM2, &TIM_InitStruct);
  LL_TIM_EnableARRPreload(TIM2);
  LL_TIM_SetClockSource(TIM2, LL_TIM_CLOCKSOURCE_INTERNAL);

  /** 触发模式 */
  LL_TIM_SetSlaveMode(TIM2, LL_TIM_SLAVEMODE_TRIGGER);
  LL_TIM_SetTriggerInput(TIM2, LL_TIM_TS_ITR2);	/** 和主定时器绑定 */
  LL_TIM_EnableMasterSlaveMode(TIM2);	/** 从模式使能 */

  /** 配置中断 */
  LL_TIM_EnableIT_TRIG(TIM2);
  LL_TIM_EnableIT_UPDATE(TIM2);
	
  NVIC_EnableIRQ(TIM2_IRQn); 
  NVIC_SetPriority(TIM2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 1, 0));
	
}

/**
  * 说明 : 使能定时器
  * 参数 : 无
  * 返回 : 无
  */ 
void Start_Timer(void)
{
	LL_TIM_EnableCounter(TIM3);
}

 

实验结果:

初始化主从定时器后,此时TIM2, TIM3都没有运行,当调用函数Start_Timer后TIM3开始运行,当TIM3产生了更新中断后,TIM2开始运行。此时停止TIM3不会影响TIM2运行,要想停止TIM2必须向TIM2_CR1 寄

存器的 CEN 位写入“ 0 ”

 

   

标签:TIM2,TIM3,同步,LL,STM32,TIM,定时器,InitStruct
来源: https://blog.csdn.net/qq_27718231/article/details/117152995