STM32Cube学习一 TIME定时器SlaveMode设置讲解

之前学习STM32标准库并没有注意到SlaveMode这个选项,这一次使用Cube中发现了必须要去选择 这一个选项。

一、Cube中需要选择选项

总共有5中,Disable、外部时钟模式1,复位模式,门级驱动模式,触发模式

从手册中寻找以上解释见二

二、TIME

如表示为定时器框图,总共分为四个部分,第一个部分提供时钟源,第二个部分是输入部分,第三个部分是比较寄存器和计数器以及自动重装载寄存器,第四个部分是输出部分。

1.时钟源选择如下

如图是时钟源的选择,可以有内部、外部输入引脚1和2、内部触发输入(多个定时器级联)。这个主要选择计数器的计数时钟来源,一般选择内部时钟就够了,需要多个定时器一起作用时候可以选择其他模式,Cube中External Clock Mode1 就是对应这一条。

2.比较捕获(具体参考手册)

3.输出比较模式(具体参考手册)

4.复位,触发,门驱动(都是针对输入的从模式下

TIMx定时器能够在多种模式下和一个外部的触发同步:复位模式、门控模式和触发模式。

(1)从模式——复位模式:在发生一个触发输入事件时,计数器和它的预分频器能够重新被初始化;同时,如果TIMx_CR1寄存器的URS位为低,还会产生一个更新事件UEV;然后所有的预装载寄存器(TIMx_ARR, TIMx_CCRx)都会被更新。

计数器开始依据内部时钟计数,然后正常运转直到TI1出现一个上升沿;此时,计数器被清零然后从0重新开始计数。同时,触发标志(TIMx_SR寄存器中的TIF位)被设置,根据TIMx_DIER寄存器中TIE(中断使能)位和TDE(DMA使能)位的设置,产生一个中断请求或一个DMA请求。

下图显示当自动重装载寄存器TIMx_ARR=0x36时的动作。在TI1上升沿和计数器的实际复位之间的延时,取决于TI1输入端的重同步电路。

(2)从模式——门控模式

按照选中的输入端电平使能计数器。 在如下的例子中,计数器只在TI1为低时向上计数:

● 配置通道1以检测TI1上的低电平。配置输入滤波器带宽(本例中,不需要滤波,所以保持IC1F=0000)。触发操作中不使用捕获预分频器,所以不需要配置。CC1S位用于选择输入捕获源,置TIMx_CCMR1寄存器中CC1S=01。置TIMx_CCER寄存器中CC1P=1以确定极性(只检测低电平)。

● 置TIMx_SMCR寄存器中SMS=101,配置定时器为门控模式;置TIMx_SMCR寄存器中TS=101,选择TI1作为输入源。

● 置TIMx_CR1寄存器中CEN=1,启动计数器。在门控模式下,如果CEN=0,则计数器不能启动,不论触发输入电平如何。 只要TI1为低,计数器开始依据内部时钟计数,在TI1变高时停止计数。当计数器开始或停止时都设置TIMx_SR中的TIF标置。 TI1上升沿和计数器实际停止之间的延时,取决于TI1输入端的重同步电路。

(3)从模式——触发模式

输入端上选中的事件使能计数器。 在下面的例子中,计数器在TI2输入的上升沿开始向上计数:

● 配置通道2检测TI2的上升沿。配置输入滤波器带宽(本例中,不需要任何滤波器,保持IC2F=0000)。触发操作中不使用捕获预分频器,不需要配置。CC2S位只用于选择输入捕获源,置TIMx_CCMR1寄存器中CC2S=01。置TIMx_CCER寄存器中CC2P=1以确定极性(只检测低电平)。

● 置TIMx_SMCR寄存器中SMS=110,配置定时器为触发模式;置TIMx_SMCR寄存器中TS=110,选择TI2作为输入源。 当TI2出现一个上升沿时,计数器开始在内部时钟驱动下计数,同时设置TIF标志。

TI2上升沿和计数器启动计数之间的延时,取决于TI2输入端的重同步电路。

  • 30
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用定时器的同步输出功能实现多路PWM波道的同步发送。具体步骤如下: 1. 配置定时器为PWM模式,并设置好PWM输出频率和占空比。 2. 启用定时器的同步输出功能,使得多个PWM波道的输出被同步。 3. 配置定时器的触发源,并使得多个PWM波道的触发源相同,以确保它们在同一时刻开始输出。 4. 启用多个PWM波道的输出,使得它们在同一时刻开始输出。 代码实现示例: ```c // 配置定时器为PWM模式 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 设置PWM输出频率和占空比 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_Period = 999; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_Pulse = 499; TIM_OC1Init(TIM2, &TIM_OCInitStructure); TIM_OC2Init(TIM2, &TIM_OCInitStructure); TIM_OC3Init(TIM2, &TIM_OCInitStructure); // 启用定时器的同步输出功能 TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Enable); // 配置定时器的触发源 TIM_SelectInputTrigger(TIM2, TIM_TS_ITR0); TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Trigger); // 启用多个PWM波道的输出 TIM_Cmd(TIM2, ENABLE); TIM_CtrlPWMOutputs(TIM2, ENABLE); ``` 在上面的示例中,TIM2被配置为PWM模式,并设置了三个PWM输出通道(OC1、OC2和OC3)。定时器的触发源被设置为ITR0,并启用了同步输出功能。最后,启用了多个PWM波道的输出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值