定时器说白了就是计数器,应用在我们生活的方方面面,比如有闹钟、计时器等。在STM32参考手册中,定时器分为3类,即高级控制定时器(TIM1和TIM8)、通用定时器(TIMx)以及基本定时器(TIM6和TIM7),要学会定时器要懂得分频设置、计数器设置。
高级控制定时器(TIM1和TIM8)由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动。它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较、PWM、嵌入死区时间的互补PWM等)。使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。高级控制定时器(TIM1和TIM8)和通用定时器(TIMx)是完全独立的,它们不共享任何资源。它们可以同步操作
通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作,
基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。这2个定时器是互相独立的,不共享任何资源
(1)定时器的时间;
(2)单片机内部的计数功能:CNT,CNT不断累加(向上计数)或者减减(向下计数);
(3)计算出每次CNT每次+1或者-1的时间,这个时间通过单片机运行的速度也就是频率计算得出,详细的情况可以查看图1。(预分频器的作用就是为了减慢速度)
(4)计数器存放值范围:0-2^16-1(0-65535) ,(16位自动装载计数器).
(5)怎么降低计数器计数的速度,使用分频,72MHZ对应的时间为1/72=0.013us,如果使用72MHZ的速度计数到65535,需要消耗的时间大概是0.013*65535(HZ与时间对应的关系有:MHZ-us,KHZ-ms,HZ~s).
(1)、计数器自增的频率是72MHZ,想让计数器+1的时间为1us,如何分频?计数到65535,需要多少的时间?
分频为72,,得到的技术频率就是1MHZ(1/1MHZ),计数到65535,需要消耗的时间就是65.535ms。
(2)计数器自增的频率是72MHZ,想定时500ms,如何分频,如何设置计数器的最大值?
分频:720,计数器每次+1的时间为10us,计数器最大值为50000。
(1)根据框架图我们可以知道定时器1挂载在APB2上,如图2所示是开时钟位,如图3是定时器1的复位时钟位。
(2)TIM1 和TIM8 预分频器(TIMx_PSC)
(3)TIM1 和TIM8 自动重装载寄存器(TIMx_ARR)
(1)timer.c
/*
函数功能: 配置定时器1
函数参数: psc 预分频器 arr重装载值
*/
void TIMER1_Init(u16 psc,u16 arr)
{
/*1. 开时钟*/
RCC->APB2ENR|=1<<11; //开启定时器1的时钟
RCC->APB2RSTR|=1<<11;//开启定时器1复位时钟
RCC->APB2RSTR&=~(1<<11);//关闭定时器1复位时钟
/*2. 配置核心寄存器*/
TIM1->PSC=psc-1;
TIM1->ARR=arr;
TIM1->CR1|=1<<0; //开启定时器00
}
(2)main.c
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "string.h"
#include "stdio.h"
#include "timer.h"
#include "string.h"
#include "stdlib.h"
int main(void)
{
KEY_Init();
LED_Init();
USARTx_Init(USART1,72,115200);
TIMER1_Init(720,50000);
while(1)
{
if(TIM1->SR&1<<0)
{
LED0=!LED0;
LED1=!LED1;
TIM1->SR&=~(1<<0);
}
}
}
2、实验现象
我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。