STM32有多个定时器可供使用,且有多种使用方式,包括普通定时、PWM输出、输入捕获、触发ADC等。本篇文章主要介绍普通定时中断的使用。
前期准备:
- STM32硬件电路板及仿真器(以STM32F072C8单片机为例)
- Keil v5以上版本(MDK-ARM)
首先新建工程后,配置系统时钟为48MHz(参考上一篇GPIO使用中的配置步骤)。以TIM1为例,使能TIM1的时钟源为Internal Clock(即48MHz系统时钟),设置定时器的周期、分频系数等。假设定时周期为100ms,则设置参数如下图。
其中:
预分频值,取值范围为0~65535。
计数模式可以是 向上计数、向下计数、中间对齐计数等。
计数周期,对于16位定时器,取值范围为0~65535。
时钟分频因子, 可以选择不分频、二分频或四分频。
重复计数次数,表示定时器计数值达到计数周期n次后才产生中断。
自动重装,设置为Enable或Disable。
触发输出部分本节用不到,暂不做说明。
定时(溢出)周期 = (预分频值 1)*(计数周期 1)*分频因子*(重复计数次数 1) / 系统时钟48MHz,单位为秒。
上图中(999 1)*(4799 1)*1*1 / 48MHz = 0.1秒,即100ms。
定时器设置完成后,需要在NVIC Setting中打开定时器的溢出中断,TIM1作为高级定时器,其捕获比较中断(capture compare interrupt)和其它中断是独立的,而其它的普通定时器只有统一的一个中断源。这里只用到了溢出(update)中断,所以只打开溢出中断即可。
设置完成后点击 Generate Code生成代码。
可以看到定时器的初始化已经完成,但是此时中断还没有打开,需要自己添加代码启动定时器打开中断。
同时,需要自己编写中断回调函数,假设程序功能是定时100ms时间到后翻转LED端口,则代码如下。
编译程序后下载到电路板,可以看到相应的LED灯按照设定的周期开始闪烁。
定时器的作普通定时用,使用较简单,后面将介绍PWM模式、输入捕获比较、编码器模式等的使用。
,