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输入端的重同步电路。

### STM32 定时器从模式 (TIM Slave Mode) 配置和使用 #### 1. 定义定时器外设寄存器映射 为了操作特定的硬件资源,在代码中通常会通过宏定义来访问定时器的寄存器。例如,对于 TIM2 的配置可以如下所示: ```c #define TIM2 ((TIM_TypeDef *) TIM2_BASE) ``` 这使得可以直接利用 `TIM2` 来读写定时器的相关控制位与状态位[^3]。 #### 2. 启用定时器时钟并初始化 GPIO 及其他必要设置 在进入具体的从模式配置之前,需确保已经启用了对应定时器的时钟,并完成了任何必要的GPIO 初始化工作以及中断优先级设定等预处理任务。 #### 3. 设置输入捕获通道用于同步信号接收 当作为外部事件触发源时,可选用任意可用作输入捕捉功能的 I/O 引脚连接到另个设备产生的脉冲序列上;之后根据实际需求调整 CCMR1/CCMR2 寄存器内的相应字段以指定该通道的工作方式——上升沿、下降沿或是双边沿检测均可被支持。 #### 4. 编程 ITESM 控制字节决定如何响应外部条件变化 接下来要做的就是确定希望本机定时器怎样对外部发生的状况作出反应了。可以通过修改 EGR 和 SMCR 中的些标志位实现这点,比如使能 TIxFP 输入滤波器或者选择合适的触发组合逻辑等等。 - **SMCFG[2:0]** 字段用来挑选期望采用哪种类型的主控机制; - 如果选择了软件触发,则只需简单地向 UG 位置入 '1' 即可启动计数过程; - 对于由内部或外部边沿驱动的情形而言,则应依据具体情况分别对待。 #### 5. 实现具体应用场景下的编程接口函数 最后步便是封装系列便于调用的方法以便应用程序层能够轻松地开启/停止计时、查询当前值乃至重装载初始参数等系列常规动作。这些辅助性的 API 将极大地简化后续开发流程中的编码难度。 ```c void TIM_ConfigSlaveMode(TIM_HandleTypeDef *htim, uint32_t SlaveMode); HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization(TIM_HandleTypeDef* htim, const TIM_SlaveConfigTypeDef* sSlaveConfig); ``` 以上两个函数可以帮助快速完成基于不同场景需求定制化的从属模式联结方案构建[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值