STM32系列文章02:定时器中断

本文以STM32F103RETX为例,介绍定时器。103的定时器一共有8个,其中TIM1/TIM8是高级定时器,TIM2~TIM5是通用定时器,TIM6/TIM7是基本定时器。以下主要介绍通用定时器。



本文通过定时器的更新中断来介绍定时器。

实现功能:通过定时器3产生更新中断,1s翻转LED电平一次。

使用STM32CubeMX(V5.3.0)来配置,自动生成代码。

1.选择芯片(STM32F103RETX)

2.下载方式选择

3.时钟选择


选择高速外部时钟(HSE)下的石英/陶瓷晶振

4.时钟树配置

输入72,按【enter】回车键,自动完成时钟配置。

5.配置定时器

选择定时器3,配置时钟预分频为7200-1 = 7199,经过分频后,定时器3的时钟频率为10000Hz,定时器的自动重装载值为10000-1 = 9999(从0计数至9999时间刚好是1s)

6.配置定时器中断

在【NVIC Setting】中勾选定时器3全局中断,在中断服务函数(有的地方也叫中断回调函数,意思一样)中,翻转LED的电平,控制LED亮灭。

7.LED配置

LED引脚连到了芯片上PB6引脚,PB6输出高电平,LED亮;PB6输出低电平,LED灭。此处需要根据个人的原理图来决定。

8.工程配置


9.生成代码

点击软件右上角的【GENERATE CODE】,即可在指定的工程路径下生成代码。本例程生成的是EWARM工程,即IAR代码,也可选择生成MDK工程,即keil代码。根据个人使用的编译器选择。


代码说明:

在主函数中以中断的方式打开定时器3,即添加红色框里的代码,其他代码均为自动生成代码,无需修改。

注意:个人添加的代码段,需要写在【BEGIN】和【END】之间,否则,重新生成代码时会被覆盖掉。


在tim.c中添加定时器中断服务函数,此函数可以在stm32f1xx_hal_tim.h中可以找到。在服务函数中,翻转PB6的电平,也就是每进一次中断,改变一次PB6的电平,即改变一次LED的状态。

10.定时器中断溢出时间的计算

Tout = (arr + 1)* (psc + 1)/clk

式中:

arr:定时器自动重装载值

psc:预分频系数

clk:时钟频率 72000000

Tout:定时器溢出时间(中断时间),单位:秒

工程链接:https://pan.baidu.com/s/1A6hnbxMMKbirowrwXJcDtg 

提取码:uvu3


写在最后:

如果本文对你有帮助,请随意打赏作者。