STM32F103定时器配置

一、定时器

定时器,顾名思义,就是用于定时或计数,它其实就是一个加1计数器。

1.1 定时器类型

STM32f103有三类定时器:

类型编号总线功能
高级定时器TIM1、TIME8APB2拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能
通用定时器TIM2、TIM3、TIM4、TIM5APB1拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能
基本定时器TIM6、TIM7APB1拥有定时中断、主模式触发DAC的功能

每个通用定时器TIMx功能:

  • 位于低速的APB1总线上;
  • 16位向上、向下、向上/向下自动装载计数器(TIMx_CNT);
  • 16位可编程预分频器(TIMx_PSC),计数器的时钟频率的分频系数为1~65535之间的任意数值;
  • 4个独立通道(TIMx_CH1~4),这些通道可以用来作为:
    • 输入捕获;
    • 输出比较;
    • PWM生成;
    • 单脉冲模式输出;
  • 可使用外部信号(TIMx_ETR)控制定时器和定时器互联的同步电路;
  • 如下事件发生时产生中断/DMA(6个独立的IRQ/DMA请求生成器):
    • 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或内部外部触发);
    • 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数);
    • 输入捕获;
    • 输出比较;
    • 支持针对定位的增量(正交)编码器和霍尔传感器电路;
    • 触发输入作为外部时钟或者按周期的电流管理;

STM32的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。

使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32的每个通用定时器都是完全独立的,没有互相共享的任何资源。

1.1.1 高级定时器框图
1.1.2 通用定时器框图
1.1.3 基本定时器框图
1.2 计数器模式

通用定时器可以向上计数、向下计数、向上向下双向计数模式。

  • 向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件;
  • 向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件;
  • 中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

具体如下图所示:

img
1.3 功能介绍
1.3.1 定时器中断
在这里插入图片描述
1.3.2输出比较

输出比较可以通过比较CNTCCRx寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形。

输出比较模式:

模式描述
冻结CNT=CCR时,REF保持为原状态
匹配时置有效电平CNT=CCR时,REF置有效电平
匹配时置无效电平CNT=CCR时,REF置无效电平
匹配时置电平翻转CNT=CCR时,REF电平翻转
强制为无效电平CNT与CCR无效,REF强制为无效电平
强制为有效电平CNT与CCR无效,REF强制为有效电平
PWM模式1向上计数:CNT<CCR时,REF置有效电平,CNT≥CCR时,REF置无效电平
向下计数:CNT>CCR时,REF置无效电平,CNT≤CRR时,REF置有效电平
PWM模式2向上计数:CNT<CCR时,REF置无效电平,CNT≥CCR时,REF置有效电平
向下计数:CNT>CCR时,REF置有效电平,CNT≤CRR时,REF置无效电平
1.3.3 PWM基本结构
在这里插入图片描述

PWM频率 :\(F_{req} = CK\_PSC / (PSC + 1) / (ARR + 1)\)

PWM占空比:\(Duty = CCR / (ARR + 1)\)

PWM分辨率:\(Peso = 1 / (ARR + 1)\)

二、定时器相关寄存器

2.1 控制寄存器(TIMx_CR1)

想要使用定时器功能,首先要使能定时器。使能定时器主要用到控制寄存器1(TIMx_CR1),此处重点关注第一位,这一位是计数器使能位,给此位设1,使能计数器;

2.2 DMA/中断使能寄存器(TIMx_DIER)

定时器的使用,很多情况下都伴随着中断,因此下面要重点关注的是DMA/中断使能寄存器(TIMx_DIER)。同样的,只用关注第一位。该位为更新中断允许位,当该位设置为1时,将允许由于更新事件所产生的中断;

2.3 预分频寄存器(TIMx_PSC)

接下来就要确定定时器的时间,定时器的定时是通过频率计算出来的。这里要用到预分频寄存器(TIMx_PSC)。该寄存器用于设置对时钟进行分频,然后提供给计数器,作为计数器的时钟;

计数器计数频率:\(CK\_CNT = 时钟源频率 / 预分频系数 = \frac{CK\_PSC}{PSC + 1}\)

计数器溢出频率 :$CK_CNT_OV = 时钟源频率 / 预分频系数 /自动重装载寄存器 = CK_CNT / (ARR + 1)
= CK_PSC / (PSC + 1) / (ARR + 1) $

2.4 从模式控制寄存器(TIMx_SMCR)

从框图中可以看到统通用定时器时钟来源有以下几个:

  • 内部时钟(CK_INT)默认;
  • 外部时钟模式1:外部输入脚(TIx);
  • 外部时钟模式2:外部触发输入(ETR);
  • 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

时钟源的选择,可以通过从模式寄存器(TIMx_SMCR)的第3位来选择;

2.5 自动重装载寄存器(TIMx_ARR)

下面是自动重载寄存器。自动装载寄存器(TIMx_ARR)是预先装载的,写或读自动重装载寄存器将访问预装载寄存器;

2.6 状态寄存器(TIMx_SR)

三 定时中断源码

3.1 定时中断初始化步骤

定时中断配置流程如下(这里以TIM3为例):

(1) TIM3时钟使能:通过配置RCC_APB1ENR寄存器使能TIM3时钟;

(2) 配置TIM3时基单元;

  • 配置TIM3_ARR寄存器自动重装载的值;

  • 配置TIM3_PSC频寄存器预分频系数;

(3) 配置TIM3_DIER寄存器允许更新中断(UIE=1),清SR寄存器状态标志位(UIF=0);

(4) 设置NVIC;

(4) 中断处理函数;

  • 设置中断服务函数(包括清除中断标志)。

(5) 允许TIM3工作:配置TIM3_CR1位0。

3.2 源码实现
3.3 实现功能

参考文章

[1] STM32F103定时器配置

[2] 正点原子STM32F103学习笔记(十)——定时器、PWM

STM32F103C8T6单片机配置PWM,你可以参考以下步骤: 1. 首先,确保你的开发环境已经正确地配置STM32F103C8T6单片机的标准库函数。 2. 配置系统时钟为72MHz,你可以使用RCC_ConfigTo72M()函数来实现这一步骤。 3. 配置SysTick定时器,使其以72MHz的频率工作。可以使用Systick_Config(72)函数来实现这一步骤。 4. 配置定时器3的PWM功能。你可以使用TIM3_PWM_Config()函数来实现这一步骤。 5. 在配置PWM之前,确认你已经正确地定义了需要使用的GPIO引脚,并使其配置为输出模式。 6. 在PWM配置中,你需要设置PWM的周期和占空比。具体的设置方法取决于你的需求,你可以参考PWM_CompareValue函数来设置红色和蓝色通道的占空比。 7. 最后,启动定时器3开始输出PWM信号。 通过以上步骤,你可以在STM32F103C8T6单片机上成功配置PWM。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [stm32f103——通用定时器输出PWM](https://blog.csdn.net/qq_39577221/article/details/125361634)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [STM32F103输出互补PWM波](https://download.csdn.net/download/qq_20222919/12500678)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Graceful_scenery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值