STM32定时器同步功能1

STM32定时器同步功能1:将一个定时器用作另一个定时器的预分频器

测试程序说明:

测试芯片为STM32L151C8T6, 程序库使用的是LL库

用TIM3为主定时器,产生更新事件,并产生触发输出(TGRO)给TIM2,TIM2的时钟来自TIM3的TGRO信号,TIM2作为从定时器,配置为PWM输出模式。

内部触发连接如下图:

 

/**
  * 说明 : 从定时器初始化,用来生成PWM
  * 参数 : 无
  * 返回 : 无
  */ 
void Pwm_Timer_Init(void)
{
   LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
   LL_TIM_InitTypeDef TIM_InitStruct = {0};
   LL_TIM_OC_InitTypeDef TIM_OC_InitStruct = {0};
	
   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
   LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);
	
	/** PWM_OUT->PA0 */
	GPIO_InitStruct.Pin=LL_GPIO_PIN_0;
	GPIO_InitStruct.Mode=LL_GPIO_MODE_ALTERNATE;
	GPIO_InitStruct.Speed=LL_GPIO_SPEED_FREQ_HIGH;
	GPIO_InitStruct.Pull=LL_GPIO_PULL_UP;
	GPIO_InitStruct.Alternate=LL_GPIO_AF_1;
	LL_GPIO_Init(GPIOA, &GPIO_InitStruct);	
	
	/** 定时器时基配置:注意此时TIM2的时钟源来自TIM3即100K */
   TIM_InitStruct.Prescaler = 9;  /** 10分频即10K */
   TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
   TIM_InitStruct.Autoreload = 9; /** 装载值10即周期为1KHz */
   TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
   LL_TIM_Init(TIM2, &TIM_InitStruct);
   LL_TIM_EnableARRPreload(TIM2);

	/** 输出模式配置 */
   TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;
   TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;
   TIM_OC_InitStruct.CompareValue = 5; /** 50%占空比 */
   TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_LOW;
   LL_TIM_OC_Init(TIM2, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct);
   LL_TIM_OC_EnablePreload(TIM2, LL_TIM_CHANNEL_CH1);	
   LL_TIM_OC_DisableFast(TIM2, LL_TIM_CHANNEL_CH1);

	/** 触发模式 */
	LL_TIM_SetSlaveMode(TIM2, LL_TIM_SLAVEMODE_TRIGGER); /** 不要也行 */
  /** 选择输入触发源(即TIM3生成的时钟) */
	LL_TIM_SetTriggerInput(TIM2, LL_TIM_TS_ITR2); /** 选哪个看内部触发连接图,手册提供的 */
   LL_TIM_EnableMasterSlaveMode(TIM2);	
  /** 时钟源设置为模式1  */
	LL_TIM_SetClockSource(TIM2, LL_TIM_CLOCKSOURCE_EXT_MODE1);
	
   LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH1);	
	LL_TIM_EnableCounter(TIM2);
   LL_TIM_GenerateEvent_UPDATE(TIM2);
}

/**
  * 说明 : 主定时器初始化,用来控制从定时器
  * 参数 : 无
  * 返回 : 无
  */
void Master_Timer_Init(void)
{
	LL_TIM_InitTypeDef TIM_InitStruct = {0};
   LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3);	
	
	/** 定时器时基配置:输出频率100K */
   TIM_InitStruct.Prescaler = 31;
   TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
   TIM_InitStruct.Autoreload = 9;
   TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
   LL_TIM_Init(TIM3, &TIM_InitStruct);
   LL_TIM_EnableARRPreload(TIM3);

   LL_TIM_EnableMasterSlaveMode(TIM3);	
  /** 输出源选择:更新事件 */
	LL_TIM_SetTriggerOutput(TIM3, LL_TIM_TRGO_UPDATE);
}

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

/**
  * 说明 : 关闭定时器产生PWM
  * 参数 : 无
  * 返回 : 无
  */ 
void Stop_Timer(void)
{
	LL_TIM_DisableCounter(TIM3);
	LL_TIM_ClearFlag_CC1(TIM3);	
}

 

输出波形图:

 

从波形可以看出输出的信号是一个频率为1KHz占空比50%的PWM波,和预期一致。

 

 

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: STM32定时器触发同步规则组是一种在STM32微控制器中使用的定时器配置模式。它的作用是利用定时器触发来实现多个外设之间的同步操作。 在STM32微控制器中,有多个定时器模块可用于不同的应用需求。这些定时器模块提供了多种功能,如计时、PWM输出、编码器输入等。在一些应用中,我们可能需要多个定时器模块以同步运行,此时就可以使用定时器触发同步规则组。 定时器触发同步规则组允许我们设置一个主定时器,并将其他定时器模块设置为从定时器。主定时器可以通过定时器的输出信号来驱动其他定时器模块的启动、停止、重装载等操作。这样,所有定时器模块的运行将同步在一起,提高了多个外设之间的协同工作效率。 在使用定时器触发同步规则组时,我们需要先配置定时器模块的时钟源、计数模式、重载值等参数。然后,在主定时器溢出或其他特定事件发生时,它会触发其他定时器模块执行相应的操作。这些触发事件可以是定时器中断、外部信号触发、输入捕获等。 总的来说,通过STM32定时器触发同步规则组的使用,我们可以实现多个外设之间的同步操作,提高系统的性能和效率。但在配置和使用过程中,我们需要仔细考虑各个定时器模块的功能和参数设置,以确保它们能够按照要求同步工作。 ### 回答2: STM32定时器触发同步规则组是指在STM32系列微控制器中,通过配置定时器的触发源和同步规则,实现定时器之间的同步操作。 同步规则组主要包括以下几种: 1. 软件同步:通过编程方式触发定时器的启动和停止操作,使多个定时器在同一时刻开始计时或停止计时。 2. 外部触发同步:通过配置定时器的外部触发源,将多个定时器连接到同一个外部事件源上,使得这些定时器在相同的外部事件触发时开始计时或停止计时。 3. 主从同步:通过配置定时器的主时钟源(Master)和从时钟源(Slave),将多个定时器连接为主从关系,使得主定时器的计时周期可以控制从定时器的启动和停止。 4. 多级级联同步:通过配置定时器的级联模式,将多个定时器级联在一起,使得整个定时器系统按照级联顺序依次开始计时或停止计时。 通过合理配置同步规则组,可以实现多个定时器之间的同步操作,提高系统的定时精度和稳定性。同时,也可以根据具体应用需求,灵活选择不同的同步规则组。在STM32系列微控制器中,定时器触发同步规则组使得定时器的应用更加灵活和可靠。 ### 回答3: STM32定时器触发同步规则组是指具有相同触发源的多个定时器组成的一组规则。在STM32微控制器中,我们可以使用定时器触发同步规则组来实现对各个定时器同步控制。 定时器触发同步规则组通常由一个主定时器和多个从定时器组成。主定时器负责产生触发信号,然后通过触发信号来启动或停止从定时器的计数。这样可以保证多个定时器的计数始终保持同步。 在使用STM32定时器触发同步规则组时,我们可以通过配置主定时器的计数模式、预分频器和自动重载寄存器等参数来控制触发信号的产生频率和触发时机。同时,我们还可以通过配置从定时器的计数模式、预分频器和自动重载寄存器等参数来控制从定时器的计数方式和计数范围。 通过定时器触发同步规则组,我们可以实现多个定时器之间的同步操作。例如,我们可以将主定时器的触发信号连接到从定时器的启动输入,当主定时器计数满足预设条件时,触发信号会传递到从定时器并启动其计数。这样就可以实现多个定时器同时开始计数,从而实现系统中多个定时任务的同步执行。 总之,STM32定时器触发同步规则组是一种用于实现多个定时器之间同步控制的功能强大的技术。它可以帮助我们实现复杂的定时任务,并提高系统的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值