一、定时器介绍
STM32F1 的定时器功能十分强大,有 TIM1 和 TIM8 等高级定时器,也有 TIM2~TIM5 等通用定时器,还有 TIM6和 TIM7 等基本定时器。下面以通用定时器TIM3为例来简单介绍STM32定时器的使用。
STM32F1 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。
由于 STM32 通用定时器比较复杂,这里我们不再多介绍,定时器的详细介绍,请参考《STM32参考手册》第253页。
二、软件介绍
我们以正点原子的战舰开发板(STM32F103ZET6)为例,来介绍通用定时器TIM3的使用。我们使用定时器TIM3产生中断,然后在中断服务函数里面翻转 DS0 上的电平,来指示定时器中断的产生。DS0是直接连在PB5引脚上,PB5输出低电平时,DS0点亮,PB5输出高电平时,DS0熄灭。我们用STM32CubeMX来配置定时器以及DS0。
定时器3的参数设置:
定时器3需要开启中断。
自动生成的代码基本不用做修改,需要在初始化时打开定时器。
在tim.c文件中添加定时器中断服务函数(中断回调函数),每次产生中断,程序会跳到中断服务函数中来执行。
程序编译完成,下载到开发板后,会看到DS0每间隔0.5S闪烁一次。
定时器中断时间的计算
STM32F103ZET6的TIM3时钟是72M,预分频为7199,定时器自动重装载值为4999,经过预分频后,时钟频率为72000000/(7199+1) = 10K,定时器从0计数到4999,一共5000个数,即500ms。
arr:定时器自动重装载值
psc:预分频系数
clk:时钟频率 72000000
Tout:定时器溢出时间(中断时间)
Tout = (arr+1)*(psc+1)/clk
工程链接:https://pan.baidu.com/s/1ic_6R94cdL4PTx9PztPrNA
提取码:x1iv