基于STM32F407系列开发板通用定时器输入捕获和输出比较功能

1)通用定时器特征

具有基本定时器的所有功能,外加输入捕获和输出比较的功能。

TIM2-TIM5的特点

根据中文参考手册:
在这里插入图片描述

TIM9-12的特点

和TIM2~TIM5的区别 重装载值全部为16位的 只支持递增 只有2个独立通道

TIM10/11/13/14的特点

和TIM9/12的区别在于只有一个独立通道

总结通用定时器的共同点

只有记住所有定时器都支持16位的递增计数方式,分频系数在1~65536之间

通用定时器的基本框架图

在这里插入图片描述
通用定时器的基本时基单元分为:
计数器寄存器:CNT
自动重装载值寄存器:ARR
预分频系数寄存器:PSC

通用定时器时钟源选择

一般选择内部时钟,因为内部时钟稳定、同步、方便的特点,可以由单片机直接提供
在这里插入图片描述
使用内部时钟源需要禁止从模式控制器( TIMx_SMCR 寄存器中 SMS=000),在TIMx_CR1 寄存器中, CEN (时钟使能)位、 DIR 位( 计数器计数方向位,向上或向下计数)和 UG 位( 更新事件生成位)为实际控制位,并且只能通过寄存器位操作更改(UG 除外,仍自动清零)。当对 CEN 位写入 1 时,预分频器的时钟就由内部时钟 CK_INT 提供,所以一般会写在配置通用定时器最后一行

3)外部时钟源选择

TIMx_SMCR 寄存器中用来选择外部时钟
在这里插入图片描述
如果 SMS=111 时,根据上图描述1111:fSAMPLING=fDTS/32,N=8
需要求fSAMPLING,就需要知道fDTS的大小(CR1寄存器的8~9位)
例如CR1我们选择了10这个选项
10:tDTS=4×tCK_INT
fCK_INT为定时器时钟 STM32F407VG的TIM2(84MHz)
tDTS为tCK_INT的四倍 fDTS为fCK_INT的1/4
fDTS=84MHz/4=21MHz
此时fSAMPLING=fDTS/32=656.250KHz
N=8表示八个事件为一个有效边沿,再次进行8分频
此时滤波后的频率为fSAMPLING/8=82KHz
当然这只是其中的一种计算方式,我们选择每一种时钟源的触发方式,对我们的输入捕获其实都没什么影响,所以说这16种模式下其实可以任选。

在这里插入图片描述
我们需要清楚滤波器和边沿检测器如何配置、和输入捕获功能的配置
在这里插入图片描述
根据上图我们可以选择:
1.内部时钟(一般我们都选择这个)
2.外部时钟模式1
3.外部时钟模式2

对于捕获输入通道选择

在输入模式下,无论是什么通道CCMR寄存器的捕获配置都选择01模式,即CCn通道映射到TIn线上
在这里插入图片描述
在这里插入图片描述

捕获实验代码流程

在这里插入图片描述
例如:输入捕获外来电平时长
从通道获取一个高电平 经过输入滤波边沿检测 先捕获到一个上升沿—>开始计时—>检测到下降沿时结束计时 这段时间就是高电平时长

代码中,边沿检测可选择上升沿触发检测、下降沿触发检测或双边沿触发检测
在这里插入图片描述
输出时,给到CCR一个值 通过CNT和CCR的关系输出高低电平
输入时,需要读取CCR的值来判断这段时间为多久 例如检测到上升沿时读取一次CCR的值(此时为start_ccr)、检测到下降压时再读取一次CCR(此时为end_ccr)、通过这两个值就可以判断这段高电平时长 (CCR的值来自CNT)

CNT:只能记录当前的计数次数 计数一次的时长要看基准时钟 计数范围:0~arr

在这里插入图片描述
通过上图的公式,就可以捕获输入高电平的时长啦~~

4)通用定时器的比较输出

占空比:有效电平/周期
有效电平有可能是高电平也有可能是低电平
在这里插入图片描述

示例:一个灯给低电平亮 代码中配置高电平为有效电平 无效电平占比越大灯越亮
一个电机给高电平转 代码中配置高电平为有效电平 有效电平占比越大电机转速越快
周期:根据fck psc arr 例如fck=84MHz psc=42K arr=2000 周期:1s
在这里插入图片描述

ccr:比较值,可控制占空比
根据参考手册:如果选择PWM1模式,当CNT<CCR为有效电平,CNT>CCR为无效电平
如果选择PWM2模式,当CNT>CCR为有效电平,CNT<CCR为无效电平
一般都不选择中央对齐模式

通过CCR寄存器的值控制输出波形占空比

往寄存器TIMx->CCRn里写值(0-arr范围内),可以控制输出波形的占空比,例如高电平为有效电平,灯在高电平情况下为亮,在PWM1模式下,可以调大CCR的值LED灯就会越亮,从而可以完成呼吸灯的实验。

比较输出的代码流程

1.打开时钟(LED的GPIO口时钟 对应的TIMx->CHn时钟)
2.配置IO为复用模式
3.更新禁止
在这里插入图片描述

4.单脉冲模式

5.计数方向—递增
6.Arr不缓冲(不使用影子寄存器模式)
7.禁止从模式 选择内部时钟源
8.UG更新生成
9.通道配置为输出
10.输出比较预装载使能
11.选择PWM模式
12.开启通道
13.选择有效电平
14.配置时基单元
15.使能计数器
16.调节CCR的值更改灯的亮度

5)中断服务函数使能位

在DIER(DMA/中断使能)寄存器中,若需要哪一个通道的中断服务函数,就需要将该中断使能打开,0位位更新事件中断也可称为周期中断
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值