本文以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
写在最后:
如果本文对你有帮助,请随意打赏作者。