【实训七】基本定时器和通用定时器

本文详细介绍了STM32中的基本定时器TIM6和TIM7,包括其特性、功能及工作原理。同时,探讨了通用定时器TIMx的额外功能,如输出比较和输入捕获。通过实例展示了如何使用定时器4中断实现小灯闪烁和控制步进电机的操作流程。
摘要由CSDN通过智能技术生成

前言

1、基本定时器(TIM6和TIM7)

基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。这2个定时器是互相独立的,不共享任何资源。

(1)TIM6 和TIM7 的主要特性
TIM6和TIM7定时器的主要功能包括:

  • 16位自动重装载累加计数器。
  • 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值
    分频。
  • 触发DAC的同步电路。
  • 在更新事件(计数器溢出)时产生中断/DMA请求。

(2)基本定时器框图
在这里插入图片描述

(3)TIM6 和TIM7的功能
1)时基单元
这个可编程定时器的主要部分是一个带有自动重装载的16位累加计数器,计数器的时钟通过一个预分频器得到。软件可以读写计数器、自动重装载寄存器和预分频寄存器,即使计数器运行时也可以操作。
时基单元包含:

  • 计数器寄存器(TIMx_CNT)。
  • 预分频寄存器(TIMx_PSC)。
  • 自动重装载寄存器(TIMx_ARR)。

自动重装载寄存器是预加载的,每次读写自动重装载寄存器时,实际上是通过读写预加载寄存器实现。
计数器由预分频输出CK_CNT驱动,设置TIMx_CR1寄存器中的计数器使能位(CEN)使能计数器计数。

预分频器
预分频可以以系数介于1至65536之间的任意数值对计数器时钟分频。它是通过一个16位寄存器(TIMx_PSC)的计数实现分频。如内部时钟源为f=72MHz,预分频72,则f=1MHz(预分频 / 内部时钟源f),T=1us。可以改变延时时间。因为TIMx_PSC控制寄存器具有缓冲,可以在运行过程中改变它的数值,新的预分频数值将在下一个更新事件时起作用。

2)计数模式
计数器从0累加计数到自动重装载数值(TIMx_ARR寄存器),然后重新从0开始计数并产生一个计数器溢出事件。每次计数器溢出时可以产生更新事件;(通过软件或使用从模式控制器)设置TIMx_EGR寄存器的UG位也可以产生更新事件。

当发生一次更新事件时,所有寄存器会被更新并(根据URS位)设置更新标志(TIMx_SR寄存器的
UIF位):

  • 传送预装载值(TIMx_PSC寄存器的内容)至预分频器的缓冲区。
  • 自动重装载影子寄存器被更新为预装载值(TIMx_ARR)。

3)时钟源
计数器的时钟由内部时钟(CK_INT)提供。

2、通用定时器(TIMx)

包含基本定时器的所有功能,并且包含输出比较、输入捕获。

通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。

(1)TIMx 主要功能
通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括:

  • 16位向上、向下、向上/向下自动装载计数器。
  • 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意
    数值。
  • 4个独立通道:输入捕获、输出比较、PWM生成(边缘或中间对齐模式)、单脉冲模式输出。
  • 使用外部信号控制定时器和定时器互连的同步电路。
  • 如下事件发生时产生中断/DMA:①更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)、②触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)、③输入捕获、④输出比较。
  • 支持针对定位的增量(正交)编码器和霍尔传感器电路。
  • 触发输入作为外部时钟或者按周期的电流管理。

(2)通用定时器框图
在这里插入图片描述
在这里插入图片描述
(3)TIMx 功能描述
1)时基单元
可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数器可以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写。
时基单元包含:

  • 计数器寄存器(TIMx_CNT)。
  • 预分频器寄存器 (TIMx_PSC)。
  • 自动装载寄存器 (TIMx_ARR)。
    自动装载寄存器是预先装载的,写或读自动重装载寄存器将访问预装载寄存器。计数器由预分频器的时钟输出CK_CNT驱动,仅当设置了计数器TIMx_CR1寄存器中的计数器使能位(CEN)时,CK_CNT才有效。

预分频器描述
预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。它是基于一个(在TIMx_PSC寄存器中的)16位寄存器控制的16位计数器。这个控制寄存器带有缓冲器,它能够在工作时被改变。新的预分频器参数在下一次更新事件到来时被采用。

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

3)时钟选择
计数器时钟可由下列时钟源提供:

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

一、利用定时器4中断方式实现小灯闪烁

现象:LED会1S亮1S灭的闪烁。
配置流程:
1)开定时器4的时钟
2)定时器4初始化
3)打开更新中断(NVIC开关和定时器外设的中断源开关)
4)使能定时器4
5)编写中断服务函数

1、编写tim4.c文件。

#include "tim4.h"

void Tim4_Init(void)
{
   
	//1、开定时器4的时钟。总线APB1、APB2看STM32F103C8T6.pdf文件
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4 ,ENABLE);
	
	//2、定时器4初始化
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频因子位1
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; //向上计数
	TIM_TimeBaseInitStruct.TIM_Period = 10000;  //自动重加载寄存器最大值为65535
	TIM_TimeBaseInitStruct.TIM_Prescaler = 7200-1; //定时1s
	TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStruct);
	
	//3、打开更新中断(NVIC开关和定时器外设的中断源开关)
	TIM_ITConfig(TIM4, TIM_IT_Update , ENABLE);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

念芯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值