STM32定时器中断(HAL)——战舰开发板

个人网站:https://chenqi.autmake.com/

一、定时器介绍

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 

 

发布了16 篇原创文章 · 获赞 9 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览