1.定时器概念
人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多。人们甚至将定时器用在了军事方面,制成了定时炸弹,定时雷管。不少家用电器都安装了定时器来控制开关或工作时间。
我们单片机中的定时器主要功能:定时,延时,输入(输入检测外部脉冲信号)输出(输出特定的波形)的作用。
单片机中定时器的分类:
我们目前学习的定时器都是软件定时器
定时器的基本原理:
通用定时器时钟大小:72MHZ
基本定时器:TIM6和TIM7
功能简单,只是实现了延时,定时的功能
通用定时器:TIM2、 TIM3、 TIM4和TIM5(重点)
包含基本定时器的功能,除此之外还有输入捕获(波形)和输出比较(跳变沿--输出波形)
高级定时器:TIM1和TIM8
包含了通用定时器的功能,但是又增加了对于电机控制方面的特性,死区和刹车概念
系统定时器--属于内核(系统内部)的
系统定时器,也可以叫做嘀嗒定时器
用于简单的定时,产生一个us或者ms的延时
Cortex-M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作就得以化简。该定时器的时钟源可以是内部时钟(FCLK, CM3上的自由运行时钟),或者是外部时钟( CM3处理器上的STCLK信号)。不过, STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同。因此,需要检视芯片的器件手册来决定选择什么作为时钟源。
SysTick定时器能产生中断, CM3为它专门开出一个异常类型,并且在向量表中有它的一席之地。它使操作系统和其它系统软件在CM3器件间的移植变得简单多了,因为在所有CM3产品间,SysTick的处理方式都是相同的。
2.系统定时的使用
系统定时器相关的寄存器
系统定时器初始化
中断服务函数:
#include "delay.h" //主要在主函数中调用,就会一直工作 void systick_Init(void) { //参数72代表就是两次进入中断的间隔,72个时钟周期进一个中断 SysTick_Config(72);//72MHZ 周期:1/72 us (72个1/72)us =1us } u32 systick_count=0; void SysTick_Handler(void) { systick_count++; } //tim--500 void delay_us(u32 tim) { //假如此刻进入延时函数systick_count==1000,但是在终端服务函数中 //systick_count会一直进行工作--累加,因此我们需要保存systick_count //当前数值 u32 val=systick_count+tim;//定时的临界值 while(systick_count<val); } void delay_ms(u32 tim) { delay_us(tim*1000); }
3.通用定时器
通用定时器既可以实现简单的延时,但是一般我们用通用定时器都会使用到通用定时器的输出比较和输入捕获功能,我们今天主要讨论的是输出比较功能。
输出比较其实就是在特定的时间中,进行比较,改变IO的电平状态
PWM波是一种特殊的输出比较,脉冲宽度可以调节
脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变
计数方向:向上计数 向下计数 向上向下计数
时钟单元:
定时器的时序图:
寄存器部分:
捕获/比较寄存器
波形的模式如何控制??--TIMX_CCMR寄存器
具体的寄存器描述请参考中文手册14章节
使能控制寄存器:
4.PWM波配置流程:
闪烁灯实验:通过定时器的PWM波实现的
LED--PB5
硬件原理图:
1.打开时钟--B端口、定时器3时钟
2.配置PB5--复用推挽
3.配置定时器3基本配置--分频值 重装载 计数方向
4.配置定时器3PWM波-- PWM波模式 ,输出方向 比较值(CCR)、有效电平(CCER)输出使能(CCER).
5.库函数的应用
时钟配置:
IO口初始化: