STM32HAL库编程——TIM定时器计数

实现现象

        定时器每隔1s,就在OLED显示屏上加1.

实现步骤

(一)HAL库设置

1.配置时钟

        主要是配置时钟。时钟这里还是老配置。

接着是配置时钟树。

因为我们是采用TIM2定时器,而且想让频率为72MHZ,那就要红圈地方为72MHZ.

为了让红圈为72MHZ,那就要选择PLL时钟也就是锁相环倍频输出。如下图红线所示。

为了让PLL为72MHZ,那就要选择外部时钟,且设置为8MHZ,放大9倍。

然后就配置完成了,下图是完成图:

2.配置OLED引脚

        因为我现在在使用C8T6芯片,所以为了便于将OLED长期固定在一个地方,以后就将OLED的SCK设置为PB8、SDA设置为PB9。这两个引脚也是什么都不用改,只需要记住是低电平推挽输出就可以了。

3.配置TIM2

        也是只需要改3个地方。预分频器为7200,计数模式为向上计数,自动重装寄存器设为10000.

详情请查看我之前写的固件库TIM部分。

因为我们这是要触发一个中断事件,就是计数每到1万次就触发一次中断,然后进入中断执行程序。

        这里可以和EXTI对比理解:EXTI是外部触发中断,TIM是内部触发中断。

然后使能NVIC。

(二)编写代码

1.插入OLED函数

        这就不细讲了。

2.TIM.c函数

        TIM函数是直接以TIM命名的。

对于TIM.c函数,我们只需要改一个地方,那就是在初始化里面添加使能,告诉STM32我要使用TIM2了给我打开它。

  HAL_TIM_Base_Start_IT(&htim2);

然后,除非是要变动预分频器和计数器的计数值,不然就不动它。因为函数都已经自动初始化完了。

3.编写定时器中断函数

        现在就直接打开中断函数,因为我们是用的定时中断。

这个函数就是TIM2的定时中断函数,只要计数器计数到设定值,就执行这个函数。所以我们想要实现什么东西,直接在这里面弄就行了。

        当然,一般都是直接用虚函数编写内容。因为这个函数内容就只有一行代码,而这一行代码又要执行一个虚函数,所以我们直接弄虚函数即可。

虚函数是HAL_TIM_PeriodElapsedCallback,这个函数在HAL_TIM_IRQHandler里面有。

如上图,虚函数代码意思为:只要中断一次,就记一次数。

我们在虚函数里面做了一个判断,这个判断是必须的,因为这个虚函数是供所有TIM定时器服务的,就是说只要是任意一个定时器中断了,就会执行这个函数。所以要在这里做一个判断,看看是哪个定时器来的中断。  

htim->Instance ==TIM2

这个式子不用知道原理,直接拿来判断就是。

这个函数就是用来返回数字。

然后就完成了!

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值