目录
一.定时器基本原理
1.定时器概念
定时器是微控制器中不可缺少的外设,它主要用于定时、测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等,本质就是进行计数,选择内部时钟脉冲,作为计数器时,技术信号的来源选择非周期脉冲信号。
2.定时器分类
STM32定时器种类多,功能 强大,这些定时器完全独立、 互不干扰,可以同步操作。分为高级定时器、通用定时器和基本定时器三种,它们之间存在功能上的包含关系,即基本定时器有的功能通用定时器都有,通用定时器又包含了高级定时器的部分功能,而高级定时器则增加了如死区互补输出、刹车信号等更高级的功能。
我们最常用的就是通用定时器,TIM2、TIM3、TIM4、TIM5 为STM32的4个独立的16位通 用定时器,具有定时、测量 输入信号的脉冲长度(输入 捕获)、输出所需波形(输出比较、产生PWM、单脉冲 输出等)等功能。
3.时钟计算方法
定时器的定时时间主要取决于定时周期和预分频因子,计算公式为:
定时时间=(ARR+1)×(预分频值PSC+1)/输入时钟频率
或 T=(TIM_Period +1)*(TIM_Prescaler +1)/TIMxCLK 这里ARR+1是因为计数器都是从0开始计数的。
4.工作原理
(1)时钟产生与选择
通用定时器的时钟源有多种选择,主要包括内部时钟(CK_INT)、外部时钟模式(外部输入脚TIx、外部触发输入ETR)和内部触发输入(ITRx)等。时钟源的选择决定了定时器的计数频率。
(2)计数过程
通用定时器内部有一个计数器,它根据所选的时钟源进行计数。计数器的计数模式可以是向上计数、向下计数或者向上/向下双向计数(中心对齐模式)。
a.向上计数模式:计数器从0开始计数,当计数到自动加载值(TIMx_ARR)时,计数器溢出并重新从0开始计数,同时产生一个计数器溢出事件。
b.向下计数模式:计数器从自动加载值(TIMx_ARR)开始向下计数,当计数到0时,计数器重新从自动加载值开始计数,并产生一个计数器向下溢出事件。
c.中心对齐模式:计数器从0开始计数到自动加载值-1时,产生一个计数器溢出事件,然后向下计数到1时,再次产生一个计数器溢出事件。之后计数器从0开始重新计数。
(3)输入捕获与输出比较
通用定时器具有输入捕获和输出比较功能,这些功能通过定时器的输入捕获通道和输出比较通道实现。
a.输入捕获:输入捕获通道可以捕获外部信号的边沿,并记录捕获时刻计数器的值。这可以用于测量输入信号的脉冲宽度或频率。
b.输出比较:输出比较通道可以将计数器的值与预设的比较值进行比较,当两者相等时,可以产生输出信号或触发中断。这可以用于生成PWM波形或控制外部设备的开关。
二.定时器实验
1.任务要求
之前作业中的延时功能都是通过循环、delay/Hal_delay函数等实现,本次作业通过定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务。请设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁,实现一个多任务并发运行的功能。
2.HAL库—工程创建
通过STM32CubeMx创建新工程,点击左上角的File文件选择“New Project”,在弹出的界面中,下拉列表输入芯片名称“STM32F103C8T6”,右下角选中后,点击“Start Project”,界面如下:
配置“RCC”,RCC中, HSE选中"Crystal/Ceramic Resonator"项,LSE选择Disable,界面如下:
配置“SYS”,下拉Debug模式 ,选中"Serial Wire"Timebase Source选择“SysTick”,界面如下:
然后进行GPIO口的管脚配置,这里我选择了PA1作为LED指示灯,配置如下: